讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 20.8.1 設置客服類型 >

20.8.1 設置客服類型

登錄微信公眾平台企業號後台,依次進入「服務中心」|「企業客服」,如圖20-4所示。

圖20-4 企業客服

選擇「外部客戶服務」,點擊右側啟用鏈接進入配置頁面,如圖20-5所示。

圖20-5 設置客服列表和回調接口

在配置頁面中,選擇企業號通訊錄中的部門或成員作為客服列表,然後設置服務回調接口。

回調接口代碼如下。


 1 require_once("WXBizMsgCrypt.php");
 2 $encodingAesKey = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFG";
 3 $token = "FangBei";
 4 $corpId = "wx82e2c31215d9a5a7";
 5 
 6 class wechatCallbackapiTest extends WXBizMsgCrypt
 7 {
 8     // 驗證URL有效
 9     public function valid
10     {
11         $sVerifyMsgSig = $_GET["msg_signature"];
12         $sVerifyTimeStamp = $_GET["timestamp"];
13         $sVerifyNonce = $_GET["nonce"];
14         $sVerifyEchoStr = $_GET["echostr"];
15         $sEchoStr = "";
16         $errCode = $this->VerifyURL($sVerifyMsgSig, $sVerifyTimeStamp, $sVerifyNonce, 
           $sVerifyEchoStr, $sEchoStr);
17         if ($errCode == 0) {
18             // 驗證URL成功,將sEchoStr返回
19             echo $sEchoStr;
20         }
21     }
22 
23     // 響應消息
24     public function responseMsg
25     {
26         $sReqMsgSig = $_GET['msg_signature'];
27         $sReqTimeStamp = $_GET['timestamp'];
28         $sReqNonce = $_GET['nonce'];
29         $sReqData = $GLOBALS["HTTP_RAW_POST_DATA"];
30         $sMsg = "";  // 解析之後的明文
31         $this->logger(" DE \r\n".$sReqData);
32         $errCode = $this->DecryptMsg($sReqMsgSig, $sReqTimeStamp, $sReqNonce, $sReqData, 
           $sMsg);
33         $this->logger(" RR \r\n".$sMsg);
34         $postObj = simplexml_load_string($sMsg, 'SimpleXMLElement', LIBXML_NOCDATA);
35         // 客服模式
36         if (isset($postObj->AgentType)){
37             $sRespData = trim($postObj->PackageId);
38             $this->logger(" RT \r\n".$sRespData);
39             // 解析出OpenID,調用服務號客服接口發送消息
40             echo $sRespData;
41         }
42     }
43 
44     // 日誌記錄
45     public function logger($log_content)
46     {
47         if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ // LOCAL
48             $max_size = 500000;
49             $log_filename = "log.xml";
50             if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size))
       {unlink($log_filename);}
51             file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content.
       "\r\n", FILE_APPEND);
52         }
53     }
54 }
55 
56 $wechatObj = new wechatCallbackapiTest($token, $encodingAesKey, $corpId);
57 $wechatObj->logger(' http:// '.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].(empty
       ($_SERVER['QUERY_STRING'])?"":("?".$_SERVER['QUERY_STRING'])));
58 
59 if (!isset($_GET['echostr'])) {
60     $wechatObj->responseMsg;
61 }else{
62     $wechatObj->valid;
63 }
  

上述代碼解讀如下。

第9~21行:驗證URL有效的函數。先取GET參數,然後計算出錯誤碼。如果錯誤碼為0,則驗證URL成功。

第23~42行:響應消息的函數。先取GET參數以及POST數據,對取得的XML數據進行解密,然後判斷是否為客服模式,並提取其中的PackageId參數進行回顯。