PHP語言開發微信公眾平臺(訂閱號)之開啟開發者模式(3)

編程語言 PHP 微信 移動互聯網 科技優家 2017-03-25

(1)打開上一篇我們從花生殼官網獲得的外網網址就會看到localhost根目錄下的文件(這裡不再贅述php環境的搭建)。注:因為外網網址在能聯網時,訪問外網網址的任何人都能看到根目錄下的所有文件,不僅能看還能執行,故博主推薦實現內網穿透後不要把重要文件放在localhost目錄下,畢竟小心駛得萬年船。

PHP語言開發微信公眾平臺(訂閱號)之開啟開發者模式(3)

(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)打開微信公眾平臺"開發"菜單中的"基本配置"項,並點擊"修改配置"

PHP語言開發微信公眾平臺(訂閱號)之開啟開發者模式(3)

(4)1.進入修改配置頁面填寫配置信息。這裡假設獲得的域名為ww,baidu.com,url處填寫我們上一篇獲得的域名並詳細到第二步我們創建的php文件,例:http://www.baidu.com/wx/api.php

2.token處填寫我們第二步創建的php文件的第8行定義的token

3.第三項隨機生成,第四項根據業務需要選擇

4.最後點擊提交按鈕

PHP語言開發微信公眾平臺(訂閱號)之開啟開發者模式(3)

(5)提交後,頁面頂端會有提示,顯示提交成功,則為提交成功;若顯示其他,則為提交不成功

PHP語言開發微信公眾平臺(訂閱號)之開啟開發者模式(3)

(6)此時,服務器配置旁邊會顯示"已啟用"字樣。至此微信公眾平臺的開發者模式已開啟,今後我們就可以通過修改api.php文件來修改公眾號的功能了(注:驗證成功後請註釋掉api.php文件中的第十二行,因為valid方法僅僅具有驗證功能,如果不註釋,每運行一遍此文件,就會調一次驗證方法,但是驗證通過後,不需要再調用此方法){好吧,確實有點繞反正驗證通過後註釋掉就行了}

注:未經允許,禁止轉載

相關推薦

推薦中...