2011-03-28 136 views
1

我花了过去几个小时尝试所有类型的变体,但根据Twitter API,本应从第1步开始!Twitter API - 无法验证oauth签名和令牌PHP/CURL

1另外我已经对下面的脚本进行了说明,我添加了: $ header = array(“Expect:”);

这个我发现在获取被拒绝的问题/ 100-继续的stackoverflow上的另一个问题的帮助。

问题: 无法验证oauth签名和令牌是每次的回应!我的文章数据的

例子:

Array ([oauth_callback] => http://www.mysite.com//index.php [oauth_consumer_key] => hidden [oauth_nonce] => hidden [oauth_signature_method] => HMAC-SHA1 [oauth_timestamp] => 1301270847 [oauth_version] => 1.0) 

我的头数据:

Array ([0] => Expect:) 

脚本:

$consumer_key = "hidden"; 
$consumer_secret = "hidden"; 
function Post_Data($url,$data,$header){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS,$data); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    return $result; 
    } 
$data['oauth_callback'] = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 
$data['oauth_consumer_key'] = $consumer_key; 
$data['oauth_nonce'] = md5(time()); 
$data['oauth_signature_method'] = "HMAC-SHA1"; 
$data['oauth_timestamp'] = time(); 
$data['oauth_version'] = "1.0"; 
$header = array("Expect:"); 
$content = Post_Data("http://api.twitter.com/oauth/request_token",$data,$header); 
print_r($content); 

任何人都可以看到一个明显的错误,我可以在这里做?最好我不喜欢用别人的代码代码,因为大多数例子都具有完整的类别&巨大的功能,我正在寻找最简单的方法!

回答

1

您的问题是您没有在您的请求中包含OAuth签名。
你可以阅读关于this page的概念。
工作实现可以在here找到。

0

我面临同样的问题,我所缺少的是将头传递给curl请求。 正如这个问题所示,我还发送了$ header = array('Expect:'),这是我的情况。我开始用下面的其他数据在头部发送签名,并为我解决了这个问题。

$header = calculateHeader($parameters, 'https://api.twitter.com/oauth/request_token'); 

function calculateHeader(array $parameters, $url) 
    { 
     // redefine 
     $url = (string) $url; 

     // divide into parts 
     $parts = parse_url($url); 

     // init var 
     $chunks = array(); 

     // process queries 
     foreach($parameters as $key => $value) $chunks[] = str_replace('%25', '%', urlencode_rfc3986($key) . '="' . urlencode_rfc3986($value) . '"'); 

     // build return 
     $return = 'Authorization: OAuth realm="' . $parts['scheme'] . '://' . $parts['host'] . $parts['path'] . '", '; 
     $return .= implode(',', $chunks); 

     // prepend name and OAuth part 
     return $return; 
    } 

function urlencode_rfc3986($value) 
    { 
     if(is_array($value)) return array_map('urlencode_rfc3986', $value); 
     else 
     { 
      $search = array('+', ' ', '%7E', '%'); 
      $replace = array('%20', '%20', '~', '%25'); 

      return str_replace($search, $replace, urlencode($value)); 
     } 
    }