2012-02-16 6 views
3

J'essaie actuellement d'intégrer twitter dans une application web php sur laquelle je travaille avec OAuth.Authentification avec Twitter OAuth API

J'ai une page HTML qui fournit un lien vers l'URL d'authentification de l'application Twitter qui semble fonctionner correctement et affiche l'écran d'authentification.

Voici le code qui appelle la fonction.

if (!isset($_GET['oauth_token'])) 
{ 
    //include("phpHandler/twitterLib/secret.php"); 
    getTwitterURL($consumer_key, $consumer_secret); 
} 

Les clés consumer_key et consumer_secret sont incluses dans un fichier php.

Voici le code qui obtient l'URL d'autorisation de Twitter. Cette redirection vers la page bien, puis j'appelle la méthode d'authentification pour récupérer des informations comme twitter nom d'utilisateur. Ci-dessous est la fonction qui fait l'authentification

function authenticate($consumer_key, $consumer_secret) 
{ 
    require ("twitterLib/EpiCurl.php"); 
    require ("twitterLib/EpiOAuth.php"); 
    require ("twitterLib/EpiTwitter.php"); 
    require ("twitterLib/secret.php");*/ 
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret); 
    $twitterObj->setToken($_GET['oauth_token']); 
    $token = $twitterObj->getAccessToken(); 
    $twitterObj = new EpiTwitter($consumer_key, $consumer_secret); 
    $twitterObj->setToken($token->oauth_token, $token->oauth_token_secret); 
    $token = $twitterObj->getAccessToken(); 
    $twitterObj->setToken($token->oauth_token, $token->oauth_token_secret); 
    $_SESSION['ot'] = $token->oauth_token; 
    $_SESSION['ots'] = $token->oauth_token_secret; 
    $twitterInfo= $twitterObj->get_accountVerify_credentials(); 
    echo '<pre>'; 
    print_r($twitterInfo->response); 
    } 

L'écho et print_r est d'afficher le retour de réponse de twitter.

Je reçois l'erreur suivante imprimée dans le tableau

Array ( [error] => expirées/invalide jeton [demande] => /account/verify_credentials.json)

Comment puis-je corriger cette erreur. Je ne sais pas pourquoi c'est invalide ou expiré, j'ai fermé le navigateur et j'ai recommencé mais la même erreur est apparue.

Merci pour toute aide que vous pouvez fournir.

+1

Vérifiez votre 'comsumer_key' et $' consumer_secret' de $ – Erik

+0

J'ai vérifié qu'ils semble être OK – Boardy

+0

pourquoi '//include("phpHandler/twitterLib/secret.php"); 'commenté? N'est-ce pas là que vous obtenez les '$ consumer_key' et' $ consumer_secret'? – Erik

Répondre

0

J'ai réussi à trouver le problème. Je crée toujours deux nouveaux objets EpiTwitter dans la fonction d'authentification.

1

Votre jeton d'accès sera invalide si un utilisateur rejette explicitement votre application de ses paramètres ou si un administrateur Twitter suspend votre application. Si votre demande est suspendue, il y aura une note sur votre page d'inscription indiquant qu'elle a été suspendue.

De nombreux utilisateurs font confiance à une application pour lire leurs informations, mais ne changent pas nécessairement leur nom ou ne publient pas de nouveaux statuts. Mise à jour des informations via l'API Twitter - que ce soit le nom, l'emplacement ou l'ajout d'un nouveau statut - nécessite et HTTP POST. Nous sommes restés avec la même restriction lors de la mise en œuvre de ce. Toute méthode d'API nécessitant un POST HTTP est considérée comme une méthode d'écriture et nécessite l'accès en écriture &. Quel que soit votre système de stockage, vous devrez commencer à stocker un oauth_token et un oauth_token_secret (collectivement, un «token d'accès») pour chaque utilisateur de votre application. Le fichier oauth_token_secret doit être stocké en toute sécurité. Souvenez-vous que vous accéderez à ces valeurs pour chaque demande authentifiée que votre application fera à l'API de Twitter, donc stockez-la d'une manière qui s'adapte à votre base d'utilisateurs. Lorsque vous utilisez OAuth, vous ne devriez plus stocker de mots de passe pour vos utilisateurs.

require '../tmhOAuth.php'; 

require '../tmhUtilities.php'; 

$tmhOAuth = new tmhOAuth(array(

    'consumer_key' => 'YOUR_CONSUMER_KEY', 

    'consumer_secret' => 'YOUR_CONSUMER_SECRET', 

    'user_token'  => 'AN_ACCESS_TOKEN', 

    'user_secret'  => 'AN_ACCESS_TOKEN_SECRET', 

)); 



// we're using a hardcoded image path here. You can easily replace this with an uploaded image-see images.php example) 

// 'image = "@{$_FILES['image']['tmp_name']};type={$_FILES['image']['type']};filename={$_FILES['image']['name']}", 



$image = "./dickvandyke.jpg'; 



$code = $tmhOAuth->request('POST', 'https://upload.twitter.com/1/statuses/update_with_media.json', 

    array(

    'media[]' => "@{$image}", 

    'status' => "Don't slip up" // Don't give up.. 

), 

    true, // use auth 

    true // multipart 

); 



if ($code == 200) { 

    tmhUtilities::pr(json_decode($tmhOAuth->response['response'])); 

} else { 

    tmhUtilities::pr($tmhOAuth->response['response']); 

} 
0

J'ai travaillé sur la nouvelle API Twitter. Cela fonctionne bien pour moi avec le code suivant que j'ai fait.

<?php 
require "vendor/autoload.php"; 
use Abraham\TwitterOAuth\TwitterOAuth; 
$consumer_key = "XXXXXXX"; 
$consumer_secret = "XXXXXXX"; 

$connection = new TwitterOAuth($consumer_key, $consumer_secret); 

$request_token= $connection->oauth('oauth/request_token', array('oauth_callback' => "http://callbackurlhere.com/callback.php")); 
$url = $connection->url("oauth/authorize", array("oauth_token" => $request_token['oauth_token'])); 

header('Location: '. $url); 
?> 

code callback.php ci-dessous pour obtenir le oauthToken permanent et l'enregistrer dans la base de données pour une utilisation ultérieure:

<?php 
require "vendor/autoload.php"; 

use Abraham\TwitterOAuth\TwitterOAuth; 

    // session_start(); 
    if(isset($_REQUEST['oauth_verifier'])){ 

    $oauth_access_token = $_REQUEST['oauth_token']; 
    $oauth_access_token_secret = $_REQUEST['oauth_verifier']; 
    $consumer_key = "XXXXXXXXXXXXXXXX"; 
    $consumer_secret = "XXXXXXXXXXXXXXX"; 
    $connection = new TwitterOAuth($consumer_key, $consumer_secret,$oauth_access_token , $oauth_access_token_secret); 

    $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $oauth_access_token_secret)); 
    var_dump($access_token); die("--success here--");// Obtain tokens and save it in database for further use. 
    } 

    ?>