2012-01-29 18 views
5

Ho provato a utilizzare la libreria OAUTH di Twitter di Matt Harris (https://github.com/themattharris/tmhOAuth) sostituendo i dati predefiniti con le mie chiavi e token, ma per qualche motivo Non riesco a ottenere un codice di risposta valido.Twitter OAUTH - restituisce il codice di risposta "0"

L'url che sto testando termina con una porta (8888), ma non sono sicuro che ciò abbia a che fare con esso. Sto tagliando il log di PHP e non ci sono errori.

$tweet_text = 'Hello world!'; 
print "Posting...\n"; 
$result = post_tweet($tweet_text); 
print "Response code: " . $result . "\n"; 

function post_tweet($tweet_text) { 

    require_once('tmhOAuth.php'); 

    $connection = new tmhOAuth(array(
    'consumer_key' => '(hidden)', 
    'consumer_secret' => '(hidden)', 
    'user_token'  => '(hidden)', 
    'user_secret'  => '(hidden)', 
)); 

    $connection->request('POST', 
    $connection->url('1/statuses/update'), 
    array('status' => $tweet_text)); 

    return $connection->response['code']; 
} 

Qualcuno ha qualche idea?

Molte grazie.

risposta

1

Se si confronta con il https://github.com/themattharris/tmhOAuth/blob/master/examples/tweet.php il codice potrebbe essere necessario cambiare per assomigliare:

$code=$connection->request('POST', ...); 
return $code; 

Tuttavia, guardando il codice sorgente, rivela due cose. Per prima cosa il tuo codice dovrebbe essere altrettanto buono, perché $this->response['code'] è impostato sul valore che viene restituito. Secondo, quella funzione (in realtà curlit()) può anche restituire nulla. Quando lo fa, response['code'] non è definito. (Sembrava una promettente libreria su Twitter fino a quando ho visto questo errore di progettazione.)

L'esplorazione anche oltre, sarebbe solo restituire void quando $this->config['prevent_request'] esiste ed è vero. Non lo stai facendo e abbiamo completato il cerchio per non essere in grado di spiegare il comportamento che vedi.

Quindi, il mio prossimo passo per la risoluzione dei problemi sarebbe quello di mettere error_reporting(E_ALL|E_NOTICE) nella parte superiore, e quindi controllare i log degli errori per ulteriori indizi. Esegui anche un print_r($connection->response) dopo la chiamata allo request() per vedere cos'altro hai in là.

14

Ho avuto questo problema ed è a causa di questo recente cambiamento nel dicembre 2011:

"CURLOPT_SSL_VERIFYPEER default true"

Se si dump $ connection-> risposta come Darren consiglia, si può essere visualizzato un errore come questo che ho avuto:

string (165) "certificato di impostazione errore di verificare posizioni:"

O verificare che il file del certificato cacert.pem sia a posto o disabilitare SSL_VERIFYPEER.

io sono pronto a scommettere che questo risolverà il problema (anche se non può essere la soluzione più sicura):

$connection = new tmhOAuth(array(
    'consumer_key'   => '(hidden)', 
    'consumer_secret'  => '(hidden)', 
    'user_token'   => '(hidden)', 
    'user_secret'   => '(hidden)', 
    'curl_ssl_verifypeer' => false 
)); 

Aggiornamento Febbraio 2015

Guardando indietro su questa risposta oggi , Mi rendo conto che consigliare alle persone di impostare curl_ssl_verifypeer su false non è una buona risposta (a questo punto non puoi più essere sicuro che stai parlando con Twitter, quindi in realtà è una risposta terribile). Invece, prendi l'altro consiglio che ho dato e assicurati che il file del certificato CA root (cacert.pem) appropriato sia a posto.

+0

Grazie mike, quella singola riga mi mancava nel mio file e finalmente funzionante :) –

1

Sembra che sia necessario assicurarsi di avere un certificato corrente.

According to TMH's git repo:

Versione 0.60 indurito la sicurezza della biblioteca e default curl_ssl_verifypeer su true. Poiché alcuni provider di hosting non forniscono il file root di certificazione più aggiornato, è ora incluso nel repository di TMH. Se la versione non è aggiornata OPPURE si preferisce scaricare da soli le radici del certificato, è possibile recuperarle da: http://curl.haxx.se/ca/cacert.pem

Prima di aggiornare la versione di tmhOAuth che si utilizza, assicurarsi di verificare che la gestione SSL funzioni sul server in uso. eseguendo lo script examples/verify_ssl.php.

Problemi correlati