微信公眾號開發完整教程(一) PHP7.0版本,TP5.0框架
因為工作的需要,這一兩年對微信公眾號和小程式,專案製作的比較多。所以我才打算寫一篇全面的製作教程,當然了,最好的教程是微信工作平臺的文件。我這裡只是講述一下我的工作中的製作流程。所有相關文章的原始碼,我託管在我自己的github上面,歡迎關注:地址點選開啟連結。接下來開始我們的教程。
1.微信與公眾平臺的區別:
微信:即時聊天的軟體,屬於一對一的關係
微信公眾平臺:屬於一對多的關係。
2.訂閱號與服務號的區別:
訂閱號:針對個人或媒體每天可以群發1條資訊,預設不具有自定義選單。伺服器號:針對企業或銀行每月可以群發4條資訊,預設具有自定義選單。運營主體是組織(比如企業、媒體、公益組織)的,可以申請服務號。運營主體是組織和個人的可以申請訂閱號,但是個人不能申請服務號。
3.公眾平臺的兩種模式:
1、編輯模式:直接使用微信公眾平臺所提供的後臺操作進行使用者互動。編輯模式可以使用在如下的場景:不具備開發能力的運營者,主要是進行品牌宣傳、新聞媒體、自助客服的公眾賬號,運營初期,不需要特別多的功能,開發模式系統升級,故障等特殊情況
2、開發者模式:直接使用介面程式碼實現使用者的交流
4.微信公眾平臺前期準備:
註冊公眾平臺,擁有線上伺服器
5.認識一下編輯模式:
原理:
5.1訊息群發:
選擇物件選擇素材進行群發:
5.2:自定義選單:
啟用自定義選單,並開啟:
點選檢視,進入設定介面:
5.3自動回覆:
上述講述的主要是編輯模式的使用,我想很多人應該都會使用,其實和我們平常在論壇編輯文章和帖子差不多。
6.開發者模式
原理:
6.1第一步我們要開啟開發者模式:
注意:在開啟開發者模式之後編輯模式中部分功能不能正常使用。即開發者模式跟編輯模式存在衝突。進入設定介面:
修改配置:
設定結果如下圖:填寫上你的伺服器檔案地址,token,點選提交,驗證即可。如果提交併驗證通過,就進入到開發者模式
6.2我線上的驗證程式碼如下:
public function valid(){ //獲取隨機字串 $echoStr = input("echostr"); if($echoStr){ // 驗證介面的有效性,由於介面有效性的驗證必定會傳遞echostr 引數 if關於上述程式碼中的變數來源,微信都有詳細的說明,我搭建的公眾號使用的是PHP7.0版本,TP5.0框架。在這裡說明一下。
上述程式碼只會執行一次,開啟開發者模式之後,就不會在執行,只會執行上述程式碼中的
responseMsg方法。
我們先上傳一段測試程式碼試試,回覆文字訊息,是否有回覆,程式碼如下:
public function responseMsg() { //get post data, May be due to the different environments $postStr = file_get_contents('php://input'); //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; } }
結果如下:
,由於微信的網頁授權的限制,所以我們可以申請測試賬號,我這裡使用的就是測試賬號。上述的開啟開發者模式是一樣的。只需要去申請一個測試賬號就好。申請的地方:
如果出現上述的程式碼,說明我們已經測試成功。接下來,我們開始獲取access_token的值,這個引數對於我們來說很重要。因為
access_token是公眾號的全域性唯一介面呼叫憑據,公眾號呼叫各介面時都需使用access_token。開發者需要進行妥善儲存。access_token的儲存至少要保留512個字元空間。access_token的有效期目前為2個小時,需定時重新整理,重複獲取將導致上次獲取的access_token失效。access_token是身份認證 其他介面基本上都需要使用該值進行驗證。
7.access_token獲取:(可以在本地測試)
7.1檢視介面說明:
獲取access_token方式一:
結果如下:
獲取access_token方式二:
結果如下:
我們開始對上述的程式碼進行封裝,因為access_token,每天只能呼叫2000次,所以我們要快取起來,這樣才能達到複用的效果,
7.2:curl封裝傳送請求和獲取access_token封裝:
// 獲取請求的地址的方法if(!function_exists("http_curl")){ function http_curl($url,$data =array(),$method ="get",$returnType ="json") { //1.開啟會話 $ch = curl_init(); //2.設定引數 curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); if($method!="get"){ curl_setopt($ch,CURLOPT_POST,TRUE); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); } curl_setopt($ch,CURLOPT_URL,$url); //執行會話 $json = curl_exec($ch); curl_close($ch); if($returnType == "json"){ return json_decode($json,true); } return $json; }}if(!function_exists('get_access_token')){ function get_access_token() { $appid = "wx1ba8f59d9e2c0be0"; //微信的appid $secret ="9e65155599fb9ec047455e197ff6e121"; //微信的開發者金鑰 // 讀取快取中的內容 include_once "MyMemcache.php"; //引入快取方法檔案 $obj = new \MyMemcache("47.104.71.253"); $value = $obj ->get($appid); if(!$value){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret; $result = http_curl($url); $value = $result['access_token']; $obj->set($appid,$value,7000); } return $value; }}上述程式碼就是我對這兩個方法的封裝,其中我們用到了快取技術:快取的方法如下:
// memcache操作類class MyMemcache{ public $conn; public $isMemcache =true; public function __construct($host="127.0.0.1",$port='11211') { // 建立連線 if(class_exists('MyMemcache')){ $obj =new \Memcache(); }else{ $this ->isMemcache =false; $obj =new \Memcached(); } $obj ->addServer($host,$port); $this ->conn =$obj; } //獲取資料 public function get($key) { return $this->conn->get($key); } //設定資料 public function set($key,$value,$expire=0) { if($this->isMemcache){ $this->conn->set($key,$value,0,$expire); }else{ // Memcached擴充套件的操作方式 $this->conn->set($key,$value,$expire); } }}結合上述的三個方法,我們就可以實現獲取access_token的值,並儲存在快取系統,7000s去重新獲取一次。
上述的步驟完成,我們就算是對微信公眾號的開發的基本準備全部準備完畢,接下來就開始對著微信開發者文件進行開發和資料的替換了。第一節先講述到這裡.....