在微信開發以前須要瞭解一下內容:php
微信公衆號的編輯者模式和開發者模式的區別?api
編輯者模式只是單純圖文編輯,相似在word下的操做。開發者模式是微信團隊開放給第三方服務器接入微信服務器與微信用戶交互的一種方式(微信用戶->客戶,微信服務器->蛋糕店售賣員,第三方服務器->蛋糕師):微信用戶發送請求給微信服務器把拿到微信用戶的請求經過開發者模式的URL(如http://www.baidu.com/index.php就是:第三方服務器地址/入口文件)發給第三方服務器。瀏覽器
理解上面的工做原理的流程以後,跟着下面的步驟來作慢慢來感覺一下:服務器
第一步(註冊配置公衆號測試號):微信
須要有一個認證的微信服務號,若是沒有能夠申請一個測試號:微信開發
打開瀏覽器登陸網址:點擊這裏app
2.登陸後微信團隊會給你一個appID和appsecret,接下來你要填寫的就是你的本身的URL和Token了(URL是你的服務器的訪問域名,若是沒有本身的線上服務器的話能夠看下面的第二步,若是有的話跳到第三步;Token是微信服務器與你服務器鏈接起來的一個密鑰(yourtoken)(一串隨意的字符串(本身定義便可,跟微信訪問你項目入口文件的一致便可)請看下面第三步))函數
第二步(ngrok映射自定義域名訪問本地項目):post
第一種狀況:有本身線上服務器的而且綁定域名的,跳過。測試
第二種狀況:沒有本身線上服務器的,只有本地服務器和我的項目的,須要進行如下的配置:
{1.下載並解壓適合你的版本
2.用記事本打開 run.bat 修改方法是:把myapp 改成你本身的本地項目文件夾名稱
(如個人的是wjxwxt);
3.雙擊 run.bat ,配置成功後會出現如下畫面:
}
2.自定義域名訪問本身的項目(也就是配置 http://yourprojectname.ngrok.natapp.cn
(這個也是你在微信公衆測試號配置的URL了)) 這裏具體怎麼作能夠看我以前分享的文章:點擊查看
第三步(本地項目入口文件配置):
1.新建一個 wechat_index.php,代碼以下:
<?php /** * wechat php test */ //define your token define("TOKEN", "yourtoken"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->valid(); //封裝一個類,用來實例化後,調用方法給微信服務器 class wechatCallbackapiTest { public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $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(!empty( $keyword )) { $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else { echo ""; exit; } } private function checkSignature() { // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } } ?>
上述代碼也能夠簡潔爲以下:
<?php //1.將timestampe,nonce,token按字典序排序 $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $token = 'jinhuaWeixin'; $signature = $_GET['signature']; $array = array($timestamp, $nonce, $token); sort( $array ); //2.將排序後的三個參數拼接以後用sha1加密 $tmpstr = implode( '', $array ); $tmpstr = sha1( $tmpstr ); //3.將加密後的字符串與signature進行對比,判斷該請求是否來自微信 if( $tmpstr == $signature ){ echo $_GET['echostr']; } ?>
2.回到微信公衆測試號 填寫好 URL 和Token 以後提交,若是配置成功即說明你的項目已經能夠在ngrok的映射下成功和微信服務器鏈接成功,接下來就是把入口文件的 $wechatObj->valid();調用的方法改成調用其它方法來實現你的需求了,也能夠在你調用的方法裏面實例化你本人封裝好的類來調用你的方法或者直接調用函數。
^_^愛分享,愛生活。