Twitter OAuth:无效或过期的令牌[不重复]

Twitter OAuth : Invalid or expired token [its NOT duplicate]

在有人匆忙将此问题标记为重复之前,让我告诉你 它不是重复的

我已经检查过像 this, this, this and this 这样的类似问题,但这些都是 2 年前的事,而且从那时起库已经改变太多,所以这些答案没有用。

问题来了。我正在使用可以找到的 abraham 的库 here。下面是我正在使用的代码:

if(!empty($_GET['oauth_verifier']) && !empty($_SESSION['oauth_token']) && !empty($_SESSION['oauth_token_secret']))
{
    $connection = new TwitterOAuth('MY_CONSUMER_KEY', 'MY_CONSUMER_SECRET', $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

    $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
    $_SESSION['access_token'] = $access_token;

    $user_info = $connection->get("account/verify_credentials");
    print_r($user_info);
}

从我上面做的print_r,我得到如下结果:

stdClass Object ( [errors] => Array ( [0] => stdClass Object ( [code] => 89 [message] => Invalid or expired token. ) ) )

因此invalid/expired token我的工作无法取得进展。所以我退后一步做了:

var_dump($access_token);

得到的结果是:

array(5) { 
   ["oauth_token"]=> string(50) "*********" 
   ["oauth_token_secret"]=> string(45) "*********" 
   ["user_id"]=> string(10) "***My user id****" 
   ["screen_name"]=> string(9) "***My screen name****" 
   ["x_auth_expires"]=> string(1) "0" 
}

在这里你看到最后一个元素是["x_auth_expires"],它的值是0。我认为这个元素没有出现在旧版本的库中。我想这就是导致问题的原因。

我尝试重新生成我的 Customer_KeyCustomer_Secret,但即使这样似乎也无济于事。

我们将不胜感激任何形式的帮助。谢谢。

终于找到解决方法了

您需要做的就是,在收到回调后,使用新的访问令牌再次初始化 class。

$connection = new TwitterOAuth('MY_CONSUMER_KEY', 'MY_CONSUMER_SECRET', $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));

$connection = new TwitterOAuth('MY_CONSUMER_KEY', 'MY_CONSUMER_SECRET', $access_token['oauth_token'], $access_token['oauth_token_secret']);

我不知道为什么会这样,但它确实很有效。从 .

找到这个解决方案

我在CI回调函数中使用了这个

if($this->input->get('denied') != ''){
   /* Remove all token from session  */
   $this->connection = NULL;
   $this->connection = $this->twitteroauth->create($this->config->item('twitter_consumer_token'), $this->config->item('twitter_consumer_secret'));
   $this->session->set_flashdata('account_block_error_msg',"Access denied");
   redirect(base_url('/Sign-in'));
}