0

好的,经过两天的试用后,我的钛应用程序仍然无法与 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);
4

3 回答 3

1

有几个错误:

  • 您的 nonce 似乎构建不正确。生成一个包含 32 个字母的字符串,并使用 Base 64 对其进行编码。
  • 您的签名也没有正确构建。请参阅有关制作签名的 Twitter 开发人员文档。这是您的错误:
    • 所有 OAuth 参数都丢失了,但是oauth_callback. 标头中使用的 OAuth 参数Authorize必须包含在签名的参数中
    • 您无需构建密钥来签署数据。
    • 您不使用签名方法(oauth_signature_method设置为“ HMAC-SHA1”)来签署您的数据。
  • 你的时间戳太大了。它是自 Unix 纪元时间以来的秒数,而不是毫秒。添加一个“ /1000”:

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

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

于 2013-01-19T02:09:17.890 回答
0

偶然我发现 javascript 库发布在 twitter 库列表中。看看jsOAuth。该库还有API 文档:)。现在我能够获得授权令牌,但是当我通过发布到https://api.twitter.com/1.1/search/tweets.json来执行搜索时,我得到 401(未经授权)错误。现在我又被困住了。任何想法可能是什么问题...

于 2013-01-15T14:56:59.743 回答
0

已经有多个用于 appcelerator 的 twitter 库,我建议从其中一个开始。

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

请参阅帖子底部的 github repo 链接

于 2013-01-20T15:17:11.943 回答