(1)打開上一篇我們從花生殼官網獲得的外網網址就會看到localhost根目錄下的文件(這里不再贅述php環境的搭建)。注:因為外網網址在能聯網時,訪問外網網址的任何人都能看到根目錄下的所有文件,不僅能看還能執行,故博主推薦實現內網穿透后不要把重要文件放在localhost目錄下,畢竟小心駛得萬年船。
(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)打開微信公眾平台"開發"菜單中的"基本配置"項,並點擊"修改配置"
(4)1.進入修改配置頁面填寫配置信息。這里假設獲得的域名為ww,baidu.com,url處填寫我們上一篇獲得的域名並詳細到第二步我們創建的php文件,例:http://www.baidu.com/wx/api.php
2.token處填寫我們第二步創建的php文件的第8行定義的token
3.第三項隨機生成,第四項根據業務需要選擇
4.最后點擊提交按鈕
(5)提交后,頁面頂端會有提示,顯示提交成功,則為提交成功;若顯示其他,則為提交不成功
(6)此時,服務器配置旁邊會顯示"已啟用"字樣。至此微信公眾平台的開發者模式已開啟,今后我們就可以通過修改api.php文件來修改公眾號的功能了(注:驗證成功后請注釋掉api.php文件中的第十二行,因為valid方法僅僅具有驗證功能,如果不注釋,每運行一遍此文件,就會調一次驗證方法,但是驗證通過后,不需要再調用此方法){好吧,確實有點繞
反正驗證通過后注釋掉就行了}
注:未經允許,禁止轉載