腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台。 php
广大开发者和用户登陆平台后,就能够使用平台提供的开放API接口,建立应用从微博系统获取信息,或将新的信息传播到整个微博系统中,丰富多样的API接口和应用,加上您的智慧,将创造出无穷的应用和乐趣。 git
腾讯微博API采用OAuth协议为第三方提供接入服务,遵循[RFC-5849]规范。有关OAuth认证的详细说明,请阅读官方OAuth规范。各类语言的OAuth 客户端能够在Google-OAuth项目里找到。 程序员
腾讯微博API使用OAuth 1.0a版本。 web
OAuth官网地址:http://www.oauth.net/ 算法
OAuth协议为用户资源的受权提供了一个安全的、开放而又简易的标准。同时,任何第三方均可以使用OAuth认证服务,任何服务提供商均可以实现 自身的OAuth认证服务,于是OAuth是开放的。业界提供了OAuth的多种实现如PHP,JavaScript,Java,Ruby等各类语言开发 包,大大节约了程序员的时间,于是OAuth是简易的。目前互联网不少服务如Open API,不少大头公司如Google,Yahoo,Microsoft等都提供了OAuth认证服务,这些都足以说明OAuth标准逐渐成为开放资源受权 的标准。 json
在官方网站的首页,能够看到下面这段简介: api
An open protocol to allow secure API authorization in a simple and standard method from desktop and web applications.
大概意思是说OAuth是一种开放的协议,为桌面程序或者基于BS的web应用提供了一种简单的,标准的方式去访问须要用户受权的API服务。OAuth相似于Flickr Auth、Google's AuthSub[1]、Yahoo's BBAuth、 Facebook Auth等。 浏览器
OAuth认证受权具备如下特色: 安全
腾讯微博API经过如下四个步骤来完成认证受权并访问或修改受限资源的流程 app
其中1~3步使用https或http方式, 第4步使用http方式。
用户修改密码或进行非法行为会致使受权失效,此时须要从新进行受权
全部TOKEN请求和受保护的资源请求必须被签名,微博开放平台会根据签名来判断请求的合法性。签名算法使用Signature Base String和密钥(Secret)生成签名,参数oauth_signature用于指定签名。
说明:
Signature Base String由如下三部分组成,各项之间使用&符号分隔。
一、Http Method
请求方法,GET/POST
二、URL Encode以后的请求URL(URL要小写)
例如:
请求URL:
https://open.t.qq.com/cgi-bin/request_token
经URL Encode以后的请求URL为:
https%3A%2F%2Fopen.t.qq.com%2Fcgi-bin%2Frequest_token
三、URL Encode并排序以后的请求参数
例如: URL请求参数为:
oauth_callback=www.qq.com&oauth_consumer_key=49b0bes7352943a1a5609f9e30346201&oauth_nonce=90523669&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1298513816&oauth_version=1.0
经URL Encode并排序以后的请求参数格式以下(参数间使用%26(即&符号)分隔):
oauth_callback%3Dwww.qq.com%26oauth_consumer_key%5D49b0bes7352943a1a5609f9e30346201%26oauth_nonce%3D90523669%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1298513816%26oauth_version%3D1.0
算法伪码:
httpMethod + "&" + url_encode( base_uri ) + "&" + sorted_query_params.each { | k, v | url_encode ( k ) + "%3D" + url_encode ( v ) }.join("%26")
密钥由App Secret和Token Secret组成(中间使用&符号分隔)
签名算法目前只支持HMAC-SHA1。
经过访问如下 URL 获取未受权的 Request Token
http://open.t.qq.com/cgi-bin/request_token
参数 | 意义 |
---|---|
oauth_consumer_key | App Key(应用信息中的App Key值) |
oauth_signature_method | 签名方法,暂只支持HMAC-SHA1 |
oauth_signature | 签名值,密钥为:App Secret。计算说明。 |
oauth_timestamp | 时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数 |
oauth_nonce | 单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不一样) |
oauth_callback | 认证成功后浏览器会被重定向到这个url中 |
oauth_version | 版本号,1.0 |
参数 | 意义 |
---|---|
oauth_token | 未受权的Request Token |
oauth_token_secret | 对应的Request Token Secret |
oauth_callback_confirmed | 对oauth_callback的确认信号 |
说明:
request_token
http://open.t.qq.com/cgi-bin/request_token?oauth_callback=null&oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls&oauth_signature=exxzU/tTbpdicmYHcyYh5kqgYgo=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569145&oauth_version=1.0
参数名 | 参数值 |
---|---|
oauth_consumer_key | aca77d2eb96f46e1b3353bc6743e8bfc |
oauth_signature_method | HMAC-SHA1 |
oauth_signature | exxzU/tTbpdicmYHcyYh5kqgYgo= |
oauth_timestamp | 1299569145 |
oauth_nonce | yQDMuXvdcEfQs2Mzf3XcT1r36WTULJls |
oauth_callback | null |
oauth_version | 1.0 |
oauth_token=hdk48Djdsa&oauth_token_secret=xyz4992k83j47x0b&oauth_callback_confirmed=true
参数名 | 参数值 |
---|---|
oauth_token | hdk48Djdsa |
oauth_token_secret | xyz4992k83j47x0b |
oauth_callback_confirmed | true |
此步骤的目的是请求用户受权Request Token,请求URL:
http://open.t.qq.com/cgi-bin/authorize
请求参数:
参数 | 意义 |
---|---|
oauth_token | 上一步中得到的未受权的Request Token |
wap (可选参数) |
主要用于指定手机受权页的版本 wap=1时,跳转到wap1.0的受权页 wap=2时,跳转到wap2.0的受权页 不带本参数时,手机访问默认跳到wap2.0的受权页 |
返回参数:
参数 | 意义 |
---|---|
oauth_token | 用户受权以后的Token值,与未受权Token值相同。 |
oauth_verifier | 验证码 |
openid | 能够惟一标识一个用户(wap=1或wap=2时不返回该参数) |
openkey | 与openid对应的用户key,是验证openid身份的验证密钥(wap=1或wap=2时不返回该参数) |
说明:
# web应用会重定向到oauth_callback所指定的URL(含返回参数)。 # 客户端应用(oauth_callback=null)会在网页中给出受权码,用户须要手工将验证码输入到应用中才能完成受权流程。
示例:
参数 | 意义 |
---|---|
oauth_token | hdk48Djdsa |
oauth_verifier | 473f82d3 |
openid | 2D4263AB08EE337C3F3F26106BF881DA |
openkey | 543403C5AA99BDCB6F87DFBB14240E04 |
oauth_token=hdk48Djdsa&oauth_verifier=473f82d3
用户完成受权后,第三方应用能够经过访问以下url,将已受权的Request Token换取Access Token。Access Token将被用于访问或修改受限资源。
http://open.t.qq.com/cgi-bin/access_token
请求参数:
参数 | 意义 |
---|---|
oauth_consumer_key | AppKey |
oauth_token | 第一步中得到的Request Token |
oauth_signature_method | 签名方法,暂只支持HMAC-SHA1 |
oauth_signature | 签名值,密钥为:App Secret&Request Token Secret。计算说明。 |
oauth_timestamp | 时间戳, 其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数 |
oauth_nonce | 单次值,随机生成的32位字符串,防止重放攻击(每次请求必须不一样) |
oauth_verifier | 上一步请求受权request token时返回的验证码 |
oauth_version | 1.0 |
返回参数:
参数 | 意义 |
---|---|
oauth_token | Access Token |
oauth_token_secrete | Access Token Secret |
说明:
用于签名的Signature Base String格式以下:
示例:access_token:
http://open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=aca77d2eb96f46e1b3353bc6743e8bfc&oauth_nonce=y2FrX7Muouma5vxWTKngEb7uHkRu4P5u&oauth_signature=209vcEaHkmb/QwHqsRU3HRPvlqw=&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1299569210&oauth_token=6b99583b7bc8446bb57e86128158994f&oauth_verifier=877973&oauth_version=1.0
参数 | 意义 |
---|---|
oauth_consumer_key | aca77d2eb96f46e1b3353bc6743e8bfc |
oauth_token | 6b99583b7bc8446bb57e86128158994f |
oauth_signature_method | HMAC-SHA1 |
oauth_signature | 209vcEaHkmb/QwHqsRU3HRPvlqw= |
oauth_timestamp | 1299569210 |
oauth_nonce | y2FrX7Muouma5vxWTKngEb7uHkRu4P5u |
oauth_verifier | 877973 |
oauth_version | 1.0 |
返回结果:
oauth_token=nnch734d00ls2jdk&oauth_token_secreate=pdkkdhi9sl3r4s00
参数 | 意义 |
---|---|
oauth_token | nnch734d00ls2jdk |
oauth_token_secrete |
pdkkdhi9sl3r4s00 |
至此,您的应用就取得了用户的受权,请妥善保管得到的Access Token和Access Token Secret。
此后,您的应用就能够使用该Access Token访问腾讯微博了。
得到Access Token以后,您的应用就能够使用该Access Token访问腾讯微博。
在每次调用接口API时,请求都必须包含以下所示OAuth标准参数:
参数 | 意义 |
---|---|
oauth_consumer_key | AppKey |
oauth_token | Access Token |
oauth_signature_method | 签名方法,暂只支持HMAC-SHA1 |
oauth_signature | 签名值,密钥为:App Secret&Access Token Secret。 |
oauth_timestamp | 时间戳 |
oauth_nonce | 单次值 |
调用API:
http://open.t.qq.com/api/t/add 发布一条微博
参数包括:
参数 | 参数值 |
---|---|
content | helloworld |
format | json |
oauth_consumer_key | aca77d2eb96f46e1b3353bc6743e8bfc |
oauth_nonce | Tld5QvrtTlRJvaSWPlCC7DIXxnTBeumD |
oauth_signature | JuPSe7ibf0uPECp4HcX4Fu9y3l0= |
oauth_signature_method | HMAC-SHA1 |
oauth_timestamp | 1299569293 |
oauth_token | b8c8f1a888ea4f2887eac88787b6e895 |
oauth_version | 1.0 |
post:
http://open.t.qq.com/api/t/add?content=helloworld&clientip=121.14.96.121&longitude=113.421234&latitude=22.354231&syncflag=0&format=xml&oauth_token=d8b0965f24a14575a84863a5e19a8705&oauth_nonce=709da91378181caec8e709085a757764&oauth_consumer_key=801058005&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_timestamp=1350653166&oauth_signature=unC%2FaR5N6hoXUsrabBgKHYjKcdg%3D