所以我試圖無法從twitter獲取令牌。 我收到以下錯誤:「無法驗證oauth簽名和令牌」。 我讀過它可能是由於您的系統時鐘錯誤。 在javascript中我測試了我的日期下面的代碼使用JavaScript的Twitter OAuth Request_Token,可能是錯誤的時間?
var minutes=1000*60;
var hours=minutes*60;
var days=hours*24;
var years=days*365;
var d=new Date();
var t=d.getTime();
var y=t/years;
console.log((y+1970) + " year and " + (t%years)/days)
這給了我一年爲2012 17天.. 1972年 1976年 1980年 1984年 1988年 1992年 1996年 2004年 _ _ = 10閏日。今天是第8名,因此我想系統時鐘在7號出現,所以我要跳過這個閏日?或者我在這裏犯了一個錯誤?如果這是問題,我該如何修復我的時鐘?
在cmd當我做日期cmd它給了我今天的日期,即第8。
這是我的發佈請求和代碼,以防問題出在代碼中而不是時鐘。
我的POST請求:
POST http://api.twitter.com/oauth/request_token?oauth_callback=127.0.0.1&oauth_consumer_key=FFZJrBaPLsiwTDg5159tTQ&oauth_nonce=tWHEEIW8vLS6tMggo3IXe6e449qv1GpE8LunKRsbRF&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1326039495&oauth_version=1.0&oauth_signature=d%2BQqgTzJCjYIp9vKwm%2BCWzVLPvA
它得到401(未授權)
這裏是我的javascript代碼。
var url = "http://api.twitter.com/oauth/request_token";
var params={
oauth_callback : "127.0.0.1"
,oauth_consumer_key : "FFZJrBaPLsiwTDg5159tTQ"
,oauth_nonce : OAuth.nonce(42)
,oauth_signature_method : "HMAC-SHA1"
,oauth_timestamp : OAuth.timestamp()
,oauth_version: "1.0"}
//temp is to be the signature base string
var temp = toSignParams("POST",url,params);
console.log(temp);
//This logs the signature base string as "POST&http%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3D127.0.0.1%26oauth_consumer_key%3DFFZJrBaPLsiwTDg5159tTQ%26oauth_nonce%3D5gQVIa3WmwD6ARGGQTITl1Ozgxe2t8em5HC7g8wvMi%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1326038871%26oauth_version%3D1.0"
//which is correct I think.
//When I use this with the base signature from twitters oauth example page I get the result they got.
//it hashes the twitter signing key with base signature.
params.oauth_signature = b64_hmac_sha1("MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98&",temp);
var req = new XMLHttpRequest();
req.open("POST",toURIParams(url,params),true);
req.send();
console.log(params)
req.onreadystatechange=function(){
if (req.readyState==4)
{
console.log(req.responseText); //this is saying "Failed to validate oauth signature and token"
}
}
//function to convert to Signature paramaters, as indicated on twitter page.
function toSignParams(method,base,params){
tail=[];
for (var p in params) {
if (params.hasOwnProperty(p)) {
tail.push(p + "%3D" + encodeURIComponent(params[p]));
}
}
return method + "&" + encodeURIComponent(base) + "&" + tail.join("%26")
}
//function to convert to uri encoded parameters.
function toURIParams(base, params) {
tail = [];
for (var p in params) {
if (params.hasOwnProperty(p)) {
tail.push(p + "=" + encodeURIComponent(params[p]));
}
}
return base + "?" + tail.join("&")
}
任何想法?
我決定使用JavaScript的推特庫來代替。 – James 2012-01-10 18:55:00
發佈JS庫作爲答案並接受答案。這會在他們遇到你的問題時幫助其他人。 – JSuar 2013-01-16 13:31:33
「我讀過它可能是由於您的系統時鐘錯誤導致的......」在完全混淆了一個小時之後才解決了我的問題,這是爲什麼昨天早上一些OAuth代碼被破壞的原因! – 2013-02-03 09:59:43