由于开发的应用需要发微博(OAuth1.0),近来几日都在调试腾讯微博的这个接口,到此时此刻个人觉得最快的办法就是:
首先看明白官方的说明,
然后下个sdk(本人使用的java)包参考一下他们的example,
最后按照示例的流程,调用sdk中的方法一步步走完,搞定
(本人在sdk中发现个小小的错误,下面会做说明)
本人比较苦逼,之前并不知道有sdk这个好东西可以下载,所以在看了一通说明文档后就开始噼里啪啦的敲了一通代码,感觉还是挺顺利的,但是在调试的时候问题就来了,签名总是无法通过【Invalid signature】,最后历经千辛万苦,总算得以通过但是偶尔还是会出现这个错误,虽然频率不是很高,但是终究是有问题。最后得高人指点发现有sdk这样的神器,无奈之时下载下来后最终完全解决掉了。
以下几处时需要注意的地方:
1,获取未授权的request token时,签名密钥【密钥为:App Secret&Access Token Secret】此时只有App Secret而没有Access Token Secret,所以此时的密钥的组成应该为:【App Secret&】。
2,生成的签名的baseString必须排序
3,发含中文的微博时:中文需要 URLEncoder.encode两次,即URLEncoder.encode(baseString, "UTF-8”)一次,生成baseString时URLEncoder.encode("内容", "UTF-8”) 一次。
4,微博内容中含有空格时,空格被URLEncoder后会变为 20% 此时需要把 20% 变为 + (sdk中是这样处理的)
/**
* 对参数进行UTF-8编码,并替换特殊字符
*
* @param paramDecString 待编码的参数字符串
* @return 完成编码转换的字符串
*/
public static String paramEncode(String paramDecString) {
if (!hasValue(paramDecString)) {
return "";
}
try {
return URLEncoder.encode(paramDecString, "UTF-8").replace("+", "%20")
.replace("*", "%2A").replace("%7E", "~")
.replace("#", "%23");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e.getMessage(), e);
}
}
以上是sdk中的处理源码
5,通过【获取自己的详细资料 user/info】接口获取微博头像地址时,需要在得到的url后面加上需要的尺寸才能访问,如:http://app.qlogo.cn/mbloghead/d387538f629cfb53c2b0 需要加上 /180 即:http://app.qlogo.cn/mbloghead/d387538f629cfb53c2b0/180 (尺寸有多种:10/.../100/180)
以上就是本人在开发过程中遇到的问题,仅供参考!
在授权的回调处理的时候,带有一个参数 oauth_verifier 而sdk的方法(OAuthV1Client.parseAuthorization())中进行判断的名字是 vcode在运行时由于这个错误会通不过