開通小程序的客服功能
開啟自定義的小程序的客服功能,需要兩步,一步是在自己的微信平臺開通消息推送的功能。第二步是完成自己的後臺。
第一步:開啟推送功能:
具體的在官方wiki裏有,可以點這裏。
有幾個坑需要註意一下,如果你的token驗證總是失敗:
1.建議你看一下自己server服務器的token與現在的token是否相同。
2.如果你發現自己的代碼絕對沒有問題,token也絕對沒有問題的話,而且還是報錯,那麽我建議檢查一下自己服務器的文件的權限問題了,如果你是tp框架,檢查一下啊自己的runtime是否給了777,如果你是給755的話可能還是不會起作用。
第二步:完成自己後臺的服務器
前提:你的服務器可以被微信訪問,有的公司運維會做控制,所以在這裏不要浪費太多時間。
流程:用戶出發某個事件後,向微信服務器發送數據包,如果你開啟消息推送服務(第一步),那麽微信服務器會進行數據的處理轉發,具體的格式是xml還是json取決於你在微信後臺的選擇,我這裏選擇的json,微信通過主動調用你的接口將數據包返回給你,如果你想向用戶響應某個信息,需要某個接口向微信服務器發送你的響應數據包,裏面包含客服的openid.具體的詳情看代碼。
<?php header(‘Content-type:text‘); define("TOKEN", "mytoken"); class Mini extends Controller{ private $appid = ‘‘;private $secret = ‘‘; public function check(){ //校驗服務器地址URL if (isset($_GET[‘echostr‘])) { $this->valid(); }else{ $this->responseMsg(); } } public function valid() { $echoStr = $_GET["echostr"]; if($this->checkSignature()){header(‘content-type:text‘); echo $echoStr; exit; }else{ echo $echoStr.‘+++‘.TOKEN; exit; } } private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; } } public function responseMsg() { $postStr = file_get_contents(‘php://input‘);//因為我的環境是php7 if (!empty($postStr) && is_string($postStr)){ $postArr = json_decode($postStr,true); if(!empty($postArr[‘MsgType‘]) && $postArr[‘MsgType‘] == ‘text‘){ //文本消息 $fromUsername = $postArr[‘FromUserName‘]; //發送者openid $toUserName = $postArr[‘ToUserName‘]; //小程序id $textTpl = array( "ToUserName"=>$fromUsername, "FromUserName"=>$toUserName, "CreateTime"=>time(), "MsgType"=>"transfer_customer_service", ); exit(json_encode($textTpl)); }elseif(!empty($postArr[‘MsgType‘]) && $postArr[‘MsgType‘] == ‘image‘){ //圖文消息 $fromUsername = $postArr[‘FromUserName‘]; //發送者openid $toUserName = $postArr[‘ToUserName‘]; //小程序id $textTpl = array( "ToUserName"=>$fromUsername, "FromUserName"=>$toUserName, "CreateTime"=>time(), "MsgType"=>"transfer_customer_service", ); exit(json_encode($textTpl)); }elseif($postArr[‘MsgType‘] == ‘event‘ && $postArr[‘Event‘]==‘user_enter_tempsession‘){ $fromUsername = $postArr[‘FromUserName‘];
$data = array(
"touser"=>$fromUsername,
"msgtype"=>"link",
"link"=>[
"title"=>‘this is title‘,
"description"=> "Is Really A Happy Day",
"url":=>"URL",
"thumb_url"=>"THUMB_URL"
]
);
$json = json_encode($data,JSON_UNESCAPED_UNICODE); $access_token = $this->get_accessToken(); $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token; //將數據返給微信服務器進行轉發。 $this->curl_post($url,$json); }else{ exit(‘aaa‘); } }else{ echo ""; exit; } } public function get_accessToken(){ if(cache(‘access_token‘)){ return cache(‘access_token‘); } /* 不在有效期,重新發送請求,獲取access_token */ else{ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->secret}"; $result = curl_get_https($url); $res = json_decode($result,true); //json字符串轉數組 if($res){ cache(‘access_token‘,$res[‘access_token‘],7100); return cache(‘access_token‘); }else{ return ‘api return error‘; } } } /** * @Author callmelx * @DateTime 2018-10-06 * @return [type] [description] */ public function curl_post($url,$data=‘‘){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POSTFIELDS,$data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //curl_setopt($curl, CURLOPT_HTTPHEADER, $headers ); $output = curl_exec($curl); if (curl_errno($curl)) { echo ‘Errno‘.curl_error($curl);//捕抓異常 } curl_close($curl); if($output == 0){ echo ‘success‘;exit; } } }
參考的博客是 php急先鋒的博客。
開通小程序的客服功能