Maison > Applet WeChat > Développement WeChat > Développement de la plateforme publique WeChat Service à la clientèle multiple

Développement de la plateforme publique WeChat Service à la clientèle multiple

高洛峰
Libérer: 2017-02-24 17:05:30
original
1643 Les gens l'ont consulté

Dans ce didacticiel de développement de plateforme publique WeChat, nous présenterons comment utiliser le modèle de développement pour mettre en œuvre un système de service multi-clients.

Cet article est divisé en trois parties suivantes :

Répondre à plusieurs messages du service client

Déclencher plusieurs sessions du service client

Autres instructions

1. Répondre à plusieurs messages du service client

Dans le nouveau protocole WeChat, le mode développement peut également être connecté au système de service client. Si le développeur doit autoriser les utilisateurs à utiliser le système de service client, il doit renvoyer un message avec MsgType de transfer_customer_service lors de la réception du message envoyé par l'utilisateur. Lorsque le serveur WeChat reçoit ce message, il transférera le message envoyé par l'utilisateur. cette fois et dans un certain laps de temps dans le futur. Le message envoyé est transmis au système de service client.

Un exemple de message renvoyé est le suivant

<xml>
    <ToUserName><![CDATA[touser]]></ToUserName>
    <FromUserName><![CDATA[fromuser]]></FromUserName>
    <CreateTime>1399197672</CreateTime>
    <MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>
Copier après la connexion

La mise en œuvre de ce message est la suivante

//回复多客服消息
    private function transmitService($object)
    {
        $xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>";
        $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }
Copier après la connexion

Déclenchement de plusieurs sessions de service client<🎜. >

Généralement, lorsque les utilisateurs souhaitent poser des questions, ils posent souvent des questions telles que « Bonjour » et « Êtes-vous là ?

Nous utilisons ces mots comme mots-clés déclencheurs. Lorsque le contenu du message texte envoyé par l'utilisateur contient ces mots, plusieurs messages du service client seront renvoyés à l'utilisateur (l'utilisateur ne peut ressentir aucun contenu sur WeChat, mais le public WeChat Le compte transmettra tous les messages de l'utilisateur cette fois et à l'avenir au service client).

Le code d'implémentation est le suivant :

//接收文本消息
    private function receiveText($object)
    {
        $keyword = trim($object->Content);
        if (strstr($keyword, "投诉") || strstr($keyword, "你好") || strstr($keyword, "在吗")){
            $result = $this->transmitService($object);
        }

        return $result;
    }
Copier après la connexion
3. Code complet

responseMsg();
}else{
    $wechatObj->valid();
}

class wechatCallbackapiTest
{
    //验证消息
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            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 = $GLOBALS["HTTP_RAW_POST_DATA"];
        if (!empty($postStr)){
            $this->logger("R ".$postStr);
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "event":
                    $result = $this->receiveEvent($postObj);
                    break;
                case "text":
                    $result = $this->receiveText($postObj);
                    break;
            }
            $this->logger("T ".$result);
            echo $result;
        }else {
            echo "";
            exit;
        }
    }

    //接收事件消息
    private function receiveEvent($object)
    {
        switch ($object->Event)
        {
            case "subscribe":
                $content[] = array("Title" =>"欢迎关注方倍工作室", "Description" =>"使用方法:\n1.发送快递单号,例如6367532560,可查询快递详情", "PicUrl" =>"http://www.3856.cc/weixin/weixin/logo.jpg", "Url" =>"");
                break;
            default:
                $content = "receive a new event: ".$object->Event;
                break;
        }
        
        if(is_array($content)){
            if (isset($content[0])){
                $result = $this->transmitNews($object, $content);
            }else if (isset($content['MusicUrl'])){
                $result = $this->transmitMusic($object, $content);
            }
        }else{
            $result = $this->transmitText($object, $content);
        }
        return $result;
    }

    //接收文本消息
    private function receiveText($object)
    {
        $keyword = trim($object->Content);
        if($keyword == "时间" || $keyword == "测试"){
            $content = date("Y-m-d H:i:s",time());
            $result = $this->transmitText($object, $content);
        }
        //触发多客服模式
        else if (strstr($keyword, "您好") || strstr($keyword, "你好") || strstr($keyword, "在吗") || strstr($keyword, "有人吗")){
            $result = $this->transmitService($object);
            return $result;
        }
        return $result;
    }

    private function transmitText($object, $content)
    {
        $textTpl = "


%s


";
        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $result;
    }

    private function transmitNews($object, $newsArray)
    {
        if(!is_array($newsArray)){
            return;
        }
        $itemTpl = "    
        <![CDATA[%s]]>
        
        
        
    
";
        $item_str = "";
        foreach ($newsArray as $item){
            $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
        }
        $newsTpl = "


%s


%s

$item_str
";

        $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
        return $result;
    }

    private function transmitMusic($object, $musicArray)
    {
        $itemTpl = "
    <![CDATA[%s]]>
    
    
    
";

        $item_str = sprintf($itemTpl, $musicArray['Title'], $musicArray['Description'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);

        $textTpl = "


%s

$item_str
";

        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }
    
    //回复多客服消息
    private function transmitService($object)
    {
        $xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>";
        $result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
        return $result;
    }
    
    private function logger($log_content)
    {
        if(isset($_SERVER['HTTP_APPNAME'])){   //SAE
            sae_set_display_errors(false);
            sae_debug($log_content);
            sae_set_display_errors(true);
        }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
            $max_size = 10000;
            $log_filename = "log.xml";
            if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
            file_put_contents($log_filename, date('H:i:s')." ".$log_content."\r\n", FILE_APPEND);
        }
    }
}
?>
Copier après la connexion
Autres notes

1. Plusieurs messages du service client sont renvoyés dans le menu de définition et l'utilisateur ne peut pas entrer dans l'état de service multi-client.

2. Après avoir utilisé plusieurs messages du service client, tous les messages suivants seront transférés en tant que messages du service client pendant un certain temps et les réponses automatiques dans le mode de développement d'origine seront invalides ! ! !

Pour plus d'articles sur le développement de la plateforme publique WeChat et le service multi-clients, veuillez prêter attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal