2010-07-27 5 views
0

J'ai craqué oAuth et ai mon dossier de classe pour cela. Je suis à la dernière étape de affichant un tweet et tous les travaux sauf tous les mots sont joints avec un signe plus dans le tweet.Pourquoi y a-t-il des plus (+) dans mes tweets oAuth?

La modification de n'importe quoi entraîne la signature incorrecte et Twitter renvoie une erreur 401.

Alors, comment supprimer les plus? Afficher la fonction ci-dessous:

function post($token, $tokenSecret, $status) 
{ 
    // Default params 
    $params = array(
     "oauth_version" => "1.0", 
     "oauth_nonce" => time(), 
     "oauth_timestamp" => time(), 
     "oauth_consumer_key" => $this->key, 
     "oauth_signature_method" => "HMAC-SHA1", 
     "oauth_token" => $token, 
     "status" => $status 
    ); 
    uksort($params, 'strcmp'); 

    // convert params to string 
     foreach ($params as $k => $v) {$pairs[] = $this->_urlencode_rfc3986($k).'='.$this->_urlencode_rfc3986($v);} 
     $concatenatedParams = implode('&', $pairs); 

     // form base string (first key) 
     $baseString= "POST&".$this->_urlencode_rfc3986($this->request_statuses_url)."&".$this->_urlencode_rfc3986($concatenatedParams); 
     // form secret (second key) 
     $secret = $this->_urlencode_rfc3986($this->secret)."&".$this->_urlencode_rfc3986($tokenSecret); 
     // make signature 
     $sig = $this->_urlencode_rfc3986(base64_encode(hash_hmac('sha1', $baseString, $secret, TRUE))); 

    // BUILD URL 
     $url = $this->request_statuses_url; // twitter update url 
     $paramString = $concatenatedParams."&oauth_signature=".$sig; 

    // Send to cURL 
    $result = $this->_http($url, $paramString); 

    if($result['httpCode'] == '200'){ 

     // Return array 
     return $result; 
    } 
    else{ 

     // Error 
     show_error($result['httpCode'], $result['httpCode']); 
     return FALSE; 
    }  
} 
+0

Avez-vous encodé votre tweet avec des pourcentages d'échappement, de sorte que tous les caractères de cette chaîne "! * '();: @ & = + $, /?% # []" Sont transformés en quelque chose comme% 20? – lucius

+0

je ne suis pas sûr que je suis votre commentaire. Tout doit être codé en url. –

Répondre

0

Twitter ne supporte pas "+" comme échappatoire pour les espaces, ce qui pour autant que je sache est une violation de la norme.

Vous devez remplacer le + avec% 20.

+0

ouais - il y avait un problème avec url_encodeing. l'a réparé. Merci –

1

Est-ce que $ status est votre tweet? Jetez un oeil à la demande POST avant de le poster, mon estimation est _urlencode_rfc3986() convertit de sorte que vous obtenez "$ status = This + est + my + tweet" quand vous voulez "$ status = Ceci est mon tweet"

+0

oui c'est le cas, mais twitter nécessite que vous url_encode tous vos params et depuis vos params composent votre signature de base je ne peux pas les supprimer dans les champs de poste réels, car alors Twitter renvoie une erreur 401. Je ne le fais pas. Il n'y a pas de documentation là non plus. –