QQ公众号如何正确接收消息并被动响应消息
2015-12-18 16:39
776 查看
大家好,我是QQ公众号【拇指特工】的技术总监小李,从今天起,我将持续发表关于QQ公众号的最新动态和进展。
【拇指特工】
今天我们来谈谈QQ公众号如何正确接收消息并被动响应消息?
首先是接收普通消息,
接口描述
关于重试的消息排重,推荐使用msgid排重。
假如用户服务器无法保证在五秒内处理并回复,可以直接回复空串或success,生活服务号服务器不会对此作任何处理,并且不会发起重试。
1.接收文本消息
推送XML数据包示例:
参数说明:
2.接收地理位置消息
推送XML数据包示例:
参数说明:
其次是接收事件推送,
接口描述
当普通手Q用户向公众账号发消息时,生活服务号服务器将POST消息的XML数据包到开发者填写的URL上。各消息类型的推送XML数据包结构如下:
注意:生活服务号服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,关于重试的消息排重,推荐使用msgid排重,假如用户服务器无法保证在五秒内处理并回复,可以直接回复空串或”success”字串,生活服务号服务器不会对此作任何处理,并且不会发起重试。
接口使用说明
1.关注/取消关注事件
用户在关注与取消关注公众号时,生活服务号把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。
推送XML数据包示例:
参数说明:
2.扫描带参数二维码事件
用户扫描带场景值二维码时,可能推送以下两种事件:
a).如果用户还未关注公众号,则用户可以关注公众号,关注后生活服务号会将带场景值关注事件推送给开发者。
b).如果用户已经关注公众号,则生活服务号会将带场景值扫描事件推送给开发者。
a).用户未关注时,进行关注后的事件推送
推送XML数据包示例:
参数说明:
b).用户已关注时的事件推送
推送XML数据包示例:
参数说明:
3.上报地理位置事件
用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。上报地理位置时,生活服务号会将上报地理位置事件推送到开发者填写的URL。
推送XML数据包示例:
参数说明:
4.自定义菜单事件
用户点击自定义菜单后,生活服务号会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。
a).点击菜单拉取消息时的事件推送
推送XML数据包示例:
参数说明:
5.点击事件按钮类型推送
在场景消息尾部支持增加按钮(最少0个,最多3个)。点击按钮可实现点击(CLICK事件),并将此事件(含openid msgid等信息)上报至调用方(开发者),开发者可通过回包给点击用户下发消息。
推送XML数据包示例:
参数说明:
最后是被动回复消息,
接口描述
对于每一个POST请求,开发者在响应包中返回特定XML结构,对该消息进行响应(现支持回复文本、图文)。
生活服务号服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。
发送被动响应消息其实并不是一种接口,而是对生活服务号服务器发过来消息的一次回复,假如服务器无法保证在五秒内处理并回复,必须做下述回复,生活服务号服务器不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复):
1、直接回复空串(指字节长度为0的空字符串,而不是XML结构体中content字段的内容为空)
2、直接回复success
请开发者注意,一旦遇到以下情况,生活服务号都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:
1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据,比如JSON数据等
接口使用说明
1.回复文本消息
2.回复图文消息
3.回复图片消息
【拇指特工】
QQ公众平台聚合着无限可能。凭借16年来积累的8亿用户资源,依托强势平台技术、数据沉淀和社交关系, QQ公众平台将有效聚集品牌和消费者,以开放合作的姿态与你一起打造未来。
今天我们来谈谈QQ公众号如何正确接收消息并被动响应消息?
首先是接收普通消息,
当普通手Q用户向生活服务号号发消息时,生活服务号服务器将POST消息的XML数据包到开发者填写的URL上。各消息类型的推送XML数据包结构如下: 注意:生活服务号服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。
接口描述
关于重试的消息排重,推荐使用msgid排重。
假如用户服务器无法保证在五秒内处理并回复,可以直接回复空串或success,生活服务号服务器不会对此作任何处理,并且不会发起重试。
1.接收文本消息
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[this is atest]]></Content> <MsgId>1234567890123456</MsgId> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间(整型) |
MsgType | text |
Content | 文本消息内容 |
MsgId | 消息id,64位整形 |
2.接收地理位置消息
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1351776360</CreateTime> <MsgType><![CDATA[location]]></MsgType> <Location_X>23.134521</Location_X> <Location_Y>113.358803</Location_Y> <Scale>20</Scale> <Label><![CDATA[位置信息]]></Label> <MsgId>1234567890123456</MsgId> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | location |
Location_X | 地理位置维度 |
Location_Y | 地理位置经度 |
Scale | 地图缩放大小 |
Label | 地理位置信息 |
MsgId | 消息id,64位整型 |
接口描述
当普通手Q用户向公众账号发消息时,生活服务号服务器将POST消息的XML数据包到开发者填写的URL上。各消息类型的推送XML数据包结构如下:
注意:生活服务号服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,关于重试的消息排重,推荐使用msgid排重,假如用户服务器无法保证在五秒内处理并回复,可以直接回复空串或”success”字串,生活服务号服务器不会对此作任何处理,并且不会发起重试。
接口使用说明
1.关注/取消关注事件
用户在关注与取消关注公众号时,生活服务号把这个事件推送到开发者填写的URL。方便开发者给用户下发欢迎消息或者做帐号的解绑。
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型:subscribe(订阅)、unsubscribe(取消订阅) |
用户扫描带场景值二维码时,可能推送以下两种事件:
a).如果用户还未关注公众号,则用户可以关注公众号,关注后生活服务号会将带场景值关注事件推送给开发者。
b).如果用户已经关注公众号,则生活服务号会将带场景值扫描事件推送给开发者。
a).用户未关注时,进行关注后的事件推送
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[qrscene_123123]]></EventKey> <Ticket><![CDATA[TICKET]]></Ticket> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,subscribe |
EventKey | 事件KEY值,qrscene_为前缀,后面为二维码的参数值 |
Ticket | 二维码的ticket,可用来换取二维码图片 |
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[SCAN]]></Event> <EventKey><![CDATA[SCENE_VALUE]]></EventKey> <Ticket><![CDATA[TICKET]]></Ticket> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,SCAN |
EventKey | 事件KEY值,是一个32位无符号整数,即创建二维码时的二维码scene_id |
Ticket | 二维码的ticket,可用来换取二维码图片 |
用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每5秒上报一次地理位置,公众号可以在公众平台网站中修改以上设置。上报地理位置时,生活服务号会将上报地理位置事件推送到开发者填写的URL。
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[LOCATION]]></Event> <Latitude>23.137466</Latitude> <Longitude>113.352425</Longitude> <Precision>119.385040</Precision> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,LOCATION |
Latitude | 地理位置纬度 |
Longitude | 地理位置经度 |
Precision | 地理位置精度 |
用户点击自定义菜单后,生活服务号会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。
a).点击菜单拉取消息时的事件推送
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[CLICK]]></Event> <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,CLICK |
EventKey | 事件KEY值,与自定义菜单接口中KEY值对应 |
在场景消息尾部支持增加按钮(最少0个,最多3个)。点击按钮可实现点击(CLICK事件),并将此事件(含openid msgid等信息)上报至调用方(开发者),开发者可通过回包给点击用户下发消息。
推送XML数据包示例:
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[FromUser]]></FromUserName> <CreateTime>123456789</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[CLICK]]></Event> <EventKey><![CDATA[EVENTKEY]]></EventKey> </xml>
参数说明:
参数 | 描述 |
ToUserName | 开发者生活服务号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间(整型) |
MsgType | 消息类型,event |
Event | 事件类型,CLICK |
EventKey | 事件KEY值,与buton参数中的KEY值对应 |
接口描述
对于每一个POST请求,开发者在响应包中返回特定XML结构,对该消息进行响应(现支持回复文本、图文)。
生活服务号服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次,如果在调试中,发现用户无法收到响应的消息,可以检查是否消息处理超时。
关于重试的消息排重,有msgid的消息推荐使用msgid排重。事件类型消息推荐使用FromUserName + CreateTime 排重。
发送被动响应消息其实并不是一种接口,而是对生活服务号服务器发过来消息的一次回复,假如服务器无法保证在五秒内处理并回复,必须做下述回复,生活服务号服务器不会对此作任何处理,并且不会发起重试(这种情况下,可以使用客服消息接口进行异步回复):
1、直接回复空串(指字节长度为0的空字符串,而不是XML结构体中content字段的内容为空)
2、直接回复success
请开发者注意,一旦遇到以下情况,生活服务号都会在公众号会话中,向用户下发系统提示“该公众号暂时无法提供服务,请稍后再试”:
1、开发者在5秒内未回复任何内容
2、开发者回复了异常数据,比如JSON数据等
接口使用说明
1.回复文本消息
<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 | 是 | 回复的消息内容 |
2.回复图文消息
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[news]]></MsgType> <ArticleCount>2</ArticleCount> <Articles> <item> <Title><![CDATA[title1]]></Title> <Description><![CDATA[description1]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> <item> <Title><![CDATA[title]]></Title> <Description><![CDATA[description]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item> </Articles> </xml>
参数 | 是否必须 | 描述 |
ToUserName | 是 | 接收方帐号(收到的OpenID) |
FromUserName | 是 | 开发者生活服务号 |
CreateTime | 是 | 消息创建时间 (整型) |
MsgType | 是 | news |
ArticleCount | 是 | 图文消息个数,限制为10条以内 |
Articles | 是 | 多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应 |
Title | 否 | 图文消息标题 |
Description | 否 | 图文消息描述 |
PicUrl | 否 | 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 |
Url | 否 | 点击图文消息跳转链接 |
<xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[image]]></MsgType> <Image> <MediaId><![CDATA[media_id]]></MediaId> </Image> </xml>
参数 | 是否必须 | 描述 |
ToUserName | 是 | 接收方帐号(收到的OpenID) |
FromUserName | 是 | 开发者账号 |
CreateTime | 是 | 消息创建时间 (整型) |
MsgType | 是 | image |
MediaId | 是 | 通过上传多媒体文件,得到的id。 |
相关文章推荐
- 如何做到日消息量100万的微信公众号?
- 开发人员、程序员与计算机科学家三者之间的区别
- C#开发微信公众号接口开发
- .NET微信公众号开发之公众号消息处理
- Web 设计与开发者必须知道的 15 个站点
- 微信公众号支付(一)如何获取用户openId
- 图文介绍报表与企业微信公众号集成方案
- 开发人员一定要加入收藏夹的网站 推荐
- .NET微信公众号开发之准备工作
- C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享
- .NET微信公众号开发之创建自定义菜单
- 对Web开发人员有用的8个网站小结
- 使用Nodejs开发微信公众号后台服务实例
- .NET微信公众号开发之查询自定义菜单
- Android开发者必备的十个工具介绍
- php实现微信公众号无限群发
- 分享一下Python 开发者节省时间的10个方法
- 微信第三方开发 errcode : 40094解决方案