API Twitter - не удалось проверить подпись oauth и токен PHP / CURL - PullRequest
1 голос
/ 28 марта 2011

Я провел последние пару часов, пробуя все типы вариаций, но в соответствии с API Twitter это должно сработать с шага 1!

1 Я добавил в сценарий ниже то, что добавилin: $ header = array ("Expect:");

Это помогло мне в другом вопросе о стекопереработке при получении отклоненной проблемы / 100-continue.

Проблема: не удалось проверить 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);

Кто-нибудь может увидеть очевидную ошибку, которую я могу здесь совершить?Желательно, чтобы я не хотел использовать чей-то другой код, так как большинство примеров имеют полные классы и массивные функции, я ищу самый простой подход!

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Ваша проблема в том, что вы не включили подпись OAuth в свой запрос.
Вы можете прочитать о концепции на этой странице .
Работающую реализацию можно найти здесь .

0 голосов
/ 04 марта 2015

Я столкнулся с той же проблемой, но мне не хватало передачи заголовка в запрос curl.Как показано в этом вопросе, я также отправлял массив $ header = (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));
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...