twitter request_token 401未经授权

时间:2013-01-15 13:39:00

标签: oauth twitter appcelerator

经过两天的试用后,我仍然无法通过twitter request_token api 1.1来完善我的钛应用程序,我总是得到401未经授权的错误。下面是我的代码。我被封锁所以感谢任何帮助。

var httpClient = Ti.Network.createHTTPClient({
                onerror : function(e) {
                    alert(this.status + ":" + e.error);
                },
                onload : function(e) {
                    alert(this.responseText);
                    if (this.readyState == 4) {
                        var resposeText = this.responseText;
                    }

                }
            });
httpClient.open('POST', "https://api.twitter.com/oauth/request_token");
httpClient.setRequestHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");

var now = new Date().getTime();

var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var nonce = "";
for (var i = 0; i < 10; ++i) {
    var rnum = Math.floor(Math.random() * chars.length);
    nonce += chars.substring(rnum, rnum + 1);
}
var parameters = "oauth_callback=" + Ti.Network.encodeURIComponent("http://apicallback.stc.com.sa");

var signature = "POST&" + Ti.Network.encodeURIComponent("https://api.twitter.com/oauth/request_token") + "&" + Ti.Network.encodeURIComponent(parameters);
var header = "OAuth oauth_callback=\"" + Ti.Network.encodeURIComponent("http://apicallback.stc.com.sa") + "\",oauth_consumer_key=\"wPdlchopdYaqHhab8H8jMA\",oauth_nonce=\"" + nonce + "\",oauth_signature=\"" + signature + "\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"" + now + "\",oauth_version=\"1.0\"";
httpClient.setRequestHeader("Authorization", header);
httpClient.send(parameters);

3 个答案:

答案 0 :(得分:1)

有几个错误:

  • 您的nonce似乎构建错误。生成一个包含32个字母的字符串,并使用Base 64进行编码。
  • 您的签名也未正确构建。请参阅Twitter Developers documentation about making signatures。这是你的错误:
    • 缺少所有OAuth参数,但oauth_callbackAuthorize标头中使用的OAuth参数必须包含在签名
    • 的参数中
    • 您没有构建签署数据的密钥。
    • 您不使用设置为“ oauth_signature_method ”的签名方法HMAC-SHA1来签署您的数据。
  • 您的时间戳太大了。它是Unix纪元时间以来的的数量,而不是毫秒数。添加“/1000”:

    var now = new Date().getTime() / 1000

更一般地,请查看有关授权请求的Twitter开发人员文档:https://dev.twitter.com/docs/auth/authorizing-request

答案 1 :(得分:0)

我偶然发现javascript库发布在twitter的库列表中。看看jsOAuth。库{:)还有API doc。现在我能够获得授权令牌但是当我通过发布到https://api.twitter.com/1.1/search/tweets.json执行搜索时,我得到401(未授权)错误。现在我再次陷入困境。任何想法可能是什么问题...

答案 2 :(得分:0)

appcelerator有多个推特库已经有用,我建议先从其中一个开始。

http://www.clearlyinnovative.com/blog/post/33810421717/titanium-appcelerator-quickie-posting-images-to-twitter-with-social_plus-js

在帖子底部看到github repo的链接