开通小程序的客服功能

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

小程序中添加客服按钮contact-button

分享为小程序添加自动回复消息的5种方法!自动客服功能的微信小程序

小程序实现实时聊天IM功能

家政服务小程序实战教程13-接入客服

家政服务小程序实战教程13-接入客服