PHP,Codebird和Twitter为什么会收到错误401无效的请求令牌

时间:2015-05-06 09:47:48

标签: php twitter-oauth

我正在尝试使用codebird从twitter获取访问令牌,首先让用户授权使用我的应用程序使用此代码完美地工作

    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);
?>

这是我在这里重定向的地方:

twitter authorization

然后我被重定向到我应该获得访问令牌和访问令牌秘密的窗口,这也有效。

以下是使用$ _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&amp; oauth_verifier = zzzz url参数提供并且用户已经授权使用我的应用程序?

2 个答案:

答案 0 :(得分:0)

所以让我回答一下我自己的问题,代码中没有用的部分是:

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); 

这是证据,推文网址 - > https://twitter.com/Maina_Wycliffe/status/595995951132712960

并发推文 Successful Tweet 希望这会对你有所帮助

答案 1 :(得分:0)

这真的很奇怪,因为

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

不应该工作。第一个变量不是OAuth访问令牌。您需要从授权URL获取此令牌 - 这就是本发明的目的。也许其他用户可能想要使用您的应用。 即使我在我的脚本中有这行代码,我也无法发推,因为我收到了“无效令牌”错误,所以对我来说整个codebird库是一个没有适当文档的混乱:(