消息推送服务

跳转到: 导航, 搜索
第1行: 第1行:
 
==消息推送服务概述==
 
==消息推送服务概述==
当一个和V用户相关的消息或者事件发生时(如某个用户向V用户发送消息),微博服务器将POST消息数据包到开发者填写的URL上;
+
当一个和认证用户相关的消息或者事件发生时(如某个用户向认证用户发送消息),微博服务器将POST消息数据包到开发者填写的URL上;
 +
 
  
 
在开发者首次使用事件推送服务时,需要先通过一次校验来和微博服务器建立首次连接;微博服务器发送GET请求到开发者填写的URL上,校验参数如下表所示:
 
在开发者首次使用事件推送服务时,需要先通过一次校验来和微博服务器建立首次连接;微博服务器发送GET请求到开发者填写的URL上,校验参数如下表所示:
第13行: 第14行:
 
{{rdes_args|echostr|string|随机字符串}}
 
{{rdes_args|echostr|string|随机字符串}}
 
|}
 
|}
 +
  
 
signature参数的加密规则为:将appsecret参数,timestamp参数,nonce参数进行字典排序后,将三个参数字符串拼接成一个字符串进行sha1加密;开发者收到请求后,首先通过加密后的signature参数来校验GET请求的真实性,如果确认此次GET请求来自微博服务器,原样返回echostr参数内容就可以成功建立首次连接,否则连接失败。
 
signature参数的加密规则为:将appsecret参数,timestamp参数,nonce参数进行字典排序后,将三个参数字符串拼接成一个字符串进行sha1加密;开发者收到请求后,首先通过加密后的signature参数来校验GET请求的真实性,如果确认此次GET请求来自微博服务器,原样返回echostr参数内容就可以成功建立首次连接,否则连接失败。
 +
  
 
建立首次连接后,后续每次微博事件推送时也都会带上signature、timestamp、nonce三个参数,开发者依然可以通过对signature的校验判断此条消息的真实性。校验方式与首次建立连接一致。
 
建立首次连接后,后续每次微博事件推送时也都会带上signature、timestamp、nonce三个参数,开发者依然可以通过对signature的校验判断此条消息的真实性。校验方式与首次建立连接一致。
  
==接受普通消息==
+
==接受消息推送==
 +
 
 +
建立首次连接后,当认证用户有新消息时,微博消息推送服务会POST消息数据包到开发者填写的URL上,当前支持的消息类型:
 +
 
 +
(<font style="color:red">注意:</font>需要对接收到的消息体type或subtype做兼容,当出现未知类型时可忽略此消息。)
 +
 
 +
<h3>1、事件消息:event</h3>
 +
<pre>
 +
{
 +
    "type": "event",
 +
    "receiver_id": 1902538057,
 +
    "sender_id": 2489518277,
 +
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "text": "事件消息",
 +
    "data": {
 +
        "subtype": "EVENT",
 +
        "key": "EVENT_KEY",
 +
        "ticket": "TICKET",
 +
    }
 +
}
 +
</pre>
 +
<div class="wiki_kit">
 +
 
 +
{|width="100%" border="0" cellspacing="0" cellpadding="0" class="wiki_table"
 +
<html><colgroup><col class="tbF1"/><col class="tbF2" /><col /></colgroup></html>
 +
!colspan="3" scope="col" |<span id="返回值说明">返回值说明</span>
 +
|-
 +
|style="text-align:center; width: 12%"|属性
 +
|style="text-align:center;width: 12%"|值的类型
 +
|style="text-align:center;"|说明描述
 +
|-
 +
|type
 +
|string
 +
|event
 +
|-
 +
|receiver_id
 +
|int64
 +
|消息的接收者
 +
|-
 +
|sender_id
 +
|int64
 +
|消息的发送者
 +
|-
 +
|created_at
 +
|string
 +
|消息创建时间
 +
|-
 +
|text
 +
|string
 +
|默认文案。subtype为follow或unfollow时分别为“关注事件消息”、“取消关注事件消息”;为subscribe或unsubscribe时为触发订阅的私信关键词(如“dy”),非私信触发时(点击订阅按钮)为“订阅事件消息”、“取消订阅事件消息”。
 +
|-
 +
|data
 +
|string
 +
|消息内容
 +
|-
 +
|data:subtype
 +
|string
 +
|follow:关注事件,unfollow取消关注事件,subscribe订阅事件,unsubscribe订阅事件。scan和scan_follow为二维码扫描事件。
 +
|-
 +
|data:key
 +
|string
 +
|subtype为follow、unfollow、subscribe或unsubscribe时不返回
 +
|-
 +
|data:ticket
 +
|string
 +
|subtype为scan和scan_follow时才返回
 +
|}
 +
 
 +
 
 +
