php微信公眾號開發,入門篇(實現了關注公眾號發送歡迎信息,發關鍵詞自回復)


 大致效果如下圖所示!

一、入門經歷

首先我看的慕課網的視頻,理論的東西還不錯,可是跟着把代碼敲一遍的時候就沒懵逼了,除了驗證服務器通過之外,

關注公眾號根本不會自動回復,着急呀,再找其他的,敲完代碼,再測試依然不行,折磨人呀!於是我重新來排查一遍,

說下都排查了哪些些:

第一:用的訂閱號沒問題(有在關注時回復信息的功能)

第二:開發用的服務器的公網開發地址(要直接指向自己的程序)要配置好

第三:服務器上的文件目錄要和第二部的網址對應起來,檢測也沒問題

 

然后我就各種檢查代碼,結果一次次失敗,關注公眾號就是不會回復歡迎信息,我沒放棄,不斷嘗試,換了其他方式,比如下載別人的

源代碼,結果也是徒勞,搞得我都認為不是代碼出錯了,而是其他環節出錯了,而事實證明只要你能成功驗證服務器,那么就可以進行開發

出錯的話,就是程序的問題,果不其然,我又嘗試了一份源碼,結果可以用,好開心呀,下面把源碼粘上,謝謝大家耐心看我吐槽!

二、入門經歷

下面為index.php只有這一個頁面就實現了回復歡迎信息及發送關鍵詞回復信息的功能

  1 <?php
  2 /**
  3  * wechat php test
  4  */
  5  
  6 //define your token
  7 define("TOKEN", "weixin");
  8 $wechatObj = new wechatCallbackapiTest();
  9 //$wechatObj->valid();//接口驗證
 10 $wechatObj->responseMsg();//調用回復消息方法
 11 class wechatCallbackapiTest
 12 {
 13  public function valid()
 14  {
 15  $echoStr = $_GET["echostr"];
 16  
 17  //valid signature , option
 18  if($this->checkSignature()){
 19  echo $echoStr;
 20  exit;
 21  }
 22  }
 23  
 24  public function responseMsg()
 25  {
 26  //get post data, May be due to the different environments
 27  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 28  
 29  //extract post data
 30  if (!empty($postStr)){
 31  /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
 32   the best way is to check the validity of xml by yourself */
 33  libxml_disable_entity_loader(true);
 34   $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
 35  $fromUsername = $postObj->FromUserName;
 36  $toUsername = $postObj->ToUserName;
 37  $keyword = trim($postObj->Content);
 38  $time = time();
 39  $msgType = $postObj->MsgType;//消息類型
 40  $event = $postObj->Event;//時間類型,subscribe(訂閱)、unsubscribe(取消訂閱)
 41  $textTpl = "<xml>
 42   <ToUserName><![CDATA[%s]]></ToUserName>
 43   <FromUserName><![CDATA[%s]]></FromUserName>
 44   <CreateTime>%s</CreateTime>
 45   <MsgType><![CDATA[%s]]></MsgType>
 46   <Content><![CDATA[%s]]></Content>
 47   <FuncFlag>0</FuncFlag>
 48   </xml>"; 
 49    
 50  switch($msgType){
 51   case "event":
 52   if($event=="subscribe"){
 53   $contentStr = "Hi,歡迎關注海仙日用百貨!"."\n"."回復數字'1',了解店鋪地址."."\n"."回復數字'2',了解商品種類.";
 54   } 
 55   break;
 56   case "text":
 57   switch($keyword){
 58   case "1":
 59   $contentStr = "店鋪地址:"."\n"."杭州市江干艮山西路233號新東升市場地下室第一排."; 
 60   break;
 61   case "2":
 62   $contentStr = "商品種類:"."\n"."杯子、碗、棉簽、水桶、垃圾桶、洗碗巾(刷)、拖把、掃把、"
 63    ."衣架、粘鈎、牙簽、垃圾袋、保鮮袋(膜)、剪刀、水果刀、飯盒等.";
 64   break;
 65   default:
 66   $contentStr = "對不起,你的內容我會稍后回復";
 67   }
 68   break;
 69  }
 70  $msgType = "text";
 71  $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
 72  echo $resultStr;
 73  }else {
 74  echo "";
 75  exit;
 76  }
 77  }
 78   
 79  private function checkSignature()
 80  {
 81  // you must define TOKEN by yourself
 82  if (!defined("TOKEN")) {
 83  throw new Exception('TOKEN is not defined!');
 84  }
 85   
 86  $signature = $_GET["signature"];
 87  $timestamp = $_GET["timestamp"];
 88  $nonce = $_GET["nonce"];
 89   
 90  $token = TOKEN;
 91  $tmpArr = array($token, $timestamp, $nonce);
 92  // use SORT_STRING rule
 93  sort($tmpArr, SORT_STRING);
 94  $tmpStr = implode( $tmpArr );
 95  $tmpStr = sha1( $tmpStr );
 96   
 97  if( $tmpStr == $signature ){
 98  return true;
 99  }else{
100  return false;
101  }
102  }
103 }

 

好難呀,接下來還要開發微信卡包會員卡,希望順利吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM