この記事の内容は、PHP WeChat の開発におけるテキスト自動返信に関するもので、必要な友人に参考にしていただけます
今日は、 WeChatの自動返信機能ですが、今回は独自のサーバー(外部からアクセス可能)を用意し、公式アカウント
でサーバー認証を行い、サーバー設定を有効にする必要があります。
ユーザーが公式アカウントにメッセージを送信すると、WeChat はこれらのメッセージを xml 形式で開発者サーバー上の対応する url に送信します。
xmlメッセージ
、開発者はそれを解析し、メッセージの内容に基づいて対応するコンテンツをユーザーに送り返すことができます。返信メッセージもxml形式で送信する必要があります。出かける。 ここで注意すべき点が 1 つあります。それは、WeChat が開発者サーバーにリクエストを送信するまでの待機時間が 5 秒以内に開発者サーバーが応答できない場合、 秒になるということです。 WeChat はリクエスト を再送信します (最大 3 回)。3 回送信しても 秒以内に返信できないか、返信の内容を WeChat が解析できず、「この公式は」と表示されます。アカウントは サービスを提供できません。」 秒以内に返信することが保証できない場合は、空の文字列で返信できます。その場合、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()方法成功返回主键值,可利用这点进行两表关联添加) 之前介绍过,我用的laneWeChat包,可以直接调用里边的方法,在wechatrequest.lib.php里的text方法中加入以下代码进行文本回复: 代码要一一写的话就有些多了,在此,只给小伙伴们分享以上代码,如果还有其他问题,欢迎留言提问哦~ 请大家多多关注,我会时刻更新的! 相关推荐: 以上がPHP WeChat開発テキスト自動返信の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[fromUser] ]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType>< ![CDATA[text] ]></MsgType> <Content>< ![CDATA[你好] ]></Content> </xml>
パラメータ は必須ですか? 説明 ToUserName は 受信者アカウント(受信したOpenID)です FromUse rName は 開発者の WeChat アカウント です CreateTime は メッセージ作成時間(整数)です MsgType は text Content は返信のメッセージコンテンツです(改行:コンテンツ内)回線変更機能、WeChat クライアントは行の折り返し表示をサポートしています) public function replyText(){
if(IS_GET){
$this->display('replytext');
}else{
$mp = $this->mp;
$mp_id = $mp['id'];
$data = I('post.');
$textret = M('reply_text')->add($data);
if($textret){
$data['reply_id'] = $textret;
$data['mp_id'] = $mp_id;
$data['type'] = 'text';
if ($mp['is_use'] == 1){
$data['status'] = 1;
}else{
$data['status'] = 0;
}
$ret = M('rule')->add($data);
if ($ret) {
$this->ajaxReturn(array('msg'=>'添加成功!'));
}else{
$this->ajaxReturn(array('msg'=>$ret));
}
}
}
}
//获取哪个公众号发过来的请求
$mp_id = $_GET['id'];
$content = $request['content'];
$where['mp_id'] = $mp_id;
$where['keyword'] = $content;
$data = M('rule')->where($where)->find();
if ($data) {
//发送消息中有这个关键字
$reply_id = $data['reply_id'];
$type = $data['type'];
if ($type == "text") {
$reply = M('reply_text')->find($reply_id);
$reply_text = $reply['content'];
return ResponsePassive::text($request['fromusername'], $request['tousername'], $reply_text);
}
}else{
return 'success';
}