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