Der Inhalt dieses Artikels handelt von der automatischen Textantwort in der PHP-WeChat-Entwicklung. Jetzt kann ich ihn mit Ihnen teilen
Heute möchte ich Ihnen die Entwicklung der automatischen Antwortfunktion von WeChat vorstellen. Diesmal müssen Sie Ihren eigenen Server vorbereiten (auf den über das externe Netzwerk zugegriffen werden kann) und ihn auf dem öffentlichen Konto ausführen
Serverauthentifizierung und Aktivierung der Serverkonfiguration.
Wenn Benutzer Nachrichten an das offizielle Konto senden, sendet WeChat diese Nachrichten im XML-Format URL entsprechend dem Server;
Entwickler erhält
Nach xml Nachricht , sie kann analysiert werden und dann wird der entsprechende Inhalt entsprechend dem Inhalt der Nachricht an den Benutzer zurückgesendet. Die Antwortnachricht muss ebenfalls mit xmlFormat wird gesendet .
<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中能够换行,微信客户端就支持换行显示) |
Hierbei ist zu beachten, dass die Wartezeit, bis WeChat eine Anfrage an den Entwicklerserver sendet, 5 Sekunden beträgt, wenn der Entwickler nicht innerhalb von Sekunden antworten kann 5 Sekunden,
WeChat sendet die Anfrage erneut(bis zu dreimal), nach drei Malen geht es immer noch nicht Antworten Sie innerhalb von 5 Sekunden oder der Inhalt der Antwort kann von WeChat nicht analysiert werden und es wird die Meldung „Dieses offizielle Konto ist nicht verfügbar“ angezeigt. Wenn keine Antwort innerhalb von
5Sekunden garantieren kann, können Sie mit einer leeren Zeichenfolge antworten und WeChat wird nichts mit der Nachricht unternehmen. Da die Arten von Nachrichten, die von WeChat an den Entwicklerserver gesendet werden, relativ unterschiedlich sind, einschließlich gewöhnlicher Nachrichten, Follow-Ereignisse, Unfollow-Ereignisse, Schaltflächenklick-Ereignisse usw. Daher müssen beim Entwurf der automatischen Antwortfunktion die Flexibilität, Skalierbarkeit und Wartbarkeit des Programms vollständig berücksichtigt werden.
Hier habe ich das „Chain of Responsibility Design Pattern“ verwendet, um eine Verarbeitungsschnittstelle zu definieren und jeden Nachrichtenhandler diese Schnittstelle implementieren zu lassen, wenn er eine Anfrage empfängt, die Anfrage sendenDie Anfrage wird an die erste Handlerklasse übergeben. Wenn die Anfrage in dieser Klasse verarbeitet werden kann, wird sie direkt zur Verarbeitung zurückgegeben
Ergebnis, andernfalls fließt es zur nächsten Handlerklasse, bis die Anfrage verarbeitet wird. Das Besondere an diesem Modus ist, dass er die einzelnen Schritte zur Bearbeitung von Anfragen aufschlüsselt und komplexe Urteile fällen kann
条件进行分解,同时每一个处理程序都只有一个单一的职责,对其进行修改不会影响到其他处理程序类。另外,将每一个请求类 以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方法中加入以下代码进行文本回复: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';
}
代码要一一写的话就有些多了,在此,只给小伙伴们分享以上代码,如果还有其他问题,欢迎留言提问哦~
请大家多多关注,我会时刻更新的!
相关推荐:
Stadtwetter mithilfe der PHP-WeChat-Entwicklung abrufen
Das obige ist der detaillierte Inhalt vonAutomatische Textantwort für die PHP-WeChat-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!