php開發日記之微信開發模式
阿新 • • 發佈:2019-02-04
學php最大的熱情就是在大一的時候接觸微信公眾平臺,第一次玩的時候還是編輯模式,慢慢深入就接觸到開發模式了,今天寫開發模式的接入,這是微信開發的最基礎的。
1.首先呢,你必須要有伺服器,不管是新浪雲sae,百度雲bae,阿里雲ace都可以,或者是虛擬空間,雲主機都是可以的,那我當然是使用的阿里雲的雲主機作為開發伺服器,依舊是appserv整合環境,有獨立ip
2.開啟微信公眾平臺,點選開發者中心,我們需要做的就是將伺服器配置這地方連線好,下面說怎麼配置
3.找到開發者文件,點選左邊開發者必讀,找到php示例程式碼下載,解壓,將所得到的wx_sample.php檔案上傳到伺服器的www資料夾下面,我下面的程式碼是基於官方的修改
這程式碼的意思是,在微信平臺回覆?,將自動回覆當前時間給傳送者。程式碼解釋就直接標註在程式碼上了。<?php define("TOKEN", "weixin");//定義常量TOKEN為weixin,也就是後臺填寫的token $wechatObj = new wechatCallbackapiTest();//例項化類物件 if(isset($_GET['echostr'])){//判斷GET請求中是否有echostr物件 $wechatObj->valid(); }else{ $wechatObj->responseMsg(); } class wechatCallbackapiTest//定義類,並實現三種方法 { public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){//呼叫checkSignatuure方法 echo $echoStr; exit; } } private function checkSignature()//檢查簽名 { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce);//token,時間戳,隨機數 sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收原始訊息 if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//將資料載入原始物件中 $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if( $keyword =="?") { $msgType = "text"; $contentStr = date("Y-m-d H:i:s",time()); $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;//這幾句是封裝回復的xml資料包 }else { echo ""; exit; } } } } ?>
4.將微信後臺URL這一欄填寫伺服器IP地址(或者域名)/wx_sample.php,token一欄填寫weixin即可,點選提交,即可提交成功,如果提交失敗,可能是伺服器響應太慢,重新提交,或者換一臺延遲第一點的伺服器。
5.至於加密方式可以隨便選一個暫時,畢竟這個程式碼只是用來測試的