您的位置:首页 > 移动开发 > 微信开发

QQ公众号如何正确接收消息并被动响应消息

2015-12-18 16:39 776 查看
大家好,我是QQ公众号【拇指特工】的技术总监小李,从今天起,我将持续发表关于QQ公众号的最新动态和进展。

拇指特工







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(取消订阅)
2.扫描带参数二维码事件
用户扫描带场景值二维码时,可能推送以下两种事件:
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,可用来换取二维码图片
b).用户已关注时的事件推送
推送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,可用来换取二维码图片
3.上报地理位置事件
用户同意上报地理位置后,每次进入公众号会话时,都会在进入时上报地理位置,或在进入会话后每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
地理位置精度
4.自定义菜单事件
用户点击自定义菜单后,生活服务号会把点击事件推送给开发者,请注意,点击菜单弹出子菜单,不会产生上报。
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值对应
5.点击事件按钮类型推送
在场景消息尾部支持增加按钮(最少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

点击图文消息跳转链接
3.回复图片消息

<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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息