<h3>2、纯文本类型私信和留言消息:text</h3>
 +
<pre>
 +
{
 +
    "id": 1211260020031346,
 +
    "type": "text",
 +
    "receiver_id": 1902538057,
 +
    "sender_id": 2489518277,
 +
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "text": "私信或留言内容",
 +
    "data": {}
 +
}
 +
</pre>
 +
<div class="wiki_kit">
 +
{|width="100%" border="0" cellspacing="0" cellpadding="0" class="wiki_table"
 +
<html><colgroup><col class="tbF1"/><col class="tbF2" /><col /></colgroup></html>
 +
!colspan="3" scope="col" |<span id="返回值说明">返回值说明</span>
 +
|-
 +
|style="text-align:center; width: 12%"|属性
 +
|style="text-align:center;width: 12%"|值的类型
 +
|style="text-align:center;"|说明描述
 +
|-
 +
|id
 +
|string
 +
|消息ID
 +
|-
 +
|type
 +
|string
 +
|text
 +
|-
 +
|receiver_id
 +
|int64
 +
|消息的接收者
 +
|-
 +
|sender_id
 +
|int64
 +
|消息的发送者
 +
|-
 +
|created_at
 +
|string
 +
|消息创建时间
 +
|-
 +
|text
 +
|string
 +
|私信内容
 +
|-
 +
|data
 +
|string
 +
|消息内容,纯文本私信或留言为空
 +
|}
 +
 
 +
 
 +
<h3>3、位置类型私信消息:position</h3>
 +
<pre>
 +
{
 +
    "id": 1211260020031347,
 +
    "type": "position",
 +
    "receiver_id": 1902538057,
 +
    "sender_id": 2489518277,
 +
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "text": "我在这里: http://t.cn/zQgLLYO",
 +
    "data": {
 +
        "longitude": "116.308586",
 +
        "latitude": "39.982525"
 +
      }
 +
}
 +
</pre>
 +
<div class="wiki_kit">
 +
{|width="100%" border="0" cellspacing="0" cellpadding="0" class="wiki_table"
 +
<html><colgroup><col class="tbF1"/><col class="tbF2" /><col /></colgroup></html>
 +
!colspan="3" scope="col" |<span id="返回值说明">返回值说明</span>
 +
|-
 +
|style="text-align:center; width: 12%"|属性
 +
|style="text-align:center;width: 12%"|值的类型
 +
|style="text-align:center;"|说明描述
 +
|-
 +
|id
 +
|string
 +
|消息ID
 +
|-
 +
|type
 +
|string
 +
|mention
 +
|-
 +
|receiver_id
 +
|int64
 +
|消息的接收者
 +
|-
 +
|sender_id
 +
|int64
 +
|消息的发送者
 +
|-
 +
|created_at
 +
|string
 +
|消息创建时间
 +
|-
 +
|text
 +
|string
 +
|原位置私信文本,没有时用默认文案“发送了一个位置”
 +
|-
 +
|data
 +
|string
 +
|消息内容
 +
|-
 +
|data:longitude
 +
|string
 +
|经度
 +
|-
 +
|data:latitude
 +
|string
 +
|纬度
 +
|}
 +
 
 +
 
 +
<h3>4、语音类型私信和留言消息:voice</h3>
 +
