Comment activer la fonction de service client du mini programme
L'activation de la fonction de service client du mini programme personnalisé nécessite deux étapes,
Première étape : activez la fonction de transmission de messages sur votre propre plateforme WeChat
Les détails sont dans le wiki officiel 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
Étape 2 : Complétez votre propre backend
Condition préalable : Votre serveur est accessible par WeChat.
Processus : une fois que l'utilisateur a lancé un événement, il envoie un paquet de données au serveur WeChat. Si vous activez le service de transmission de messages (la première étape), le serveur WeChat traitera et transmettra les données spécifiques. Le format est XML ou JSON dépend de votre choix dans le backend WeChat. Le json que j'ai choisi ici, WeChat vous renverra le paquet de données en appelant activement votre interface. Si vous souhaitez répondre à un certain message de l'utilisateur, vous avez besoin d'un. interface pour envoyer vos données au serveur WeChat. Le paquet de réponse contient l'openid du service client. Voir le code pour plus de détails.
<?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; } } }
Il y a quelques pièges auxquels vous devez faire attention. Si la vérification de votre jeton échoue toujours :
1. le token de votre serveur Qu'il soit le même que le token actuel.
2. Si vous constatez qu'il n'y a absolument aucun problème avec votre code et le token, mais que vous obtenez toujours une erreur, alors je vous suggère de vérifier les autorisations du fichier de votre serveur s'il y en a. est un problème. Vous utilisez le framework TP. Vérifiez si votre runtime est défini sur 777. Si vous le définissez sur 755, cela risque de ne pas fonctionner.
Apprentissage recommandé : Développement de mini-programmes
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!