开通小程序的客服功能
Posted callmelx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开通小程序的客服功能相关的知识,希望对你有一定的参考价值。
开启自定义的小程序的客服功能,需要两步,一步是在自己的微信平台开通消息推送的功能。第二步是完成自己的后台。
第一步:开启推送功能:
具体的在官方wiki里有,可以点这里。
有几个坑需要注意一下,如果你的token验证总是失败:
1.建议你看一下自己server服务器的token与现在的token是否相同。
2.如果你发现自己的代码绝对没有问题,token也绝对没有问题的话,而且还是报错,那么我建议检查一下自己服务器的文件的权限问题了,如果你是tp框架,检查一下啊自己的runtime是否给了777,如果你是给755的话可能还是不会起作用。
第二步:完成自己后台的服务器
前提:你的服务器可以被微信访问,有的公司运维会做控制,所以在这里不要浪费太多时间。
流程:用户出发某个事件后,向微信服务器发送数据包,如果你开启消息推送服务(第一步),那么微信服务器会进行数据的处理转发,具体的格式是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; } } }
参考的博客是 php急先锋的博客。
以上是关于开通小程序的客服功能的主要内容,如果未能解决你的问题,请参考以下文章
无需后端开发,教你轻松实现小程序「客服功能」| 小程序问答 #40