有了微信公众号开发(一)之准备工作,下面我们来讲讲消息事件的监听和自动回复
举个例子,当A用户关注公众号后,我们希望给用户自动发送一条“欢迎您,基友!”怎么实现呢?
这里就需要我们在验证接口中加入判断程序了,也就是微信开发文章一中写的那个接口(http://www.xxx.com/event/index)。
首先注意:微信第一次请求上面的接口时,会带一个echostr的参数过来,我们就可以认为这是验证微信公众平台中的设置。
以后的每次事件通知,微信方都不会再带这个参数了(除非再次修改配置的时候)。
关键代码:
public function index() {
// 第一次请求(后台配置这个接口的时候)会传echostr
// 以后的每一次都不会再传
if (!empty($_GET ['echostr'])
&& !empty($_GET ["signature"])
&& !empty($_GET ["nonce"])) {
$this->valid();
} else {
// 监听消息事件
$this->listenEvent();
}
}这就算配置验证和监听事件的判断
下面我们再来加上关注事件的监听
/**
* 监听消息事件,回复消息事件
*/
private function listenEvent() {
// 微信发送过来的数据,XML格式
//$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postStr = file_get_contents("php://input");
$disableLibxmlEntityLoader = libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
if ('event' == strtolower($postObj->MsgType)) {
if ('subscribe' == strtolower($postObj->Event)) {
}
}
libxml_disable_entity_loader($disableLibxmlEntityLoader);
}微信方发过来的是XML格式的数据,我们需要用file_get_contents("php://input")来接收,
注意为了兼容性不要使用$GLOBALS["HTTP_RAW_POST_DATA"],有些服务器为了安全会把全局注册的配置关掉的。
发送过来的消息格式如下,参考https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454
<xml> <ToUserName>< ![CDATA[toUser] ]></ToUserName> <FromUserName>< ![CDATA[FromUser] ]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType>< ![CDATA[event] ]></MsgType> <Event>< ![CDATA[subscribe] ]></Event> </xml>
我们就根据MsgType和Event来区别具体的事件
进入判断后,自动回复,直接输出XML。参考https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140543
if ('event' == strtolower($postObj->MsgType)) {
if ('subscribe' == strtolower($postObj->Event)) {
$template = '<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>';
echo sprintf($template, $postObj->FromUserName, $postObj->ToUserName, time(), '欢迎您,基友!');
}
}DEMO代码下载

fffffasdfasdfasdfasdfas;kdfjlaskl;dfjaskl;dfjakls;dfjkal;sfdjlaks;df als;dfj awkls;dfj asl;dfj aslk;dfjaskl;dfjas;ldf
访客评论