微信公众号开发:接收通用消息与事件

接收消息

当普通微信用户向公众账号发送消息时,微信服务器将POST消息的XML数据包到开发者在微信公众号管理后台中配置的服务器地址URL上。
常见消息类型的推送XML数据包结构如下。

文本消息

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[文本消息内容]]></Content>
<MsgId>消息id,64位整型</MsgId>
</xml>

图片消息

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[图片链接(由系统生成)]]></PicUrl>
<MediaId><![CDATA[图片消息媒体id,可以调用多媒体文件下载接口拉取数据]]></MediaId>
<MsgId>消息id,64位整型</MsgId>
</xml>

语音消息

对于开通语音识别的公众号,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段(注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试)。
<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
<MediaId><![CDATA[图片消息媒体id,可以调用多媒体文件下载接口拉取数据]]></MediaId>
<Format><![CDATA[语音格式,如amr,speex等]]></Format>
<Recognition><![CDATA[开通语音识别才有,语音识别结果,UTF8编码]]></Recognition>
<MsgId>消息id,64位整型</MsgId>
</xml>

视频或小视频消息

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[vieo或shortvideo]]></MsgType>
<MediaId><![CDATA[图片消息媒体id,可以调用多媒体文件下载接口拉取数据]]></MediaId>
<ThumbMediaId><![CDATA[视频消息缩略图的媒体id,可调用多媒体文件下载接口拉取数据]]></ThumbMediaId>
<MsgId>消息id,64位整型</MsgId>
</xml>

地理位置消息

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Location_X>地理位置纬度</Location_X>
<Location_Y>地理位置经度</Location_Y>
<Scale>地图缩放大小</Scale>
<Label><![CDATA[地理位置信息]]></Label>
<MsgId>消息id,64位整型</MsgId>
</xml>

链接消息

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[消息标题]]></Title>
<Description><![CDATA[消息描述]]></Description>
<Url><![CDATA[消息链接]]></Url>
<MsgId>消息id,64位整型</MsgId>
</xml>
请注意:
1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。
3、如果开发者需要对用户消息在5秒内立即做出回应,即使用“发送消息-被动回复消息”接口向用户被动回复消息时,可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息和开发者回复的消息都会被加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。

接收事件

在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在微信公众号管理后台中配置的服务器地址URL上,从而开发者可以获取到该信息。其中,某些事件推送在发生后,是允许开发者回复用户的,某些则不允许。
常见事件的推送XML数据包结构如下。

关注或取消关注事件

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[location]]></MsgType>
<Event><![CDATA[subscribe或unsubscribe]]></Event>
</xml>

扫描带参数二维码事件

用户扫描带场景值二维码时,可能推送以下两种事件:
如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
1. 用户未关注时,进行关注后的事件推送
<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[事件KEY值,qrscene_为前缀,后面为二维码的参数值]]></EventKey>
<Ticket><![CDATA[二维码的ticket,可用来换取二维码图片]]></Ticket>
</xml>
2. 用户已关注时的事件推送
<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id]]></EventKey>
<Ticket><![CDATA[二维码的ticket,可用来换取二维码图片]]></Ticket>
</xml>

上报地理位置事件

<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[LOCATION]]></Event>
<Latitude>地理位置纬度</Latitude>
<Longitude>地理位置经度</Longitude>
<Precision>地理位置精度</Precision>
</xml>

自定义菜单事件

用户点击自定义菜单后,微信会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。
点击菜单拉取消息时的事件推送
<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[事件KEY值,与自定义菜单接口中KEY值对应]]></EventKey>
</xml>
点击菜单跳转链接时的事件推送
<xml>
<ToUserName><![CDATA[开发者微信号]]></ToUserName>
<FromUserName><![CDATA[发送方OpenID]]></FromUserName>
<CreateTime>消息创建时间(整型)</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[VIEW]]></Event>
<EventKey><![CDATA[事件KEY值,设置的跳转URL]]></EventKey>
</xml>



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值