登录微信公众平台企业号后台,依次进入“服务中心”|“企业客服”,如图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参数进行回显。