如何使用php为Twitter API生成OAuth签名?

时间:2010-08-09 00:34:51

标签: php twitter oauth

实际上它不是一个php问题,而是更多关于OAuth的问题。 我正在尝试了解如何生成OAuth签名密钥。 我阅读了Twitter文档并尝试了示例,但我无法理解如何使用SHA1。

我是否应该在带有或不带有secret_key的基本字符串上使用SHA1? 我尝试了很多变化,但符号键与示例中的符号键不同。

这是我的代码:

function request_token(){

    $headers = 'POST&';
    $headers .= urlencode('https://api.twitter.com/oauth/request_token');
    $headers .= '%26oauth_callback%3d'.urlencode($this->oauth_callback);
    $headers .= '%26oauth_consumer_key%3d'.urlencode($this->oauth_consumer_key);
    $headers .= '%26oauth_nonce%3d'.urlencode($this->oauth_nonce);
    $headers .= '%26oauth_signature_method%3d'.urlencode($this->oauth_signature_method);
    $headers .= '%26oauth_timestamp%3d'.urlencode($this->oauth_timestamp);

    $request_token_url = 'http://api.twitter.com/oauth/request_token?';
    $sha = sha1($headers);
    $url = $request_token_url.$sha.$this->consumer_secret.'&';

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch, CURLOPT_POST      ,1);
    curl_setopt($ch,CURLOPT_PUT,true); 
    curl_setopt($ch, CURLOPT_HEADER, 1);

    $result = curl_exec($ch);
    curl_close($ch);
    return $result;

}

由于

3 个答案:

答案 0 :(得分:3)

我建议使用Abraham's Open Source OAuth solutio n,而不是尝试编写自己的。

(GitHub)

答案 1 :(得分:1)

您可能希望看到此工作解决方案another twitter oAuth cURL access token request that fails

答案 2 :(得分:0)

如果您自己提出请求,可以使用http://www.eeqqoo.com/index.php?option=com_content&view=article&id=62:oauth-signature-validation-tool&catid=35:php&Itemid=54测试签名,这对我有很大帮助