Maison  >  Article  >  développement back-end  >  Réponse automatique au texte de développement PHP WeChat

Réponse automatique au texte de développement PHP WeChat

不言
不言original
2018-04-19 09:44:293152parcourir

Le contenu de cet article concerne la réponse automatique par texte dans le développement PHP WeChat. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

. Aujourd'hui, j'aimerais partager avec vous le développement de la fonction de réponse automatique de WeChat. Cette fois, vous devez préparer votre propre serveur (accessible depuis le réseau externe) et l'exécuter sur le compte public

Authentification du serveur et activation de la configuration du serveur.


Lorsque les utilisateurs envoient des messages au compte officiel, WeChat enverra ces messages à l'équipe de développement au format xml url correspondant au serveur

le développeur reçoit xml Une fois le message envoyé, il peut être analysé, puis le contenu correspondant est renvoyé à l'utilisateur en fonction du contenu du message. Le message de réponse doit également commencer par xml est envoyé

.

<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>
参数 是否必须 描述
ToUserName 接收方帐号(收到的OpenID)
FromUserName 开发者微信号
CreateTime 消息创建时间 (整型)
MsgType text
Content 回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

Une chose à noter ici est que le temps d'attente pour que WeChat envoie une demande au serveur du développeur est de 5 secondes si le développeur Le serveur ne peut pas répondre dans les délais. 5 secondes,

WeChat renverra la demande

(jusqu'à trois fois), après trois fois, je ne peux toujours pas répondez dans les 5 secondes, sinon le contenu de la réponse ne peut pas être analysé par WeChat, et il affichera "Ce compte officiel n'est pas disponible" Servir ". Si ne peut pas garantir une réponse dans les

5

secondes, vous pouvez répondre avec une chaîne vide et WeChat ne fera rien avec le message. Parce que les types de messages envoyés par WeChat au serveur du développeur sont relativement divers, y compris les messages ordinaires, les événements de suivi, les événements de désabonnement, les événements de clic sur un bouton, etc. Par conséquent, lors de la conception de la fonction de réponse automatique, la flexibilité, l'évolutivité et la maintenabilité du programme doivent être pleinement prises en compte.

Ici, j'ai utilisé le "modèle de conception de chaîne de responsabilité" pour définir une interface de traitement et laisser chaque gestionnaire de messages implémenter cette interface lors de la réception d'une requête, envoyer la requête

La requête est transmise à la première classe de gestionnaire. Chaque classe de requête contient une référence à la classe de gestionnaire suivante ; si la requête peut être traitée dans cette classe, elle sera renvoyée directement au traitement

résultat, sinon passe à la classe de gestionnaire suivante jusqu'à ce que la demande soit traitée. La particularité de ce mode est qu'il décompose les étapes de traitement des demandes et peut porter des jugements complexes

条件进行分解,同时每一个处理程序都只有一个单一的职责,对其进行修改不会影响到其他处理程序类。另外,将每一个请求类

xml文件的格式配置好,应用程序启动的时候,使用反射+IOC注入的方式实例化每一个处理程序类。

  首先创建一个页面,replyText.html


 我们创建两个数据表,

rule表 :用来存储回复数据,id自增长 , mp_id是当前正在使用的公众号,keyword是用户输入的关键字,type在此为text,reply_id与reply_text表建立连接,status为当前状态(是否正在使用)。



reply_text表 : reply_id作为主键,content为回复内容。

(在此注意一点,在页面输入对应值后,要把数据统一添加到两个数据表中,add()方法成功返回主键值,可利用这点进行两表关联添加)



public function replyText(){
        if(IS_GET){
            $this->display(&#39;replytext&#39;);
        }else{
            $mp = $this->mp;
            $mp_id = $mp[&#39;id&#39;];
            $data = I(&#39;post.&#39;);

            $textret = M(&#39;reply_text&#39;)->add($data);

            if($textret){
                $data[&#39;reply_id&#39;] = $textret;
                $data[&#39;mp_id&#39;] = $mp_id;
                $data[&#39;type&#39;] = &#39;text&#39;;
                if ($mp[&#39;is_use&#39;] == 1){
                    $data[&#39;status&#39;] = 1;
                }else{
                    $data[&#39;status&#39;] = 0;
                }
                $ret = M(&#39;rule&#39;)->add($data);
                if ($ret) {
                    $this->ajaxReturn(array(&#39;msg&#39;=>&#39;添加成功!&#39;));
                }else{
                    $this->ajaxReturn(array(&#39;msg&#39;=>$ret));
                }
            }
        }
    }


之前介绍过,我用的laneWeChat包,可以直接调用里边的方法,在wechatrequest.lib.php里的text方法中加入以下代码进行文本回复:

//获取哪个公众号发过来的请求
        $mp_id = $_GET[&#39;id&#39;];

        $content = $request[&#39;content&#39;];
        $where[&#39;mp_id&#39;] = $mp_id;
        $where[&#39;keyword&#39;] = $content;
        $data = M(&#39;rule&#39;)->where($where)->find();
        if ($data) {
            //发送消息中有这个关键字
            $reply_id = $data[&#39;reply_id&#39;];
            $type = $data[&#39;type&#39;];

            if ($type == "text") {
                $reply = M(&#39;reply_text&#39;)->find($reply_id);
                $reply_text = $reply[&#39;content&#39;];
                return ResponsePassive::text($request[&#39;fromusername&#39;], $request[&#39;tousername&#39;], $reply_text);
            }
            
        }else{
            return &#39;success&#39;;
        }

代码要一一写的话就有些多了,在此,只给小伙伴们分享以上代码,如果还有其他问题,欢迎留言提问哦~

请大家多多关注,我会时刻更新的!

相关推荐:

PHP微信开发之翻译功能

Obtenir la météo de la ville à l'aide du développement PHP WeChat

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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