Search code examples
phptwitter-oauth

PHP, Codebird and Twitter why am receiving error 401 Invalid Request Token


I am trying to get access token from twitter using codebird, first getting user to authorize use of my application works perfectly using this code

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

This is where I am redirected here:

twitter authorization

When then I get redirected to the window in where I am supposed to get the access token and access token secret and that also works.

Here is where using $_GET[] I get the following codes http://lifetanstic.co.ke/AppRegister?oauth_token=zzzzz&oauth_verifier=zzzz

Now in that page when I run the following code, it does not work, but produces the following error:

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

When I dump the reply, it has the following error in it:

object(stdClass)#1 (3) { ["message"]=> string(21) "Invalid request token" ["httpstatus"]=> int(401) ["rate"]=> NULL }

So how am I supposed to get the aouth_accessToken, with this oauth_token=zzzzz&oauth_verifier=zzzz url parameters provide and a user has authorised use of my application?


Solution

  • so let me answer my own question, the part of the code that did not work was this:

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

    And i realized why, in the tutorial for codebird here https://github.com/jublonet/codebird-php there is something i thought it was not a necessary but the moment is reinstated it, it worked miracurously, this line of code

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

    So the final code will be like this:

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

    uncomment the last line to show the results in greater details

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

    and here is the evidence, tweet url-> https://twitter.com/Maina_Wycliffe/status/595995951132712960

    and tweets itself Successful Tweet Hope this will assist you