登錄微信公眾平台企業號後台,依次進入「服務中心」|「企業客服」,如圖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參數進行回顯。