怎樣開啟小程式客服功能

angryTom
發布: 2020-03-13 13:26:39
原創
3448 人瀏覽過

怎樣開啟小程式客服功能

怎麼開啟小程式客服功能   

#開啟自訂的小程式的客服功能,需要兩步,

#第一步:在自己的微信平台開通訊息推送的功能

具體的在官方wiki裡有https://developers.weixin.qq.com/miniprogram/ introduction/custom.html#填寫訊息推送設定

第二步:完成自己的後台

前提:你的伺服器可以被微信存取。

流程:用戶出發某個事件後,向微信伺服器發送資料包,如果你開啟訊息推送服務(第一步),那麼微信伺服器會進行資料的處理轉發,具體的格式是xml還是json取決於你在微信後台的選擇,我這裡選擇的json,微信通過主動調用你的接口將數據包返回給你,如果你想向用戶響應某個信息,需要某個接口向微信服務器發送你的回應資料包,裡麵包含客服的openid.具體的詳情看代碼。

<?php
header(&#39;Content-type:text&#39;);
define("TOKEN", "mytoken");

class Mini extends Controller{
    private $appid = &#39;&#39;;
    private $secret = &#39;&#39;;
    public function check(){     //校验服务器地址URL
        if (isset($_GET[&#39;echostr&#39;])) {
            $this->valid();
        }else{
            $this->responseMsg();
        }
    }
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            header(&#39;content-type:text&#39;);
            echo $echoStr;
            exit;
        }else{
            echo $echoStr.&#39;+++&#39;.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(&#39;php://input&#39;);//因为我的环境是php7
        if (!empty($postStr) && is_string($postStr)){
            $postArr = json_decode($postStr,true);
            if(!empty($postArr[&#39;MsgType&#39;]) && $postArr[&#39;MsgType&#39;] == &#39;text&#39;){   //文本消息
                $fromUsername = $postArr[&#39;FromUserName&#39;];   //发送者openid
                $toUserName = $postArr[&#39;ToUserName&#39;];       //小程序id
                $textTpl = array(
                    "ToUserName"=>$fromUsername,
                    "FromUserName"=>$toUserName,
                    "CreateTime"=>time(),
                    "MsgType"=>"transfer_customer_service",
                );
                exit(json_encode($textTpl));
            }elseif(!empty($postArr[&#39;MsgType&#39;]) && $postArr[&#39;MsgType&#39;] == &#39;image&#39;){ //图文消息
                $fromUsername = $postArr[&#39;FromUserName&#39;];   //发送者openid
                $toUserName = $postArr[&#39;ToUserName&#39;];       //小程序id
                $textTpl = array(
                    "ToUserName"=>$fromUsername,
                    "FromUserName"=>$toUserName,
                    "CreateTime"=>time(),
                    "MsgType"=>"transfer_customer_service",
                );
                exit(json_encode($textTpl));
            }elseif($postArr[&#39;MsgType&#39;] == &#39;event&#39; && $postArr[&#39;Event&#39;]==&#39;user_enter_tempsession&#39;){ 
                $fromUsername = $postArr[&#39;FromUserName&#39;];  

           $data = array(
                               "touser"=>$fromUsername,
                               "msgtype"=>"link",
                                "link"=>[
                                    "title"=>&#39;this is title&#39;,
                                    "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(&#39;aaa&#39;);
            }
        }else{
            echo "";
            exit;
        }
    }
  
    public function get_accessToken(){
        if(cache(&#39;access_token&#39;)){
            return cache(&#39;access_token&#39;);
        }
        /* 不在有效期,重新发送请求,获取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(&#39;access_token&#39;,$res[&#39;access_token&#39;],7100);
                return cache(&#39;access_token&#39;);
            }else{
                return &#39;api return error&#39;;
            }
        }
    }
    /**
     * @Author   callmelx
     * @DateTime 2018-10-06
     * @return   [type]     [description]
     */
    public function curl_post($url,$data=&#39;&#39;){
        $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 &#39;Errno&#39;.curl_error($curl);//捕抓异常
        }
        curl_close($curl);
        if($output == 0){
            echo &#39;success&#39;;exit;
        }
    }
}
登入後複製

有幾個坑要注意一下,如果你的token驗證總是失敗:

1.建議你看一下自己server伺服器的token 與現在的token是否相同。

2.如果你發現自己的程式碼絕對沒有問題,token也絕對沒有問題的話,而且還是報錯,那麼我建議檢查一下自己伺服器的檔案的權限問題了,如果你是tp框架,檢查一下啊自己的runtime是否給了777,如果你是給755的話可能還是不會起作用。

推薦學習:小程式開發

以上是怎樣開啟小程式客服功能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!