2015-02-21 12 views
5

Ich versuche Post mit twitteroauth mit der neuesten Version zu teilen. Unten ist mein Code.Twitter OAuth - Ungültiges oder abgelaufenes Zugriffs-Token

require APP."Vendor/twitteroauth-master/autoload.php"; // twitter v0.5.1 SDK 

if(isset($_REQUEST['oauth_verifier'])) { 

     $request_token = []; 
     $request_token['oauth_token'] = $this->Session->read('twtr_oauth_token'); 
     $request_token['oauth_token_secret'] = $this->Session->read('twtr_oauth_token_secret'); 

     /* If denied, bail. */ 
     if (isset($_REQUEST['denied'])) { 
      exit('Permission was denied. Please start over.'); 
     } 

     /* If the oauth_token is not what we expect, bail. */ 
     if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) { 
      $this->Session->write("twtr_oauth_token" , ''); 
      $this->Session->write("twtr_oauth_token_secret" , ''); 
      exit; 
     } 

     debug($request_token); 

     /* Create TwitteroAuth object with app key/secret and token key/secret from default phase */ 
     $connection = new TwitterOAuth("KEY", "SECRET", $request_token['oauth_token'], $request_token['oauth_token_secret']); 

     debug($connection); 

     $content = $connection->get('account/verify_credentials'); 

     debug($content); 

     /* Request access token from twitter */ 
     $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier'])); 

     /** Finally post things */ 
     $result = $connection->post("statuses/update", array("status" => "hello world")); 

     if(isset($result->errors) && count($result->errors) > 0) { 
      debug($connection->post("statuses/update", array("status" => "hello world"))); 
      exit; 
     } 

     $this->redirect("http://twitter.com"); 

    } else { 

     $connection = new TwitterOAuth("KEY", "SECRET"); 

     /** Get Temp Token */ 
     $request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => "https://180.211.99.162:9051/widgetapi/twitterOauth")); 

     switch ($connection->getLastHttpCode()) { 
      case 200: 
       /** Write OAuth token and secret into session */ 
       $this->Session->write("twtr_oauth_token" , $request_token['oauth_token']); 
       $this->Session->write("twtr_oauth_token_secret" , $request_token['oauth_token_secret']); 

       /** Build Auth URL */ 
       $url = $connection->url('oauth/authorize', array('oauth_token' => $request_token['oauth_token'])); 

       /** Redirect */ 
       $this->redirect($url); 
       break; 
      default: 
       /* Show notification if something went wrong. */ 
       echo 'Could not connect to Twitter. Refresh the page or try again later.'; 
     } 
    } 

Wenn ich versuche, dies zu erreichen, bekomme ich ungültige oder abgelaufene Zugriffstoken.

Debug information

/app/Controller/WidgetapiController.php (line 258) 
array(
    'oauth_token' => 'AU549WSBbnxvibRcU5jzUzOwFAoUiTXs', 
    'oauth_token_secret' => 'NRmkbByjjAPGQLJK06DaUauYfa38kpY6' 
) 
/app/Controller/WidgetapiController.php (line 261) 
object(Abraham\TwitterOAuth\TwitterOAuth) { 
    [protected] timeout => (int) 5 
    [protected] connectionTimeout => (int) 5 
    [protected] decodeJsonAsArray => false 
    [protected] userAgent => 'TwitterOAuth (+https://twitteroauth.com)' 
    [protected] proxy => array() 
    [private] response => object(Abraham\TwitterOAuth\Response) { 
     [private] apiPath => null 
     [private] httpCode => (int) 0 
     [private] headers => array() 
     [private] body => array() 
     [private] xHeaders => array() 
    } 
    [private] bearer => null 
    [private] consumer => object(Abraham\TwitterOAuth\Consumer) { 
     key => 'KEY' 
     secret => 'SECRET' 
     callbackUrl => null 
    } 
    [private] token => object(Abraham\TwitterOAuth\Token) { 
     key => 'AU549WSBbnxvibRcU5jzUzOwFAoUiTXs' 
     secret => 'NRmkbByjjAPGQLJK06DaUauYfa38kpY6' 
    } 
    [private] signatureMethod => object(Abraham\TwitterOAuth\HmacSha1) { 

    } 
} 
/app/Controller/WidgetapiController.php (line 263) 
object(stdClass) { 
    errors => array(
     (int) 0 => object(stdClass) { 
      code => (int) 89 
      message => 'Invalid or expired token.' 
     } 
    ) 
} 
/app/Controller/WidgetapiController.php (line 271) 
object(stdClass) { 
    errors => array(
     (int) 0 => object(stdClass) { 
      code => (int) 89 
      message => 'Invalid or expired token.' 
     } 
    ) 
} 

Ich bin das Problem nicht in der Lage, um herauszufinden! Irgendeine Idee, was ist hier falsch?

Antwort

13

Einmal bekommen Du Rückruf, initialize Klasse wieder mit neuen Zugriffstoken

/* Request access token from twitter */ 
$access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier'])); 

$connection = new TwitterOAuth("KEY", "SECRET", $access_token['oauth_token'], $access_token['oauth_token_secret']); 
+0

lassen Sie mich dieses versuchen. – Shreejibawa

+0

das hat funktioniert! vielen Dank! :) – Shreejibawa

+0

für mich gab ich oauth_token auch. damit es in Zeile funktioniert $ access_token = $ verbindung-> oauth ("oauth/access_token", array ("oauth_verifier" => $ _REQUEST ['oauth_verifier'], "oauth_token" => $ oauth_token)); – zoomi

4

Mit der neuesten Version von TwitterOAuth, und mit Hilfe von @ user3989103 Antwort in diesem Thread und https://twittercommunity.com/t/twitter-oauth-verifier-does-not-always-work/31672, was für mich gearbeitet wurde :

$connection = new TwitterOAuth($key, $secret, $_SESSION['request_token'], $_SESSION['request_token_secret']); 

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

$connection = new TwitterOAuth($key, $secret, $access_token['oauth_token'], $access_token['oauth_token_secret']); 

$credentials = $connection->get('account/verify_credentials');