博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6.腾讯微博Android客户端开发——换取Access Token
阅读量:5281 次
发布时间:2019-06-14

本文共 3909 字,大约阅读时间需要 13 分钟。

本次讲解腾讯微博OAuth认证的最后一步使用授权后的Request Token换取Access Token,当我们获取到Access Token后,我们就可以进行微博平台的资源访问。

照例我们先看下交换access_token的API:

 
交换access_token
URL:https:
//
open.t.qq.com/cgi-bin/access_token
格式:xml,json
HTTPS请求方式:GET
是否需要鉴权:
true
请求数限制:
true
请求参数:
oauth_callback:回调URL
oauth_consumer_key:你申请的appkey
oauth_nonce:随机串(32个字符长度)
oauth_signature:oauth请求签 名
oauth_signature_method: 签 名方法(HMAC
-
SHA1)
oauth_timestamp:时间戳
oauth_token: request_token
oauth_version: oauth版本号填(
1.0
oauth_verifier:验证码
使用示例如下:
https:
//
open.t.qq.com/cgi-bin/access_token?oauth_consumer_key=0aae7ba5c10d4b939694b0b3b9ffe8ac&oauth_nonce=35885b07fe7dc53942d405e552d086fe&oauth_signature=TXBihj%2FH4avLJaWmjYARDVVCu8M%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1288933101&oauth_token=66ae88faecd14a1f8e826d35d5e857a7&oauth_verifier=335566&oauth_version=1.0
返回结果:
oauth_token
=
ffc37464473e48a2b22226350dc98210
&
oauth_token_secret
=
3fe92ec42e936672ceca549d432c237d
&
name
=
starjiang
返回结果说明:
oauth_token: access_token
oauth_token_secret: access_secret
name: 微博帐户名

说明:

①本步骤用于签名的密钥为App Secret和Request Token Secret(中间使用&分隔)

②获得返回值后就可以使用Access Token来访问资源了。

③Access Token和Access Token Secret永远不会过期,直到用户撤销应用授权或腾讯回收您的app访问权限才会失效。

通过API的我们可知请求URL为https://open.t.qq.com/cgi-bin/access_token,传递的参数个数为9个,但是官方给出的使用示例中传递的参数为8个,其中oauth_callback并未传递,个人认为是API提供错误,因为在前面的请求中我们已经指定了oauth_callback,我编写代码的时候也是没有传递oauth_callback。另外oauth_verifier即为我们在上一节中获取的验证码。同时还有一点要注意的是我们在生成签名的时候密钥是有两部分组成的:App Secret和Request Token Secret,其中Request Token Secret既是我们在获取未授权的Token中的返回值oauth_token_secret的值。

由于我们在请求时需要传递验证码,因此我在界面中添加了一个EditText用来接收用户输入的验证码:

 

2011063010345914.jpg

同时添加了一个Button用于执行请求,代码如下:  

 

 
url
=
"
https://open.t.qq.com/cgi-bin/access_token
"
;
httpMethod
=
"
GET
"
;
Map
<
String, String
>
map
=
new
HashMap
<
String, String
>
();
try
{
params
=
OAuth.getPostParams(url, httpMethod,
null
, tokenSecret, oauthToken, verifier);
SyncHttp http
=
new
SyncHttp();
String response
=
http.httpGet(url, params);
map
=
TextUtil.splitResponse(response);
}
catch
(Exception e)
{
e.printStackTrace();
}
return
map;

在这里要注意的是OAuth中的getPostParams()方法我做了相应的修改,这个会在视频中给大家讲解,这里仅附上代码:

 
public
static
String getPostParams(String url, String httpMethod, String callBack, String tokenSecret,String oauthToken,String verifier)
throws
Exception
{
//
保存参数集合
List
<
Parameter
>
params
=
new
ArrayList
<
Parameter
>
();
//
获取时间戳
String timestamp
=
generateTimeStamp();
//
获取单次值
String nonce
=
generateNonce();
//
添加参数
params.add(
new
Parameter(
"
oauth_consumer_key
"
, CONSUMER_KEY));
params.add(
new
Parameter(
"
oauth_signature_method
"
, SIGNATURE_METHOD));
params.add(
new
Parameter(
"
oauth_timestamp
"
, timestamp));
params.add(
new
Parameter(
"
oauth_nonce
"
, nonce));
params.add(
new
Parameter(
"
oauth_version
"
,
"
1.0
"
));
if
(
!
TextUtil.isEmpty(callBack))
{
params.add(
new
Parameter(
"
oauth_callback
"
, callBack));
}
//
验证码
if
(
!
TextUtil.isEmpty(verifier))
{
params.add(
new
Parameter(
"
oauth_verifier
"
, verifier));
}
//
oauthToken
if
(
!
TextUtil.isEmpty(oauthToken))
{
params.add(
new
Parameter(
"
oauth_token
"
, oauthToken));
}
//
获取签名值
String signature
=
generateSignature(httpMethod, url, params, CONSUMER_SECRET, tokenSecret);
params.add(
new
Parameter(
"
oauth_signature
"
, signature));
//
构造请求参数字符串
StringBuilder urlBuilder
=
new
StringBuilder();
for
(Parameter param : params)
{
urlBuilder.append(param.getName());
urlBuilder.append(
"
=
"
);
urlBuilder.append(param.getValue());
urlBuilder.append(
"
&
"
);
}
//
删除最后“&”字符
urlBuilder.deleteCharAt(urlBuilder.length()
-
1
);
Log.i(TAG,
"
params=
"
+
urlBuilder.toString());
return
urlBuilder.toString();
}

通过上面的代码我们就可以获取到Access Token,整个程序执行流程如下图表示:

 

2011063010355691.jpg

通过上面的流程,我们发现在授权的过程中还需要用户的操作,既手动输入验证码,这样使我们的程序显得非常不友好。我也在参考其它的资料寻找解决方法,现在还找研究中,不管是否成功,在下一节课中会分享下思路,同时也期待各位朋友介绍更好的解决方案。

另外如果认证成功,我们可登陆open.t.qq.com,输入认证QQ账号,然后进入“应用”——“已授权应用”就可以看到我们授权的程序:

 

2011063010360671.jpg

 

 

课程下载地址:

文档下载地址:

源码下载地址:

转载于:https://www.cnblogs.com/coolszy/archive/2011/06/30/2094200.html

你可能感兴趣的文章
Openstack api 学习文档 & restclient使用文档
查看>>
vim linux下查找显示^M并且删除
查看>>
poj100纪念
查看>>
ExtJs4 笔记(5) Ext.Button 按钮
查看>>
把execl导入到数据库中
查看>>
阿里云人脸比对API封装
查看>>
如何将数据库中的表导入到PowerDesigner中(转)
查看>>
汇编总结一
查看>>
html5-表单常见操作
查看>>
String = ""和String = null的区别
查看>>
C#测试题若干,都是基础阿
查看>>
NetWork——关于TCP协议的三次握手和四次挥手
查看>>
An easy problem
查看>>
MauiMETA工具的使用(一)
查看>>
LeetCode: Anagrams 解题报告
查看>>
用cookie登录慕课网络教学中心刷评论
查看>>
Qt 中获取本机IP地址
查看>>
基本数据类型(int, bool, str)
查看>>
070102_赌博设计:概率的基本概念,古典概型
查看>>
IT人生的价值和意义 感觉真的有了
查看>>