(1)打開上一篇咱們從花生殼官網得到的外網網址就會看到localhost根目錄下的文件(這裏再也不贅述php環境的搭建)。注:由於外網網址在能聯網時,訪問外網網址的任何人都能看到根目錄下的全部文件,不只能看還能執行,故博主推薦實現內網穿透後不要把重要文件放在localhost目錄下,畢竟當心駛得萬年船。php
(2)在localhost根目錄新建一個wx文件夾,在文件夾裏面新建一個api.php打開新建的api.php並將如下代碼複製進去(以下代碼中都有至關詳細的註釋,在此再也不解釋如下代碼)算法
1 <?php 2 /** 3 * wechat php test 4 */ 5 header('Content-type:text'); 6 //define your token 7 //定義TOKEN密鑰 8 define("TOKEN", "weixin"); 9 //實例化微信對象 10 $wechatObj = new wechatCallbackapiTest(); 11 //驗證成功後註釋掉valid方法 12 $wechatObj->valid(); 13 //開啓自動回覆功能 14 $wechatObj->responseMsg(); 15 //定義類文件 16 class wechatCallbackapiTest 17 { 18 //實現valid驗證方法:實現對接微信公衆平臺 19 public function valid() 20 { 21 //經過GET請求接收隨機字符串 22 $echoStr = $_GET["echostr"]; 23 //調用checkSignature方法進行用戶(開發者)數字簽名驗證 24 //valid signature , option 25 if($this->checkSignature()){ 26 //若是成功,則返回接收到的隨機字符串 27 echo $echoStr; 28 //並退出 29 exit; 30 } 31 } 32 33 public function responseMsg() 34 { 35 //get post data, May be due to the different environments 36 //接收用戶端(客戶)發送過來的XML數據 37 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 38 39 //extract post data 40 //判斷XML數據是否爲空 41 if (!empty($postStr)){ 42 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, 43 the best way is to check the validity of xml by yourself */ 44 libxml_disable_entity_loader(true); 45 //經過simplexml進行xml解析 PHP中有兩大類能夠完成對XML的解析,1.PHP的Dom模型2.經過simplexml模型 46 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 47 //手機端 48 $fromUsername = $postObj->FromUserName; 49 //微信公衆平臺 50 $toUsername = $postObj->ToUserName; 51 //接收用戶發送的關鍵詞 52 $keyword = trim($postObj->Content); 53 //時間戳 54 $time = time(); 55 //文本發送模板 56 $textTpl = "<xml> 57 <ToUserName><![CDATA[%s]]></ToUserName> 58 <FromUserName><![CDATA[%s]]></FromUserName> 59 <CreateTime>%s</CreateTime> 60 <MsgType><![CDATA[%s]]></MsgType> 61 <Content><![CDATA[%s]]></Content> 62 <FuncFlag>0</FuncFlag> 63 </xml>"; 64 //判斷用戶發送關鍵詞是否爲空 65 if(!empty( $keyword )) 66 { 67 //回覆類型,若是爲"text",表明文本類型 68 $msgType = "text"; 69 //回覆內容 70 $contentStr = "Welcome to wechat world!"; 71 //格式化字符串(對xml進行格式化操做,把裏面相關的變量格式化成字符串) 72 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); 73 //把XML數據返回給手機端 74 echo $resultStr; 75 } 76 //若是用戶發送的關鍵詞爲空,則返回下列字符串 77 else{ 78 echo "Input something..."; 79 } 80 81 }else { 82 echo ""; 83 exit; 84 } 85 } 86 87 //定義checkSignature方法 88 private function checkSignature() 89 { 90 // you must define TOKEN by yourself 91 92 //判斷TOKEN密鑰是否認義 93 if (!defined("TOKEN")) { 94 //若是沒有定義則拋出異常,返回'TOKEN is not defined!'字符串 95 throw new Exception('TOKEN is not defined!'); 96 } 97 //接收微信加密簽名 98 $signature = $_GET["signature"]; 99 //接收時間戳信息 100 $timestamp = $_GET["timestamp"]; 101 //接收隨機數 102 $nonce = $_GET["nonce"]; 103 //把TOKEN常量賦值給$token變量 104 $token = TOKEN; 105 //把相關參數組裝爲數組(密鑰文件、時間戳、隨機數) 106 $tmpArr = array($token, $timestamp, $nonce); 107 // use SORT_STRING rule 108 //經過字典法進行排序 109 sort($tmpArr, SORT_STRING); 110 //把排序後的數組轉化爲字符串 111 $tmpStr = implode( $tmpArr ); 112 //經過哈希算法對字符串進行加密操做 113 $tmpStr = sha1( $tmpStr ); 114 //與加密簽名進行對比 115 if( $tmpStr == $signature ){ 116 return true; 117 }else{ 118 return false; 119 } 120 } 121 } 122 123 ?>
(3)打開微信公衆平臺"開發"菜單中的"基本配置"項,並點擊"修改配置"api
(4)1.進入修改配置頁面填寫配置信息。這裏假設得到的域名爲ww,baidu.com,url處填寫咱們上一篇得到的域名並詳細到第二步咱們建立的php文件,例:http://www.baidu.com/wx/api.php數組
2.token處填寫咱們第二步建立的php文件的第8行定義的token服務器
3.第三項隨機生成,第四項根據業務須要選擇微信
4.最後點擊提交按鈕微信公衆平臺
(5)提交後,頁面頂端會有提示,顯示提交成功,則爲提交成功;若顯示其餘,則爲提交不成功post
(6)此時,服務器配置旁邊會顯示"已啓用"字樣。至此微信公衆平臺的開發者模式已開啓,從此咱們就能夠經過修改api.php文件來修改公衆號的功能了(注:驗證成功後請註釋掉api.php文件中的第十二行,由於valid方法僅僅具備驗證功能,若是不註釋,每運行一遍此文件,就會調一次驗證方法,可是驗證經過後,不須要再調用此方法){好吧,確實有點繞反正驗證經過後註釋掉就好了}this
注:未經容許,禁止轉載加密