>위챗 애플릿 >미니 프로그램 개발 >미니 프로그램 고객 서비스 기능 활성화 방법

미니 프로그램 고객 서비스 기능 활성화 방법

angryTom
angryTom원래의
2020-03-13 13:26:393501검색

미니 프로그램 고객 서비스 기능 활성화 방법

미니 프로그램의 고객 서비스 기능을 활성화하는 방법

맞춤형 미니 프로그램의 고객 서비스 기능을 열려면 두 단계가 필요합니다.

첫 번째 단계: 자신의 WeChat 플랫폼에서 메시지 푸시 기능을 활성화합니다.

자세한 내용은 공식 위키에서 확인할 수 있습니다: 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

2단계: 자체 백엔드 완성

전제 조건: 서버는 다음을 수행할 수 있습니다. WeChat으로 액세스할 수 있습니다.

프로세스: 사용자가 이벤트를 시작한 후 WeChat 서버에 데이터 패킷을 보냅니다. 메시지 푸시 서비스(첫 번째 단계)를 활성화하면 WeChat 서버가 데이터를 처리하고 전달합니다. 형식은 xml 또는입니다. 귀하에 따라 WeChat 백엔드 선택에서 json을 선택했습니다. WeChat은 사용자의 특정 메시지에 응답하려면 인터페이스를 통해 귀하에게 데이터 패킷을 반환합니다. WeChat 서버에 대한 응답 데이터 패킷에는 고객 서비스의 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;
        }
    }
}

토큰 확인이 항상 실패하는 경우 주의해야 할 몇 가지 함정이 있습니다.

1 서버의 token이 현재 토큰과 동일한지 확인하는 것이 좋습니다.

2. 코드에 전혀 문제가 없고 토큰에도 전혀 문제가 없는데도 여전히 오류가 발생하는 경우 서버의 파일 권한을 확인하는 것이 좋습니다. 문제가 있는 경우 TP 프레임워크를 사용하는 경우 런타임이 777로 설정되어 있는지 확인하세요. 755로 설정하면 여전히 작동하지 않을 수 있습니다.

추천 학습:

미니 프로그램 개발

위 내용은 미니 프로그램 고객 서비스 기능 활성화 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.