ミニ プログラムのカスタマー サービス機能を有効にする方法
カスタマイズされたミニ プログラムのカスタマー サービス機能を有効にするには、次の 2 つの手順を実行します。必須、
ステップ 1: 独自の WeChat プラットフォームでメッセージ プッシュ機能を有効にする
詳細は公式 Wiki https://developers.weixin にあります。 .qq.com/miniprogram/introduction/custom.html#メッセージ プッシュ構成を入力します
ステップ 2: 独自のバックエンドを完成させます
前提条件:サーバーにはWeChatからアクセスできます。
プロセス: ユーザーがイベントを開始した後、データ パケットを WeChat サーバーに送信します。メッセージ プッシュ サービスを有効にすると (最初のステップ)、WeChat サーバーはデータを処理して転送します。形式は xml または json で、WeChat バックエンドでの選択によって異なります。ここで選択した json は、WeChat がインターフェイスをアクティブに呼び出してデータ パケットを返します。ユーザーからの特定のメッセージに応答したい場合は、データを WeChat サーバーに送信するためのインターフェイスです。応答パケットには、顧客サービスの 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; } } }
注意する必要がある落とし穴がいくつかあります。トークンの検証が常に失敗する場合:
1. サーバーのトークン 現在のトークンと同じかどうか。
2.コードに全く問題がなく、トークンにも全く問題がないにもかかわらずエラーが発生する場合は、サーバーの ## の権限を確認することをお勧めします。 # file . TP フレームワークを使用している場合は、ランタイムが 777 に設定されているかどうかを確認してください。755 に設定すると、動作しない可能性があります。
推奨学習:以上がミニプログラムカスタマーサービス機能を有効にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。