微信公众号接收消息 事件消息处理
我们知道,微信用户和公众号交互产生的消息分为两种:一种是普通消息,在《微信公众号接收消息 普通消息处理》这篇文章中做了详细的介绍;另一种是事件消息。本篇我们就来看一下事件消息。
事件消息分为关注/取消关注、扫描带参数的二维码、上报地理位置、自定义菜单、点击菜单拉取消息、点击菜单跳转链接共六种事件。
同普通消息一样,虽然事件消息也有六种情况,但是这几种事件消息的xml数据格式也都有几个相同的字段:
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
</xml>
ToUserName 开发者微信号
FromUserName 发送方微信号
CreateTime 消息创建的时间
MsgType 消息类型 因为上面的六种情况都属于事件消息,所以这个字段的值是相同的都为event
Event 事件类型 这个字段是上面六种情况都有的,但是值是不同的。
对于上面六种情况,我们分别来看
关注/取消关注事件
用户在关注或者取消关注的时候,微信会把这个事件推送到开发者填写的URL。关注或取消关注的xml数据格式如下
<Event><![CDATA[subscribe]]></Event> //关注
//
<Event><![CDATA[unsubscribe]]></Event> //取消关注
扫描带参数二维码事件
用户扫描带场景的二维码的时候,推送的事件分为两种情况
第一 如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
第二 如果用户已经关注公众号,则微信会将带场景值的扫描事件推送给开发者。
以上两种情况都有相同的字段,只是字段的值是不同的。
1.用户未关注时,扫描关注的事件推送
<Event><![CDATA[subscribe]]></Event> //事件类型 subscribe
<EventKey><![CDATA[qrscene_123123]]></EventKey> //事件KEY值,qrscene_ 是前缀,后面为二维码的参数值
<Ticket><![CDATA[TICKET]]></Ticket> //二维码的ticket,可用来换取二维码图片
2.用户已关注时的事件推送
<Event><![CDATA[SCAN]]></Event> //事件类型 SCAN
<EventKey><![CDATA[SCENE_VALUE]]></EventKey> //事件KEY值 是一个32位无符号整数,即创建二维码时的二维码scene_id
<Ticket><![CDATA[TICKET]]></Ticket> //二维码的ticket,可用来换取二维码图片
上报地理位置事件
用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。上报地理位置时,微信会将上报地理位置事件推送到开发者填写的URL。
<Event><![CDATA[LOCATION]]></Event> //事件类型 LOCATION
<Latitude>23.137466</Latitude> //地理位置纬度
<Longitude>113.352425</Longitude> //地理位置经度
<Precision>119.385040</Precision> //地理位置精度
自定义菜单事件
用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。
点击菜单拉取消息时的事件推送
<Event><![CDATA[CLICK]]></Event> //事件类型 CLICK
<EventKey><![CDATA[EVENTKEY]]></EventKey> //事件KEY值,与自定义菜单接口中KEY值对应
点击菜单跳转链接时的事件推送
<Event><![CDATA[VIEW]]></Event> //事件类型 VIEW
<EventKey><![CDATA[www.onmpw.com]]></EventKey> //事件KEY值,要跳转的链接
各种消息的格式就是我们上面所展示的那些。
function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
file_put_contents("/tmp/wx.txt", $postStr); //将消息内容写入文件,便于我们自己观察
//extract post data
if (!empty($postStr)){
//这里写消息处理代码
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$msgType = $postObj->MsgType;
$event = $postObj->Event;
//根据不同的事件类型写不同的处理
}else {
echo "";
exit;
}
}
responseMsg() //调用该函数,相当于开启这个接口供微信服务器调用从而推送消息
事件消息的接收处理其实和普通消息是没有什么区别的,主要还是看我们的业务逻辑对接收到的消息都要如何进行处理。
相关文章
WeChat public account development tutorial interface configuration and identity a
发布时间:2025/03/16 浏览次数:133 分类:NETWORK
-
To become a developer of WeChat official account, you must first have a server that can be accessed externally. The development of WeChat official account does not limit the use of any language. Here we use PHP as the development language.
WeChat public account development tutorial to obtain access_token
发布时间:2025/03/16 浏览次数:75 分类:NETWORK
-
During the development of WeChat official accounts, if we want to actively push messages to the WeChat server, we must have access_token. Access_token is the only ticket for the official account. When we develop and call various WeChat inte
WeChat public account receives messages and processes ordinary messages
发布时间:2025/03/16 浏览次数:153 分类:NETWORK
-
There are two situations when WeChat users interact with public accounts: one is when WeChat users send ordinary messages to public accounts; the other is when some operations of WeChat users cause the WeChat server to notify the URL filled
WeChat public account receiving message event message processing
发布时间:2025/03/16 浏览次数:80 分类:NETWORK
-
As we know, there are two types of messages generated by the interaction between WeChat users and public accounts: one is ordinary messages, which are introduced in detail in the article "Ordinary message processing for WeChat public accoun
微信公众号接收消息 普通消息处理
发布时间:2016/10/14 浏览次数:2391 分类:网络
-
在微信用户和公众号产生交互的过程中会分为两种情况:一种是微信用户向公众号发送普通消息;另一种是微信用户的某些操作使得微信服务器通过事件推送的形式通知到开发者填写的
微信公众号开发教程获取access_token
发布时间:2016/10/12 浏览次数:4451 分类:网络
-
在微信公众号开发过程中,如果我们想要主动向微信服务器推送消息那么我们必须要有access_token。access_token 是公众号的唯一票据。这里我们介绍获取access_token的方法及使用案例。
微信公众号开发教程 接口配置与身份验证
发布时间:2016/10/11 浏览次数:2667 分类:网络
-
要想成为微信公众号的开发者,首先必须有可以对外访问的服务器。微信公众号的开发不限制使用什么语言,这里我们使用PHP作为开发语言。