### [怎样开启小程序客服功能](https://www.prosaas.cn/article/16942) **Published:** 2020-03-13T05:26:39 **Author:** 5201314 **Excerpt:** 怎样开启小程序客服功能 开启自定义的小程序的客服功能,需要两步,第一步:在自己的微信平台开通消息推送的功能具体… ![](https://img.php.cn/upload/article/000/000/040/5e6b1862b8164412.jpg) **怎样开启小程序客服功能**     开启自定义的小程序的客服功能,需要两步, **第一步:在自己的微信平台开通消息推送的功能** > 具体的在官方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.具体的详情看代码。 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的话可能还是不会起作用。 推荐学习:小程序开发 以上就是怎样开启小程序客服功能的详细内容,更多请关注知企PROSAAS其它相关文章! **Tags:** html, https, json, Token, xml, 事件, 接口 **Categories:** 后端开发 ---