首页 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 » 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践全文在线阅读

《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》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 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参数进行回显。