2010-07-27 3 views
0

Ive가 oAuth에 금이 갔고 클래스 파일이 있습니다. 저는 의 마지막 단계에서을 게시하고 을 제외한 모든 작품은 모든 단어가 더한 기호에 트위터로 결합됩니다.왜 내 oAuth 짹짹에 플러스 (+)가 있습니까?

아무것도 변경하면 서명이 잘못되어 트위터가 401 오류를 반환합니다.

그럼 어떻게 덧셈을 제거하나요? 아래 기능을 게시 :

function post($token, $tokenSecret, $status) 
{ 
    // Default params 
    $params = array(
     "oauth_version" => "1.0", 
     "oauth_nonce" => time(), 
     "oauth_timestamp" => time(), 
     "oauth_consumer_key" => $this->key, 
     "oauth_signature_method" => "HMAC-SHA1", 
     "oauth_token" => $token, 
     "status" => $status 
    ); 
    uksort($params, 'strcmp'); 

    // convert params to string 
     foreach ($params as $k => $v) {$pairs[] = $this->_urlencode_rfc3986($k).'='.$this->_urlencode_rfc3986($v);} 
     $concatenatedParams = implode('&', $pairs); 

     // form base string (first key) 
     $baseString= "POST&".$this->_urlencode_rfc3986($this->request_statuses_url)."&".$this->_urlencode_rfc3986($concatenatedParams); 
     // form secret (second key) 
     $secret = $this->_urlencode_rfc3986($this->secret)."&".$this->_urlencode_rfc3986($tokenSecret); 
     // make signature 
     $sig = $this->_urlencode_rfc3986(base64_encode(hash_hmac('sha1', $baseString, $secret, TRUE))); 

    // BUILD URL 
     $url = $this->request_statuses_url; // twitter update url 
     $paramString = $concatenatedParams."&oauth_signature=".$sig; 

    // Send to cURL 
    $result = $this->_http($url, $paramString); 

    if($result['httpCode'] == '200'){ 

     // Return array 
     return $result; 
    } 
    else{ 

     // Error 
     show_error($result['httpCode'], $result['httpCode']); 
     return FALSE; 
    }  
} 
+0

이 이스케이프 문자로 트윗을 인코딩 했으므로 "! * '(); : @ & = + $, /? % # []"문자열의 모든 문자가 % 20과 같이 변환됩니까? – lucius

+0

당신의 의견을 따르십시오. 모든 것은 url_encoded되어야합니다. –

답변

0

트위터는 "표준"을 위반하는 것으로 알고있는 공백에 대해 이스케이프로 "+"지원하지 않습니다.

+를 % 20으로 대체해야합니다.

+0

예 - url_encodeing에 문제가 있습니다. 그것을 고쳤다. 감사 –

1

$ 트위터가 맞습니까? "$ status = This is my tweet"을 원하면 POST 요청을 살펴보십시오. 내 생각에 _urlencode_rfc3986()은 "$ status = This is my tweet"을 원할 때 "$ status = This + my + tweet"가되도록 변환합니다.

+0

예, 그렇지만 트위터를 사용하려면 모든 매개 변수를 url_encode해야하고 매개 변수가 기본 서명을 구성해야하므로 트위터가 401 오류를 반환하기 때문에 실제 게시 필드에서 매개 변수를 제거 할 수 없습니다. 나도 기뻐. 문서도 도움이되지 않습니다. –

관련 문제