<pre>
 +
{
 +
    "id": 1211260020031347,
 +
    "type": "voice",
 +
    "receiver_id": 1902538057,
 +
    "sender_id": 2489518277,
 +
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "text": "发了一个语音消息",
 +
    "data": {
 +
        "vfid": 821804459,    // 发送者用此ID查看语音
 +
        "tovfid": 821804469  // 接收者用此ID查看语音
 +
    }
 +
}
 +
</pre>
 +
<div class="wiki_kit">
 +
{|width="100%" border="0" cellspacing="0" cellpadding="0" class="wiki_table"
 +
<html><colgroup><col class="tbF1"/><col class="tbF2" /><col /></colgroup></html>
 +
!colspan="3" scope="col" |<span id="返回值说明">返回值说明</span>
 +
|-
 +
|style="text-align:center; width: 12%"|属性
 +
|style="text-align:center;width: 12%"|值的类型
 +
|style="text-align:center;"|说明描述
 +
|-
 +
|id
 +
|string
 +
|消息ID
 +
|-
 +
|type
 +
|string
 +
|voice
 +
|-
 +
|receiver_id
 +
|int64
 +
|消息的接收者
 +
|-
 +
|sender_id
 +
|int64
 +
|消息的发送者
 +
|-
 +
|created_at
 +
|string
 +
|消息创建时间
 +
|-
 +
|text
 +
|string
 +
|私信内容
 +
|-
 +
|data
 +
|string
 +
|消息内容,纯文本私信或留言为空
 +
|-
 +
|data:vfid
 +
|string
 +
|语音文件ID,发送者通过此ID读取语音
 +
|-
 +
|data:tovfid
 +
|string
 +
|语音文件ID,接收者通过此ID读取语音
 +
|}
 +
<pre>
 +
查看(下载)认证用户接收到的语音方法一
 +
curl "https://upload.api.weibo.com/2/mss/msget?access_token=RECIPIENT_ACCESS_TOKEN&fid=TOVFID"
 +
 
 +
1,"RECIPIENT_ACCESS_TOKEN":返回结果中接收者(recipient_id)通过OAuth2授权返回的access_token;
 +
2,"TOVFID":返回结果data字段中的tovfid。
 +
 
 +
查看(下载)认证用户接收到的语音方法二
 +
curl -u "USERNAME:PASSWORD" "https://upload.api.weibo.com/2/mss/msget?source=APPKEY&fid=TOVFID"
 +
 
 +
1,"USERNAME:PASSWORD"为"recipient_id"(认证用户)的微博登录用户名和密码,此时方法二中的APPKEY应用所有者为"recipient_id";
 +
2,"TOVFID":返回结果data字段中的tovfid。
 +
</pre>
 +
 
 +
 
 +
<h3>5、图片类型私信和留言消息:image</h3>
 +
<pre>
 +
{
 +
    "id": 1211260020031347,
 +
    "type": "image",
 +
    "receiver_id": 1902538057,
 +
    "sender_id": 2489518277,
 +
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "text": "发了一张图片",
 +
    "data": {
 +
        "vfid": 821804459,    // 发送者用此ID查看图片
 +
        "tovfid": 821804469    // 接收者用此ID查看图片
 +
    }
 +
}
 +
</pre>
 +
<div class="wiki_kit">
 +
{|width="100%" border="0" cellspacing="0" cellpadding="0" class="wiki_table"
 +
<html><colgroup><col class="tbF1"/><col class="tbF2" /><col /></colgroup></html>
 +
!colspan="3" scope="col" |<span id="返回值说明">返回值说明</span>
 +
|-
 +
|style="text-align:center; width: 12%"|属性
 +
|style="text-align:center;width: 12%"|值的类型
 +
|style="text-align:center;"|说明描述
 +
|-
 +
|id
 +
|string
 +
|消息ID
 +
|-
 +
|type
 +
|string
 +
|image
 +
|-
 +
|receiver_id
 +
|int64
 +
|消息的接收者
 +
|-
 +
|sender_id
 +
|int64
 +
|消息的发送者
 +
|-
 +
|created_at
 +
|string
 +
|消息创建时间
 +
|-
 +
|text
 +
|string
 +
|私信内容
 +
|-
 +
|data
 +
|string
 +
|消息内容,纯文本私信或留言为空
 +
|-
 +
|data:vfid
 +
|string
 +
|图片ID,发送者通过此ID读取图片
 +
|-
 +
|data:tovfid
 +
|string
 +
|图片ID,接收者通过此ID读取图片
 +
|}
 +
