【问题标题】:Twitter request tokenTwitter 请求令牌
【发布时间】:2015-11-04 16:17:15
【问题描述】:

我正在尝试使用 Twitter 开发网站上的示例,但似乎无法获得与它们相同的签名。

我正在尝试在 https://dev.twitter.com/docs/auth/implementing-sign-twitter 上完成第 3 步,因为我收到“无效或过期令牌”错误,但我知道这不是因为我刚刚获得它,所以它一定有问题我的数据包。

我用来尝试生成它的代码是:

// testing bit
$oauth = array(
        'oauth_consumer_key'=>'cChZNFj6T5R0TigYB9yd1w',
        'oauth_nonce'=>'a9900fe68e2573b27a37f10fbad6a755',
        'oauth_signature_method'=>'HMAC-SHA1',
        'oauth_timestamp'=>'1318467427',
        'oauth_token'=>'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0',
        'oauth_version'=>'1.0'            
);            
$this->o_secret = 'LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE';
$this->c_secret = 'kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw';    

ksort($oauth);

$string = rawurlencode(http_build_query($oauth));

$new_string = strtoupper($http_method).'&'.rawurlencode($main_url[0]).'&'.$string;

// The request_token request doesn't need a o_secret because it doesn't have one!
$sign_key = strstr($fullurl,'request_token') ? $this->c_secret.'&' : $this->c_secret.'&'.$this->o_secret; 

echo urlencode(base64_encode(hash_hmac('sha1',$new_string,$sign_key,true)));exit;

我假设此页面上列出的键实际上是正确的:https://dev.twitter.com/docs/auth/creating-signature。所以在这种情况下,签名应该是 39cipBtIOHEEnybAR4sATQTpl2I%3D。

如果你能发现我遗漏的东西,那就太好了。

【问题讨论】:

  • 我认为您不应该公开分享您的*_secret 令牌。它们是秘密是有原因的。
  • 谢谢 - 这些不是来自 Twitter 官方网站。我试图复制他们的例子,看看我做错了什么。

标签: php twitter twitter-oauth


【解决方案1】:

page you reference 的使用者密码和令牌密码不正确。如果您进一步查看该页面,您会发现它们应该是:

Consumer secret: L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg
Token secret: veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI

在第 3 步中,您还需要在计算签名基本字符串时将oauth_verifier 包含在参数列表中。

我不熟悉 PHP,所以我没有检查你的代码来计算签名。

【讨论】:

【解决方案2】:

这段代码现在可以工作了——我会从那里整理它:)

    // This function is to help work out step 3 in the process and why it is failing
    public function testSignature(){
            // testing bit
            $oauth = array(
                    'oauth_consumer_key'=>'cChZNFj6T5R0TigYB9yd1w',
                    'oauth_nonce'=>'a9900fe68e2573b27a37f10fbad6a755',
                    'oauth_signature_method'=>'HMAC-SHA1',
                    'oauth_timestamp'=>'1318467427',
                    'oauth_token'=>'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0',
                    'oauth_version'=>'1.0'            
            );

            $this->o_secret = 'LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE';
            $this->c_secret = 'kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw';    

            ksort($oauth);

            $string = http_build_query($oauth);

            $new_string = strtoupper($http_method).'&'.$main_url[0].'&'.$string;

            $new_string = 'POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521';

            // The request_token request doesn't need a o_secret because it doesn't have one!
            $sign_key = $this->c_secret.'&'.$this->o_secret; 

            echo 'Should be: tnnArxj06cWHq44gCs1OSKk/jLY=<br>';
            echo 'We get: '.base64_encode(hash_hmac('sha1',$new_string,$sign_key,true));
            exit;    
    }

【讨论】:

    【解决方案3】:

    您想从 twitter 访问令牌并登录您可以在此示例中看到的实现。

    1) http://www.codexworld.com/login-with-twitter-using-php/

    这个是时间线推文

    2) http://www.codexworld.com/create-custom-twitter-widget-using-php/

    也许对你有帮助。

    【讨论】:

      猜你喜欢
      • 2012-06-22
      • 2017-06-23
      • 2011-09-05
      • 2017-01-10
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多