社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
今天心血来潮想借腾讯的开放平台熟悉oauth。结果就摆弄了起来,腾讯的文档还是写得很详细的,比我上一次看的已经好很多了。而且还提供了sdk,可以快速调用腾讯的开放平台,既然是学习来的,也就没图快,决定从零开始,手写代码。
一切都是按文档来的,可没想到第一步取access token就受挫了:
代码如下:
buildHttpData是我自定义的函数,用于把一个js对象转化为格式化的url参数。返回值为 {时间戳}&name1=value1&name2=value2&…
然后拼接req_url 后为: https://graph.qq.com/oauth2.0/authorize?1320327350000&response_type=token&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&scope=get_user_info&state=comeonbb
结果,就有了刚才那种情况了
后来分析了半天,网上也完全找不到解决办法,对比了文档上url的格式,发现除了多了时间戳外一点区别都没有,我想了下可能是参数必须是name=value的形式,服务端才能认识吧,因为url中有这么一段:?1320327350000&
而时间戳主要是之前为了防止ajax请求时读到缓存,所以才自动加上的,以前是从来都没有问题的,去掉了时间戳后,还不行,急了,仔细一看url,参数部分最前头还有个&,去了之后,好了,擦。。。
正确的获取access token url为:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&state=comeonbb
而如果把时间戳或者任意一段字符串(只要是url中允许存在的字符,而且不是name=value的形式)放到url末尾,也会有问题
如:https://graph.qq.com/oauth2.0/authorize?response_type=token&client_id=201981&redirect_uri=http%3A%2F%2Fwww.goodje.com%2Flabs%2Flogin%2Fqq_login.php&scope=get_user_info&state=comeonbb&1320327350000
会报lost which in paraml(1000028)!错误
看了下响应头,server: tnginx
tnginx, 腾讯二次开发并优化过的nginx。难道优化的时候去掉了啥东西么,我记得nginx不会这样的呀,理论上这是腾讯的一个bug,不说了,反正是很坑爹的。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!