
1 joyqi 2011 年 7 月 27 日 我调试过这个接口 open.t.qq.com的接口极为不稳定,可能有10次调用只有一次调用返回正常,其它的都是401,不知道为什么 所以很可能不是你程序的问题 |
2 joyqi 2011 年 7 月 27 日 哦,你的是Invalid signature错误,那你肯定是带了format=json之类的参数了,但是你在算signature的时候没有把这个参数放进去,一般oauth库都有专门接口可以增加额外参数的 |
4 zhouyang 2011 年 7 月 27 日 这个basestring应该没啥问题,可以看到返还的ret和errcode吗? |
6 joyqi 2011 年 7 月 27 日 你把oauth_callback带上值吧,别搞null了。 |
8 zhouyang 2011 年 7 月 27 日 检查一下签名的算法吧 |
9 ayanamist 2011 年 7 月 27 日 很简单,你把OAuth的结果作为HTTP Header传过去的,这是不行的,你要编码到URL中…… |
10 ayanamist 2011 年 7 月 27 日 要记得不要再作为Header了,否则一样会无效的。URL或者Header只能选一个 |
13 joyqi 2011 年 7 月 27 日 我觉得就是url编码的问题,腾讯不知道用的一套什么诡异的规则 |
15 zhouyang 2011 年 7 月 27 日 还有encode方法?不是准备好了字典直接urlencode就可以了,字典直接里的值直接encode('utf8') |
16 joyqi 2011 年 7 月 27 日 |
19 yudun1989 2011 年 7 月 27 日 兄弟可以来找我 [email protected] 我刚做了。 |
20 fanzeyi OP |
21 joyqi 2011 年 8 月 2 日 @fanzeyi php也有了解决办法,经过哥的多方猜测,是nonce的编码问题,如果有特殊字符腾讯那边是要求编码,但php没有编码,所以你得自己手动setNonce |
22 waitd 2011 年 11 月 28 日 md,我用的是js的OAuth,结果非要把整个请求encodeURIComponent一下,才不会提示invalid signature,但返回的status=0,继续杯具中..狗日的腾讯 |
26 laiwei 2012 年 2 月 23 日 @fanzeyi @joyqi 我发现腾讯微博oauth签名的真正问题了 并不是urllib或者httplib的问题 而是计算basestring的计算方法有问题: 比如待签名的东西参数有: d = { oauth_callback : xxxx.com/sth oauth_consumer_key : 123456 oauth_nonce : 33333 oauth_signature_method : HMAC-SHA1 oauth_timestamp : 1234455667777 oauth_version : 1.0 } 首先把d按照key做一下sort d = sorted(d.items(), key=lambda x:x[0]) 其次,把参数和参数的值都做urlencode dd = [urllib.urlencode([x]) for x in d] 然后,把dd用&符号连接起来,再做一次urlencode(也就是quote) part3 = urllib.quote("&".join(dd)) 这里的关键就是说,这些参数前前后后,被quote了两次! 这样做,就ok了 |
28 foxling 2012 年 2 月 25 日 确认不要有多余的参数,腾讯的request token, 如果有不是他提供的参数列表里的参数时,会出这个问题,同样的oauth库在新浪没有任何问题。 |
29 bollwang 2013 年 12 月 26 日 这个是怎么解决的呢?代码能共享一份麽?qq56770498,万分感谢 |