ホームページ  >  記事  >  バックエンド開発  >  PHP WeChat開発テキスト自動返信

PHP WeChat開発テキスト自動返信

不言
不言オリジナル
2018-04-19 09:44:293195ブラウズ

この記事の内容は、PHP WeChat の開発におけるテキスト自動返信に関するもので、必要な友人に参考にしていただけます

今日は、 WeChatの自動返信機能ですが、今回は独自のサーバー(外部からアクセス可能)を用意し、公式アカウント

でサーバー認証を行い、サーバー設定を有効にする必要があります。


ユーザーが公式アカウントにメッセージを送信すると、WeChat はこれらのメッセージを xml 形式で開発者サーバー上の対応する url に送信します。

xml

メッセージ

、開発者はそれを解析し、メッセージの内容に基づいて対応するコンテンツをユーザーに送り返すことができます。返信メッセージも

xml形式で送信する必要があります。出かける。

<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>
です

ここで注意すべき点が 1 つあります。それは、WeChat が開発者サーバーにリクエストを送信するまでの待機時間が 5 秒以内に開発者サーバーが応答できない場合、 秒になるということです。 WeChat はリクエスト を再送信します (最大 3 回)。3 回送信しても

5

秒以内に返信できないか、返信の内容を WeChat が解析できず、「この公式は」と表示されます。アカウントは サービスを提供できません。」

5

秒以内に返信することが保証できない場合は、空の文字列で返信できます。その場合、WeChat はこのメッセージに対していかなる処理も行いません。 WeChat から開発者サーバーに送信されるメッセージの種類は、通常のメッセージ、フォロー イベント、フォロー解除イベント、ボタン クリック イベントなど、比較的多様であるためです。したがって、自動応答機能を設計する際には、プログラムの柔軟性、拡張性、保守性を十分に考慮する必要があります。

ここでは、「責任の連鎖設計パターン」を使用して処理インターフェイスを定義し、各メッセージ ハンドラーにこのインターフェイスを実装させます。リクエストを受信すると、リクエスト

を最初の 1 つのハンドラー クラスに渡します。クラスには次のハンドラー クラスへの参照が含まれています。このクラスでリクエストを処理できる場合は、処理結果が直接返されます。それ以外の場合は、リクエストの処理が完了するまで次のハンドラー クラスに処理結果が流れます。このモードの特徴は、リクエストの処理を段階的に分解し、複雑な判断ができることです

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

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微信开发之翻译功能

都市の天気を取得するための PHP WeChat 開発

パラメータ は必須ですか? 説明
ToUserName 受信者アカウント(受信したOpenID)です
FromUse rName 開発者の WeChat アカウント
CreateTime メッセージ作成時間(整数)です
MsgType text
Content は返信のメッセージコンテンツです(改行:コンテンツ内)回線変更機能、WeChat クライアントは行の折り返し表示をサポートしています)

以上がPHP WeChat開発テキスト自動返信の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。