2012-10-12 3 views
1

J'utilise la bibliothèque oAuth d'Abraham Williams pour mettre à jour un statut. L'application ne dispose pas d'une interface utilisateur (autre que l'invite de Twitter pour les informations d'identification.) À la place, l'utilisateur entre une URL dans le navigateurSession expirant pour twitter oAuth

Lorsque l'URL est appelée, j'obtiens une erreur: "Impossible de publier le Tweet. : Raison: 1 "

J'ai inséré un code de test, et il semble que la session se perd entre les transitions: $ _SESSION ['tweetmsg'] est défini lors de l'appel initial dans index.php, mais le passage à connect.php arrive, il semble que si la session est perdue Toutes les idées

Voici le code source:.?

index.php

<?php 
include_once '../../winsinclude/tw_config.php'; 
require_once "../../winsinclude/twitteroauth.php"; 
require_once "../../winsinclude/OAuth.php"; 
session_start(); 
if (empty($_SESSION['access_token'])) { 
    $_SESSION['tweetmsg'] = create_tweet_text(); 
    print "<script>self.location='./connect.php');</script>"; 
} 

$connection = new TwitterOAuth(
    CONSUMER_KEY, 
    CONSUMER_SECRET, 
    $_SESSION['access_token']['oauth_token'], 
    $_SESSION['access_token']['oauth_token_secret'] 
); 

if (!isset($_SESSION['tweetmsg'])) { 
    exit('No tweet value in session or from form'); 
} 
$tweetmsg = $_SESSION['tweetmsg']; 
$result = $connection->post('statuses/update', array('status' => $tweetmsg)); 
unset($_SESSION['tweetmsg']); 
if (200 === $connection->http_code) { 
    echo 'Tweet Posted: '.$tweetmsg; 
} 
else { 
    echo 'Could not post Tweet. Error: '.$httpCode.' Reason: '. 
    session_destroy(); 
} 
function create_tweet_text() { 
    return 'this is a test'; 
} 

connect.php

?php 
session_start(); 
include_once '../../winsinclude/tw_config.php'; 
require_once "../../winsinclude/twitteroauth.php"; 
require_once "../../winsinclude/OAuth.php"; 

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); 
$request_token = $connection->getRequestToken(OAUTH_CALLBACK.'callback.php'); 

$_SESSION['oauth_token'] = $request_token['oauth_token']; 
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; 

$url = $connection->getAuthorizeURL($request_token); 
print "<script>self.location='$url';</script>"; 

callback.php

<?php 
session_start(); 
include_once '../../winsinclude/tw_config.php'; 
require_once "../../winsinclude/twitteroauth.php"; 
require_once "../../winsinclude/OAuth.php"; 

if (
    isset($_REQUEST['oauth_token']) 
    && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token'] 
) { 
    echo 'Session expired'; 
} 
else { 
    $connection = new TwitterOAuth(
    CONSUMER_KEY, 
    CONSUMER_SECRET, 
    $_SESSION['oauth_token'], 
    $_SESSION['oauth_token_secret'] 
); 
    $_SESSION['access_token'] = $connection->getAccessToken($_REQUEST['oauth_verifier']); 
    print "<script>self.location='index.php';</script>"; 
} 

Répondre

0

Récemment Twitter désactivé un certain nombre de http urls pour oAuth et les remplacer par des équivalents https. Si vous pouvez voir la chaîne URL http://twitter.com/oauth/request_token dans les inclusions, cela signifie que vous devez suivre https://dev.twitter.com/discussions/10803 et modifier tous les appels à https ...

+0

Si vous lisez le code source que j'ai posté, vous verrez que je n'appelle pas le API Twitter sans points de terminaison spécifiques, et que j'utilise la bibliothèque d'Abraham Williams, qui n'appelle pas les bibliothèques d'API sans l'utilisation d'un point de terminaison spécifique. – user1742322