2011-03-28 3 views
1

지난 몇 시간 동안 모든 유형의 변형을 시도했지만 Twitter API에 따르면 1 단계에서 효과가있었습니다!Twitter API - oauth 서명 및 토큰의 유효성을 검증하지 못했습니다. PHP/CURL

추가 1 내가 추가 한 스크립트는 다음과 같습니다. $ header = array ("Expect :");

이 질문에 유래 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); 

아무도 내가 여기에 제작 될 수있는 명백한 실수를 볼 수 ? 가급적 나는 대부분의 예제가 풀 클래스를 가지고 있기 때문에 누군가 elses 코드와 같이 가고 싶지 않다. & 방대한 함수들, 나는 가장 간단한 접근법을 찾고있다!

답변

1

귀하의 요청에 OAuth 서명을 포함시키지 않은 것이 문제입니다.
this page에 대한 개념을 읽을 수 있습니다.
작동중인 구현은 here입니다.

0

나는 똑같은 문제에 직면했다. 내가 누락시킨 부분은 머리말을 컬 요청에 전달하는 것이다. 이 질문에서 볼 수 있듯이 필자는 $ 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)); 
     } 
    }