欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

六.腾讯微博android客户端开发——换取access token

更新时间: 2014-01-05 02:25:42 责任编辑: Author_N1

 

6.腾讯微博Android客户端开发——换取Access Token

原文:http://blog.csdn.net/coolszy/article/details/6576536

 

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

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

 

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用来接收用户输入的验证码:

 

同时添加了一个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,整个程序执行流程如下图表示:

 

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

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

 

 

课程下载地址:http://u.115.com/file/e60jb8jl

文档下载地址:http://download.csdn.net/source/3405215

源码下载地址:http://u.115.com/file/dn4kdfdt

上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:25:42
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/9693/
本文WWW.DOC100.NET DOC100.NET版权所有。