So aktivieren Sie die Kundendienstfunktion des Miniprogramms
Das Aktivieren der Kundendienstfunktion des benutzerdefinierten Miniprogramms erfordert zwei Schritte:
Schritt eins: Aktivieren Sie die Nachrichten-Push-Funktion auf Ihrer eigenen WeChat-Plattform
Die Details finden Sie im offiziellen Wiki https://developers.weixin.qq .com/miniprogram/introduction/custom.html#%E5%A1%AB%E5%86%99%E6%B6%88%E6%81%AF%E6%8E%A8%E9%80%81%E9% 85%8D%E7 %BD%AE
Schritt 2: Vervollständigen Sie Ihr eigenes Backend
Voraussetzung: Ihr Server ist über WeChat erreichbar.
Prozess: Nachdem der Benutzer ein Ereignis initiiert hat, sendet er ein Datenpaket an den WeChat-Server (erster Schritt), der WeChat-Server verarbeitet und leitet die Daten weiter Das Format ist xml oder json, abhängig von Ihrer Wahl im WeChat-Backend. WeChat sendet das Datenpaket an Sie zurück, indem es Ihre Schnittstelle aktiv aufruft. Wenn Sie auf eine bestimmte Nachricht des Benutzers antworten möchten, benötigen Sie eine Schnittstelle zum Senden Ihrer Daten an den WeChat-Server. Das Antwortpaket enthält die OpenID des Kundendienstes.
<?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; } } }
Es gibt ein paar Fallstricke, auf die Sie achten müssen:
1 das Token Ihres Servers Ob es mit dem aktuellen Token übereinstimmt.
2. Wenn Sie feststellen, dass es absolut kein Problem mit Ihrem Code und dem Token gibt, Sie aber trotzdem eine Fehlermeldung erhalten, dann empfehle ich Ihnen, die Berechtigungen der Datei Ihres Servers zu überprüfen, falls vorhanden ist ein Problem. Überprüfen Sie, ob Ihre Laufzeit auf 777 eingestellt ist. Wenn Sie sie auf 755 einstellen, funktioniert es möglicherweise immer noch nicht.
Empfohlenes Lernen: Mini-Programmentwicklung
Das obige ist der detaillierte Inhalt vonSo aktivieren Sie die Kundendienstfunktion des Miniprogramms. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!