<pre>
 +
查看(下载)图片
 +
curl "https://upload.api.weibo.com/2/mss/msget?access_token=RECIPIENT_ACCESS_TOKEN&fid=TOVFID"
 +
 
 +
1,"RECIPIENT_ACCESS_TOKEN":返回结果中接收者(receiver_id)通过OAuth2授权返回的access_token;
 +
2,"TOVFID":返回结果data字段中的tovfid。
 +
</pre>
 +
 
 +
 
 +
 
 +
<h3>6、被@消息:mention</h3>
 +
说明:指定的认证用户需被授予接收“被@消息”权限,此接口才返回“被@消息”,申请可邮件 [mailto:open_api@sina.com open_api@sina.com] 。
 +
<pre>
 +
{
 +
    "id": 1211260020031346,
 +
    "type": "mention",
 +
    "receiver_id": 1902538057,
 +
    "sender_id": 2489518277,
 +
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
 +
    "text": "被@的微博或评论文本信息",
 +
    "data": {
 +
        "subtype": "MENTION_TYPE,
 +
        "key": "MENTION_KEY"
 +
    }
 +
}
 +
 
 +
// 默认仅返回可信用户的@,如需返回所有用户@,认证用户可访问此链接设置:http://account.weibo.com/set/message
 +
</pre>
 +
<div class="wiki_kit">
 +
{|width="100%" border="0" cellspacing="0" cellpadding="0" class="wiki_table"
 +
<html><colgroup><col class="tbF1"/><col class="tbF2" /><col /></colgroup></html>
 +
!colspan="3" scope="col" |<span id="返回值说明">返回值说明</span>
 +
|-
 +
|style="text-align:center; width: 12%"|属性
 +
|style="text-align:center;width: 12%"|值的类型
 +
|style="text-align:center;"|说明描述
 +
|-
 +
|id
 +
|string
 +
|消息ID
 +
|-
 +
|type
 +
|string
 +
|mention
 +
|-
 +
|receiver_id
 +
|int64
 +
|消息的接收者
 +
|-
 +
|sender_id
 +
|int64
 +
|消息的发送者
 +
|-
 +
|created_at
 +
|string
 +
|消息创建时间
 +
|-
 +
|text
 +
|string
 +
|被@的微博或评论文本信息
 +
|-
 +
|data
 +
|string
 +
|消息内容
 +
|-
 +
|data:subtype
 +
|string
 +
|status:@的微博,comment:@的评论
 +
|-
 +
|data:key
 +
|string
 +
|当subtype为status时为微博ID,为comment时为评论ID
 +
|}
 +
 
  
(1)个人版
+
<h3>值得你期待的更多消息类型:菜单点击、微博被转发、被评论、被赞、话题、支付...</h3>
  
(2)企业版
 
  
  
==接受事件推送==
+
==发送被动响应==
 
应用的创建及发布包括以下流程。
 
应用的创建及发布包括以下流程。
 
注:开发者在平台创建应用时可选择应用适用终端,开发时对相应地址进行适配即可在各终端iframe中展示。
 
注:开发者在平台创建应用时可选择应用适用终端,开发时对相应地址进行适配即可在各终端iframe中展示。

2014年3月30日 (日) 07:56的版本

目录

消息推送服务概述

当一个和认证用户相关的消息或者事件发生时(如某个用户向认证用户发送消息),微博服务器将POST消息数据包到开发者填写的URL上;


