2011-03-30 10 views
0

私はそこにoauthライブラリがたくさんあることを知っています。私はそれらを使うことを考えていましたが、決心しなかったので、私はちょうどそれの地獄のために自分自身を書いています。私は要求に署名することに問題があります...いくつかの助け?Twitter Oauth Lib ....もう一度

function signRequest($secret, $baseUrl){ 
    return base64_encode(hash_hmac('sha1', $baseUrl, $secret, TRUE)); 
} 

function getRequestToken(){ 
    $urlParams = array(
     "oauth_consumer_key"=>$this->consumer_key, 
     "oauth_signature_method"=>$this->oauth_signature_method, 
     "oauth_timestamp"=>time(), 
     "oauth_nonce"=>time(), 
     "oauth_version"=>$this->oauth_version 
    ); 
    uksort($urlParams, 'strcmp'); 

    foreach($urlParams as $k=>$v){ 
     $joinedParams[] = $k."=".$v; 
    } 
    $joinedParams = implode("&", $joinedParams); 


    $baseString = "POST&".rawurlencode($this->request_token_url)."&".rawurlencode($joinedParams); 
    $secret = $this->consumer_secret."&"; 

    $urlParams['oauth_signature'] = $this->signRequest($secret, $baseUrl); 
    uksort($urlParams, 'strcmp'); 
    foreach($urlParams as $k => $v){ 
     $urlPairs[] = $k."=".$v; 
    } 
    $concatenatedUrlParams = implode('&', $urlPairs); 
    $url = $this->request_token_url."?".$concatenatedUrlParams; 
    echo $url; 

} 

私はリクエスト事の署名全体に新しいです。私は次のリンクを使用してTwitterのAPIに接続することができました。鉱山では、トークンのようなあなたのOAuthパラメータを強制しようとしているように思え

another twitter oAuth cURL access token request that fails

+0

私はあなたが実際に間違って何が起こっているのかを教えを忘れてしまったと思う:ここ

はコードです。 – Charles

+0

私は間違ってリクエストに署名していると思います... –

+0

あなたはどう思いますか?特定のエラーメッセージが表示されますか? – Charles

答えて

2

...基本的に次の応答の書き換えのコーディです。

「承認」ヘッダーを作成し、リクエストトークン用にTwitterに送信する必要があります。私はあなたのコードのクラス機能を破壊しましたが、単一のPHPファイルとして、それは正常に動作します。

違いを確認して、自分のクラスに埋め込みます。

<?php 

getRequestToken(); 

function signRequest($secret, $baseString) { 
    return base64_encode (hash_hmac ('sha1', $baseString, $secret, TRUE)); 
} 

function getRequestToken() { 
    $urlParams = array (
     "oauth_consumer_key" => "5P7F5qtIUujg3KtLxxxxxx", //$this->consumer_key, 
     "oauth_signature_method" => "HMAC-SHA1", //$this->oauth_signature_method, 
     "oauth_timestamp" => time(), 
     "oauth_nonce" => md5 (uniqid (rand(), true)), // don't use time for nonce :) 
     "oauth_version" => "1.0" //$this->oauth_version 
    ); 
    ksort ($urlParams); // don't need uksort, ksort is enough 


    foreach ($urlParams as $k => $v) { 
     $joinedParams [] = $k . "=" . $v; 
    } 
    $joinedParams = implode ("&", $joinedParams); 

    $baseString = "GET&" . rawurlencode ("https://api.twitter.com/oauth/request_token") . "&" . rawurlencode ($joinedParams); 
    $secret = rawurlencode ("3q017y6ir8Rxxxxxxx") . "&"; //$this->consumer_secret."&"; 

    // We need to use the $baseString, not an url 
    $urlParams ['oauth_signature'] = rawurlencode (signRequest ($secret, $baseString)); 

    // Another ksort is not needed, it is ok for signature to be at the end, however: 
    ksort($urlParams); 

    // We need to build an array of headers for CURL 
    $urlParts = parse_url ("https://api.twitter.com/oauth/request_token"); 
    $header = array ('Expect:'); 
    $oauthHeader = 'Authorization: OAuth realm="' . $urlParts ['path'] . '", '; 
    foreach ($urlParams as $name => $value) { 
     $oauthHeader .= "{$name}=\"{$value}\", "; 
    } 
    $header [] = substr ($oauthHeader, 0, - 2); 

    // Ask Twitter for a request token 
    $ch = curl_init ("https://api.twitter.com/oauth/request_token"); 
    curl_setopt ($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false); 
    $content = curl_exec ($ch); 
    curl_close ($ch); 

    // Create the url from the curl answer 
    parse_str($content, $output); 
    $url = "https://api.twitter.com/oauth/authorize?oauth_token=" . $output["oauth_token"]; 
    echo $url ; 

} 
+0

うわー、そのすべての検索の後、私は最終的に素敵なきれいなカットレスポンスに資金を供給します。機能的にいくつかの基本的なことをしようとするために、フルクラスのoAuthライブラリを選ぶことはとても面倒です。迅速かつ簡単な対応に感謝します。 –

+0

私はプロセス全体を書こうとしていましたが、このコメントボックスは小さいです。さらにTwitterには、OAuthのすべてのプロセスを詳細に説明したページがあることを思い出しました。[link](http://dev.twitter.com/pages/auth) – emrahgunduz

+0

私はそのページを読んでいました。それらの質問。再度、感謝します。 –