2014-06-25 12 views
1

我成功安裝了twitteroauth併發布了一條消息。現在,當我嘗試再次發帖,並且每次AFTER THE FIRST成功發帖後,我收到一個錯誤Your credentials do not allow access to this resource. (code 220);Twitter首次連接後訪問資源錯誤

這是我的代碼:';

$message = 'Test'; 
    $apiKey = Ranger_Application_Util::getConfig('twitter_app_api_key'); 
    $apiSecret = Ranger_Application_Util::getConfig('twitter_app_api_secret'); 
    $consumerToken = Ranger_Application_Util::getStorageData('twitter_oauth_token'); 
    $consumerSecret = Ranger_Application_Util::getStorageData('twitter_oauth_secret'); 
    $twitterOauthVerifier = Ranger_Application_Util::getStorageData('twitter_oauth_verifier');  
    $_SESSIOM['oauth_token'] = $consumerToken; 
    $_SESSION['oauth_token_secret'] = $consumerSecret; 
    require_once 'twitter/twitteroauth.php'; 
    $connection = new TwitterOAuth($apiKey,$apiSecret,$consumerToken,$consumerSecret); 
    $connection->host = "https://api.twitter.com/1.1/"; 
    $accessToken = $connection->getAccessToken($twitterOauthVerifier); 
    $_SESSION['access_token'] = $accessToken; 
    $parameters = array('status' => $message); 
    $status = $connection->post('statuses/update',$parameters); 
    Core::dump($status); 
    die(); 

我從getStorageData檢索的數據存儲在屬於該特定用戶的數據庫中的值。

回答

1

除非你是存儲從$的accessToken的信息到你的數據庫中的一條,你還沒有發佈的代碼,我相信這個問題可能是您在初始連接後獲取訪問令牌,但在嘗試發佈連接時不使用訪問令牌中的永久訪問信息。因此,未來的任何請求都不會使用永久憑據,因此被拒絕。嘗試是這樣的:

$message = 'Test'; 

$apiKey    = Ranger_Application_Util::getConfig('twitter_app_api_key'); 
$apiSecret   = Ranger_Application_Util::getConfig('twitter_app_api_secret'); 
$twitterOauthVerifier = Ranger_Application_Util::getStorageData('twitter_oauth_verifier'); 

require_once 'twitter/twitteroauth.php'; 

$hasAccessToken = (
    array_key_exists('oauth_token', $_SESSION) && 
    array_key_exists('oauth_token_secret', $_SESSION)); 

if ($hasAccessToken) 
{ 
    $consumerToken = $_SESSION['oauth_token']; 
    $consumerSecret = $_SESSION['oauth_token_secret']; 
} 
else 
{ 
    $consumerToken = Ranger_Application_Util::getStorageData('twitter_oauth_token'); 
    $consumerSecret = Ranger_Application_Util::getStorageData('twitter_oauth_secret'); 

    $connection = new TwitterOAuth($apiKey, $apiSecret, $consumerToken, $consumerSecret); 
    $connection->host = "https://api.twitter.com/1.1/"; 

    $accessToken = $connection->getAccessToken($twitterOauthVerifier); 

    $consumerToken = $accessToken['oauth_token']; 
    $consumerSecret = $accessToken['oauth_token_secret']; 
    $_SESSION['oauth_token']  = $consumerToken; 
    $_SESSION['oauth_token_secret'] = $consumerSecret; 
} 

$connection = new TwitterOAuth($apiKey, $apiSecret, $consumerToken, $consumerSecret); 
$connection->host = "https://api.twitter.com/1.1/"; 

$parameters = array('status' => $message); 
$status = $connection->post('statuses/update', $parameters); 

Core::dump($status); 
die(); 

你可能想在你的數據庫OAuth令牌信息存儲從getAccessToken()接受它,而不是使用會話後。也許你有一個像Ranger_Application_Util::setStorageData('twitter_oauth_token', $consumerToken)的方法?

1

$_SESSIOM['oauth_token'] = $consumerToken; 
     ^

應該

$_SESSION['oauth_token'] = $consumerToken;