站长资讯网
最全最丰富的资讯网站

怎样开启小程序客服功能

怎样开启小程序客服功能

怎样开启小程序客服功能

开启自定义的小程序的客服功能,需要两步,

第一步:在自己的微信平台开通消息推送的功能

具体的在官方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

第二步:完成自己的后台

前提:你的服务器可以被微信访问。

流程:用户出发某个事件后,向微信服务器发送数据包,如果你开启消息推送服务(第一步),那么微信服务器会进行数据的处理转发,具体的格式是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;         }     } }

有几个坑需要注意一下,如果你的token验证总是失败:

1.建议你看一下自己server服务器的token与现在的token是否相同。

2.如果你发现自己的代码绝对没有问题,token也绝对没有问题的话,而且还是报错,那么我建议检查一下自己服务器的文件的权限问题了,如果你是tp框架,检查一下啊自己的runtime是否给了777,如果你是给755的话可能还是不会起作用。

推荐学习:小程序开发

赞(0)
分享到: 更多 (0)