名著阅读 > 微信公众平台开发:从零基础到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参数进行回显。