在开发者首次使用事件推送服务时,需要先通过一次校验来和微博服务器建立首次连接;微博服务器发送GET请求到开发者填写的URL上,校验参数如下表所示:

校验参数字段 字段类型 字段说明
signature string 微博加密签名,signature结合了开发者appsecret参数和请求中的timestamp参数,nonce参数
timestamp string 时间戳
nonce string 随机数
echostr string 随机字符串


signature参数的加密规则为:将appsecret参数,timestamp参数,nonce参数进行字典排序后,将三个参数字符串拼接成一个字符串进行sha1加密;开发者收到请求后,首先通过加密后的signature参数来校验GET请求的真实性,如果确认此次GET请求来自微博服务器,原样返回echostr参数内容就可以成功建立首次连接,否则连接失败。


建立首次连接后,后续每次微博事件推送时也都会带上signature、timestamp、nonce三个参数,开发者依然可以通过对signature的校验判断此条消息的真实性。校验方式与首次建立连接一致。

接受消息推送

建立首次连接后,当认证用户有新消息时,微博消息推送服务会POST消息数据包到开发者填写的URL上,当前支持的消息类型:

注意:需要对接收到的消息体type或subtype做兼容,当出现未知类型时可忽略此消息。)

1、事件消息:event

{
    "type": "event",
    "receiver_id": 1902538057,
    "sender_id": 2489518277,
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
    "text": "事件消息",
    "data": {
        "subtype": "EVENT",
        "key": "EVENT_KEY",
        "ticket": "TICKET",
    }
}
返回值说明
属性 值的类型 说明描述
type string event
receiver_id int64 消息的接收者
sender_id int64 消息的发送者
created_at string 消息创建时间
text string 默认文案。subtype为follow或unfollow时分别为“关注事件消息”、“取消关注事件消息”;为subscribe或unsubscribe时为触发订阅的私信关键词(如“dy”),非私信触发时(点击订阅按钮)为“订阅事件消息”、“取消订阅事件消息”。
data string 消息内容
data:subtype string follow:关注事件,unfollow取消关注事件,subscribe订阅事件,unsubscribe订阅事件。scan和scan_follow为二维码扫描事件。
data:key string subtype为follow、unfollow、subscribe或unsubscribe时不返回
data:ticket string subtype为scan和scan_follow时才返回


2、纯文本类型私信和留言消息:text

{
    "id": 1211260020031346,
    "type": "text",
    "receiver_id": 1902538057,
    "sender_id": 2489518277,
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
    "text": "私信或留言内容",
    "data": {}
}
返回值说明
属性 值的类型 说明描述
id string 消息ID
type string text
receiver_id int64 消息的接收者
sender_id int64 消息的发送者
created_at string 消息创建时间
text string 私信内容
data string 消息内容,纯文本私信或留言为空


3、位置类型私信消息:position

{
    "id": 1211260020031347,
    "type": "position",
    "receiver_id": 1902538057,
    "sender_id": 2489518277,
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
    "text": "我在这里: http://t.cn/zQgLLYO",
    "data": {
        "longitude": "116.308586",
        "latitude": "39.982525"
      }
}
返回值说明
属性 值的类型 说明描述
id string 消息ID
type string mention
receiver_id int64 消息的接收者
sender_id int64 消息的发送者
created_at string 消息创建时间
text string 原位置私信文本,没有时用默认文案“发送了一个位置”
data string 消息内容
data:longitude string 经度
data:latitude string 纬度


4、语音类型私信和留言消息:voice

{
    "id": 1211260020031347,
    "type": "voice",
    "receiver_id": 1902538057,
    "sender_id": 2489518277,
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
    "text": "发了一个语音消息",
    "data": {
        "vfid": 821804459,    // 发送者用此ID查看语音
        "tovfid": 821804469  // 接收者用此ID查看语音
    }
}
返回值说明
属性 值的类型 说明描述
id string 消息ID
type string voice
receiver_id int64 消息的接收者
sender_id int64 消息的发送者
created_at string 消息创建时间
text string 私信内容
data string 消息内容,纯文本私信或留言为空
data:vfid string 语音文件ID,发送者通过此ID读取语音
data:tovfid string 语音文件ID,接收者通过此ID读取语音
查看(下载)认证用户接收到的语音方法一
curl "https://upload.api.weibo.com/2/mss/msget?access_token=RECIPIENT_ACCESS_TOKEN&fid=TOVFID"

