PHP, Codebird и Twitter, почему я получаю ошибку 401 Неверный токен запроса

Я пытаюсь получить токен доступа из твиттера с помощью codebird. Сначала пользователь получает разрешение на использование моего приложения.

    require_once('lib/codebird.php');

\Codebird\Codebird::setConsumerKey("xxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
session_start();
    // get the request token
    $reply = $cb->oauth_requestToken(array(
        'oauth_callback' => 'http://lifetanstic.co.ke/AppRegister'));
    // store the token
    $cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
    $_SESSION['oauth_token'] = $reply->oauth_token;
    $_SESSION['oauth_token_secret'] = $reply->oauth_token_secret;
    $_SESSION['oauth_verify'] = true;

    // redirect to auth website
    $auth_url = $cb->oauth_authorize();
?>
    <script type="text/javascript">
        window.location = "<?php echo  $auth_url; ?>";
    </script>

<?php
    //header('Location: ' . $auth_url);
?>

Вот где я перенаправлен сюда:

авторизация в твиттере

Когда меня перенаправляют в окно, где я должен получить токен доступа и секрет токена доступа, это также работает.

Вот где, используя $_GET[], я получаю следующие коды: http://lifetanstic.co.ke/AppRegister?oauth_token=zzzzz&oauth_verifier=zzzz

Теперь на этой странице, когда я запускаю следующий код, он не работает, но выдает следующую ошибку:

require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$reply = $cb->oauth_accessToken(array(
        'oauth_verifier' => $_GET['oauth_verifier']
));

var_dump($reply);

Когда я выкидываю ответ, в нем появляется следующая ошибка:

object(stdClass)#1 (3) { ["message"]=> string(21) "Invalid request token" ["httpstatus"]=> int(401) ["rate"]=> NULL }

Итак, как мне получить aouth_accessToken, с этими параметрами oauth_token=zzzzz&oauth_verifier=zzzz url, и пользователь разрешил использование моего приложения?

2 ответа

Решение

Итак, позвольте мне ответить на мой собственный вопрос, часть кода, которая не работала, была такой:

require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$reply = $cb->oauth_accessToken(array(
        'oauth_verifier' => $_GET['oauth_verifier']
));

var_dump($reply);

И я понял, почему, в учебнике для codebird здесь https://github.com/jublonet/codebird-php есть кое-что, что я думал, что это не было необходимым, но в тот момент, когда его восстановили, это чудесным образом сработало, эта строка кода

$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

Итоговый код будет таким:

require_once('lib/codebird.php');
session_start();
\Codebird\Codebird::setConsumerKey("xxxx", "xxxxx");
$cb = \Codebird\Codebird::getInstance();
// get the access token
$cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);
/*$reply = $cb->oauth_requestToken(array(
    'oauth_callback' => 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']
));*/
$reply = $cb->oauth_accessToken(array(
        'oauth_verifier' => $_GET['oauth_verifier']
    ));
//var_dump($reply);

раскомментируйте последнюю строку, чтобы показать результаты более подробно

to confirm the results, i posted to twitter successfully using this code:
$cb->setToken($reply->oauth_token, $reply->oauth_token_secret);
$params = array(
  'status' => '1Auto Post on Twitter with PHP http://goo.gl/OZHaQD #php #twitter @Maina_Wycliffe'
);
$reply = $cb->statuses_update($params);
//var_dump($reply); 

и вот доказательства, чирикать URL-> https://twitter.com/Maina_Wycliffe/status/595995951132712960

и пишет в ТвиттереУспешный твитНадеюсь, это поможет вам

Это действительно странно, потому что

 $cb->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

не должно работать. первая переменная не является маркером доступа OAuth. Вам нужно получить этот токен с URL авторизации - для этого и был придуман. Возможно, другие пользователи захотят использовать ваше приложение. Даже если у меня есть эта строка кода в моем скрипте, я не могу написать в Твиттере, потому что я получил ошибку "неверный токен", поэтому для меня вся библиотека codebird - беспорядок без надлежащей документации:(

Другие вопросы по тегам