首頁  >  文章  >  後端開發  >  php基礎教程之微信公眾平台開發

php基礎教程之微信公眾平台開發

巴扎黑
巴扎黑原創
2017-08-17 09:06:591366瀏覽


摘要:微信公眾平台提供的介面很簡單,先看看訊息互動流程:說的通俗一些,使用者使用微信傳送訊息- 微信將數據傳送給開發者- 開發者處理訊息並回傳資料至微信- 微信把回傳資料傳送給用戶,期間資料互動透過XML完成,就這 ...

微信大眾平台提供的介面很簡單,先看看訊息互動流程:

php基礎教程之微信公眾平台開發

說的通俗一些,使用者使用微信傳送訊息-> 微信將資料傳送給開發者-> 開發者處理訊息並回傳資料至微信-> 微信把回傳資料傳送給用戶,期間資料互動透過XML完成,就這麼簡單。

下面寫個實例,開發微信智慧聊天機器人:

  1. #註冊微信公眾平台帳號
    微信公眾平台:
    https://mp.weixin.qq.com/
    附註: 目前一張身分證只能註冊兩個帳號,帳號名稱關乎加V認證,請慎重註冊。

  2. 申請伺服器/虛擬主機
    沒有伺服器/虛擬主機的童鞋可以使用BAE和SAE,不多介紹。

  3. 開啟開發者模式
    微信公眾平台有兩個模式,一個是編輯模式(傻瓜模式),簡單但功能單一。另一個是開發者模式,可以透過開發實現複雜功能。兩個模式互斥,顯而易見,登入微信公眾平台並透過「進階功能」選單開啟開發者模式。

  4. 填寫介面配置資訊
    同樣是在「進階功能」選單中配置,需要設定兩個參數:
    URL: 開發者應用存取位址,目前僅支援80個端口,以“http://www.YoonPer.com/weixin/index.php”為例。
    TOKEN: 隨意填寫,用於產生簽名,以「YoonPer」為例。
    填完把下面程式碼儲存為index.php並上傳至http://www.YoonPer.com/weixin/目錄,最後點選「提交」完成驗證。

define("TOKEN", "YoonPer"); //TOKEN值
$wechatObj = new wechat();
$wechatObj->valid();
class wechat {
  public function valid() {
    $echoStr = $_GET["echostr"];
    if($this->checkSignature()){
      echo $echoStr;
      exit;
    }
  }
  private function checkSignature() {
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ) {
      return true;
    } else {
      return false;
    }
  }
}
?>

其實就是微信公眾平台校驗URL是否正確接入,研究程式碼沒有實質性意義,驗證完即可刪除文件,就不詳細說明了,有興趣的童鞋可以查看官方文件。
微信公眾平台API文件:http://mp.weixin.qq.com/wiki/index.php

  1. 開發微信公眾平台功能
    OK,上面提到了,微信公眾平台與開發者之間的資料互動是透過XML完成的,既然用到XML,當然得遵循規範,所以在著手開發之前先看看官方介面文件提供的XML規範,以文字訊息為例:

當使用者向微信公眾帳號傳送訊息時,微信伺服器會POST給開發者一些資料:

<xml><ToUserName>ToUserName><FromUserName>FromUserName><CreateTime>12345678CreateTime><MsgType><![CDATA1]>MsgType><Content>Content><MsgId>1234567890123456MsgId>xml>

開發者在處理完訊息後需要傳回數據給微信伺服器:

<xml><ToUserName>ToUserName><FromUserName>FromUserName><CreateTime>12345678CreateTime><MsgType><![CDATA1]>MsgType><Content>Content><FuncFlag>0FuncFlag>xml>

除文字訊息外,微信公眾平台還支援用戶發送圖片訊息、地理位置訊息、連結訊息、事件推送,而開發者還可以向微信公眾平台回覆音樂訊息和圖文消息,各類訊息XML規範也可以參考官方文件。

來看看官方提供的一個PHP範例,我做了一些精簡:

responseMsg();
class wechat {
 public function responseMsg() {
  //---------- 接 收 数 据 ---------- //
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据
  //用SimpleXML解析POST过来的XML数据
  $postObj = simplexml_load_string($postStr,&#39;SimpleXMLElement&#39;,LIBXML_NOCDATA);
  $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID)
  $toUsername = $postObj->ToUserName; //获取接收方账号
  $keyword = trim($postObj->Content); //获取消息内容
  $time = time(); //获取当前时间戳
  //---------- 返 回 数 据 ---------- //
  //返回消息模板
  $textTpl = "%s0";
  $msgType = "text"; //消息类型
  include(&#39;simsimi.php&#39;);
  $contentStr = simsimi($keyword); //返回消息内容
  //格式化消息模板
  $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
  echo $resultStr; //输出结果
 }
}
?>

把程式碼儲存為index.php並上傳至http://www.YoonPer.com/weixin /目錄,如果剛才沒刪除該文件,則直接覆蓋。

現在使用者透過微信公眾平台發送任何訊息公眾帳號都會傳回一則內容為「http://www.YoonPer.com」的訊息。
接下來要做的就是根據用戶訊息動態返回結果~

SimSimi(小黃雞)是目前比較火的聊天機器人,我用CURL開發了一個免費的SimSimi(小黃雞)接口,傳入關鍵字會返回文字回复,這部分不是本文重點,就不多說明,直接上代碼:

/*-------------------------------------------------
|   simsimi.php [ 智能聊天(simsimi) ]
+--------------------------------------------------
|   Author: LimYoonPer
+------------------------------------------------*/

function simsimi ($keyword)
{
  $keyword = urlencode($keyword);
  //----------- 获取COOKIE ----------//
  $url = "http://www.simsimi.com/";
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $content = curl_exec($ch);
  list($header, $body) = explode("\r\n\r\n", $content);
  preg_match_all("/set\-cookie:([^\r\n]*);/iU", $header, $matches);
  $cookie = implode(&#39;;&#39;, $matches[1]).";simsimi_uid=1;";
  curl_close($ch);
  //----------- 抓 取 回 复 ----------//
  $url = "http://www.simsimi.com/func/reqN?lc=ch&ft=0.0&req=$keyword&fl=http%3A%2F%2Fwww.simsimi.com%2Ftalk.htm";
  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_COOKIE, $cookie);
  $content = json_decode(curl_exec($ch), 1);
  curl_close($ch);
  if ( $content[&#39;result&#39;] == &#39;200&#39; ) {
    return $content[&#39;sentence_resp&#39;];
  } else {
    return &#39;我还不会回答这个问题...&#39;;
  }
}
?>

把上面兩段程式碼整合在一起就大功告成了,需要說明一點,微信伺服器在5秒內收不到回應會斷掉連接,透過此介面有可能會逾時,且SimSimi已經屏蔽了BAE和SAE上的抓取請求,推薦使用SimSimi官方收費API,速度比​​較快~

以上是php基礎教程之微信公眾平台開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn