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 - беспорядок без надлежащей документации:(