1,"RECIPIENT_ACCESS_TOKEN":返回结果中接收者(recipient_id)通过OAuth2授权返回的access_token;
2,"TOVFID":返回结果data字段中的tovfid。

查看(下载)认证用户接收到的语音方法二
curl -u "USERNAME:PASSWORD" "https://upload.api.weibo.com/2/mss/msget?source=APPKEY&fid=TOVFID"

1,"USERNAME:PASSWORD"为"recipient_id"(认证用户)的微博登录用户名和密码,此时方法二中的APPKEY应用所有者为"recipient_id";
2,"TOVFID":返回结果data字段中的tovfid。


5、图片类型私信和留言消息:image

{
    "id": 1211260020031347,
    "type": "image",
    "receiver_id": 1902538057,
    "sender_id": 2489518277,
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
    "text": "发了一张图片",
    "data": {
        "vfid": 821804459,     // 发送者用此ID查看图片
        "tovfid": 821804469    // 接收者用此ID查看图片
    }
}
返回值说明
属性 值的类型 说明描述
id string 消息ID
type string image
receiver_id int64 消息的接收者
sender_id int64 消息的发送者
created_at string 消息创建时间
text string 私信内容
data string 消息内容,纯文本私信或留言为空
data:vfid string 图片ID,发送者通过此ID读取图片
data:tovfid string 图片ID,接收者通过此ID读取图片
查看(下载)图片
curl "https://upload.api.weibo.com/2/mss/msget?access_token=RECIPIENT_ACCESS_TOKEN&fid=TOVFID"

1,"RECIPIENT_ACCESS_TOKEN":返回结果中接收者(receiver_id)通过OAuth2授权返回的access_token;
2,"TOVFID":返回结果data字段中的tovfid。


6、被@消息:mention

说明:指定的认证用户需被授予接收“被@消息”权限,此接口才返回“被@消息”,申请可邮件 open_api@sina.com

{
    "id": 1211260020031346,
    "type": "mention",
    "receiver_id": 1902538057,
    "sender_id": 2489518277,
    "created_at": "Mon Jul 16 18:09:20 +0800 2012",
    "text": "被@的微博或评论文本信息",
    "data": {
        "subtype": "MENTION_TYPE,
        "key": "MENTION_KEY"
    }
}

// 默认仅返回可信用户的@,如需返回所有用户@,认证用户可访问此链接设置:http://account.weibo.com/set/message
返回值说明
属性 值的类型 说明描述
id string 消息ID
type string mention
receiver_id int64 消息的接收者
sender_id int64 消息的发送者
created_at string 消息创建时间
text string 被@的微博或评论文本信息
data string 消息内容
data:subtype string status:@的微博,comment:@的评论
data:key string 当subtype为status时为微博ID,为comment时为评论ID


值得你期待的更多消息类型:菜单点击、微博被转发、被评论、被赞、话题、支付...


发送被动响应

应用的创建及发布包括以下流程。 注:开发者在平台创建应用时可选择应用适用终端,开发时对相应地址进行适配即可在各终端iframe中展示。


(1) 成为开发者

填写开发者信息,成为开发者:http://open.weibo.com/developers/basicinfo

通过审核成为开发者后,即可开发Page应用。


XML格式兼容模式

主要是BD合作引入,步骤为:

(1) 商务沟通

    • - 双方沟通产品结合点
    • - 确立合作意向


(2) 产品沟通

    • - 确认结合点在产品、技术层面可实现
    • - 确认产品表现方式


(3) 应用开发

    • - 快速完成线上申请
    • - 根据文档和规范进行开发


(4) 应用上线及推广

    • - 应用审核通过上线
    • - 确认双方推广资源及推广方式