【问题标题】:PHP, Codebird and Twitter why am receiving error 401 Invalid Request TokenPHP、Codebird 和 Twitter 为什么会收到错误 401 Invalid Request Token
【发布时间】:2017-02-15 04:10:27
【问题描述】:

我正在尝试使用 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);
?>

这是我被重定向到这里的地方:

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

这里是使用 $_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 参数提供并且用户已授权使用我的应用程序?

【问题讨论】:

    标签: php twitter-oauth


    【解决方案1】:

    所以让我回答我自己的问题,代码中不起作用的部分是这样的:

    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

    和推特本身 希望对你有帮助

    【讨论】:

    • “人们不再有回答别人问题的心情”什么?
    • 我已经发布了 3 个问题,有人编辑,给予加分或减分但没有答案,我看到很多人的帖子没有回答他们的问题,请不要冒犯
    【解决方案2】:

    这真的很奇怪,因为

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2020-09-24
      • 2015-05-24
      • 1970-01-01
      • 2018-02-17
      • 2014-03-20
      • 2014-12-25
      • 1970-01-01
      相关资源
      最近更新 更多