1
joyqi 2011-07-27 14:08:36 +08:00
我调试过这个接口
open.t.qq.com的接口极为不稳定,可能有10次调用只有一次调用返回正常,其它的都是401,不知道为什么 所以很可能不是你程序的问题 |
2
joyqi 2011-07-27 14:14:05 +08:00
哦,你的是Invalid signature错误,那你肯定是带了format=json之类的参数了,但是你在算signature的时候没有把这个参数放进去,一般oauth库都有专门接口可以增加额外参数的
|
4
zhouyang 2011-07-27 14:46:34 +08:00
这个basestring应该没啥问题,可以看到返还的ret和errcode吗?
|
6
joyqi 2011-07-27 14:55:48 +08:00
你把oauth_callback带上值吧,别搞null了。
|
8
zhouyang 2011-07-27 15:05:59 +08:00
检查一下签名的算法吧
|
9
ayanamist 2011-07-27 15:09:40 +08:00
很简单,你把OAuth的结果作为HTTP Header传过去的,这是不行的,你要编码到URL中……
|
10
ayanamist 2011-07-27 15:10:08 +08:00
要记得不要再作为Header了,否则一样会无效的。URL或者Header只能选一个
|
13
joyqi 2011-07-27 17:30:47 +08:00
我觉得就是url编码的问题,腾讯不知道用的一套什么诡异的规则
|
15
zhouyang 2011-07-27 17:56:14 +08:00
还有encode方法?不是准备好了字典直接urlencode就可以了,字典直接里的值直接encode('utf8')
|
16
joyqi 2011-07-27 17:59:51 +08:00
|
19
yudun1989 2011-07-27 19:27:39 +08:00
兄弟可以来找我 [email protected]
我刚做了。 |
20
fanzeyi OP |
21
joyqi 2011-08-02 10:50:57 +08:00
@fanzeyi php也有了解决办法,经过哥的多方猜测,是nonce的编码问题,如果有特殊字符腾讯那边是要求编码,但php没有编码,所以你得自己手动setNonce
|
22
waitd 2011-11-28 00:25:34 +08:00
md,我用的是js的OAuth,结果非要把整个请求encodeURIComponent一下,才不会提示invalid signature,但返回的status=0,继续杯具中..狗日的腾讯
|
25
laiwei 2012-02-23 10:42:01 +08:00
@fanzeyi 腾讯太变态了,我用httplib2,一直提示invalid signature,换成urllib,确实好了,我擦
|
26
laiwei 2012-02-23 11:10:57 +08:00
@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-02-25 13:49:00 +08:00
确认不要有多余的参数,腾讯的request token, 如果有不是他提供的参数列表里的参数时,会出这个问题,同样的oauth库在新浪没有任何问题。
|
29
bollwang 2013-12-26 21:11:07 +08:00
这个是怎么解决的呢?代码能共享一份麽?qq56770498,万分感谢
|