2012-10-01 40 views
14

El componente Zend_Service_Twitter sigue siendo para Twitters API v1.0, que estará en desuso el 5 de marzo de 2013. Así que quería hacer mi nuevo sitio web con la interacción de Twitter API v1.1 listo. Todo funciona bien con v1.0, pero si cambio la URL /1/-/1.1/ falla con el código de cabecera HTTP 400 y el mensaje de error JSON: Bad Authentication data (Código: 215)Zend_Service_Twitter - Make API v1.1 ready

para obtener el token de solicitud y el acceso se quedaron la misma y trabaja ya sin ningún cambio, pero si quiero para verificar las credenciales como este me sale el error que he descrito anteriormente:

// Take a look for the code here: http://framework.zend.com/manual/1.12/en/zend.oauth.introduction.html 
$accessToken = $twitterAuth->getAccessToken($_GET, unserialize($_SESSION['TWITTER_REQUEST_TOKEN'])); 


// I have a valid access token and now the problematic part 
$twitter = new Zend_Service_Twitter(array(
    'username' => $accessToken->getParam('screen_name'), 
    'accessToken' => $accessToken 
)); 
print_r($twitter->account->verifyCredentials()); 

he cambiado el código de VerifyCredentials en Zend/Service/Twitter.php de aquel al que:

public function accountVerifyCredentials() 
{ 
    $this->_init(); 
    $response = $this->_get('/1/account/verify_credentials.xml'); 
    return new Zend_Rest_Client_Result($response->getBody()); 
} 

// to 

public function accountVerifyCredentials() 
{ 
    $this->_init(); 
    $response = $this->_get('/1.1/account/verify_credentials.json'); 
    return Zend_Json::decode($response->getBody()); 
} 

Ahora añade antes de la return Zend_Json[...] esta línea:

print_r($this->_localHttpClient->getLastRequest()); 

// And I get this output of it: 

GET /1.1/account/verify_credentials.json HTTP/1.1 
Host: api.twitter.com 
Connection: close 
Accept-encoding: gzip, deflate 
User-Agent: Zend_Http_Client 
Accept-Charset: ISO-8859-1,utf-8 
Authorization: OAuth realm="",oauth_consumer_key="",oauth_nonce="91b6160db351060cdf4c774c78e2d0f2",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1349107209",oauth_version="1.0",oauth_token="hereismytoken",oauth_signature="hereisavalidsignature" 

Como se podía ver el oauth_consumer_key (y realm también) está vacía. ¿Podría ser ese el error? ¿Cómo podría resolver este error (debido a la nueva versión de la API más estricta?)? ¿Estaría bien establecer de alguna manera el oauth_consumer_key? Si es así, ¿cómo podría manejar eso?

Editar: también he encontrado ya un informe de error en el seguimiento de incidencias del Zend Framework: http://framework.zend.com/issues/browse/ZF-12409 (? Tal vez hacer un upvote)

Respuesta

1

Mientras espera para solucionar este problema en el componente Zend_Twitter_Service, puede hacerlo esta solución:

necesita enviar CustomerKey y customerSecret a Zend_Service_Twitter

$twitter = new Zend_Service_Twitter(array(
       'consumerKey' => $this->consumer_key, 
       'consumerSecret' => $this->consumer_secret, 
       'username' => $user->screenName, 
       'accessToken' => unserialize($user->token) 
)); 
0

Hoy tengo el mismo problema - Zend Framework trabaja con la API 1.

creé nueva clase como

class Zend_Service_Twitter11 extends Zend_Service_Twitter 

y funciones de anulación, lo que necesito.

statusUpdate 
statusReplies 

etc

+0

Eso no es un nombre de clase muy descriptivo. ¿Y no debería estar en un espacio de nombre diferente si Zend no lo escribió? Me doy cuenta de que solo se trata de ajustes, pero es una buena práctica usar un espacio de nombres diferente si anulas una clase. – voidstate

+0

Es solo un ejemplo. – yAnTar

9

con ZF 1.12.3 La solución consiste en pasar consumerKey y consumerSecret en la opción oauthOptions, no directrly en las opciones.

 $options = array(
      'username' => /*...*/, 
      'accessToken' => /*...*/, 
      'oauthOptions' => array(
       'consumerKey' => /*...*/, 
       'consumerSecret' => /*...*/, 
      ) 
     ); 
+0

Muchas gracias. Me ayudo mucho. –

+0

También hay un cambio en llamar a la función de actualización de estado. 'status' ha sido cambiado a' status', '$ twitter-> statuses-> update ('...')' –

0
$this->_session = new Zend_Session_Namespace('auth_twitter'); 
    $config = Zend_Registry::get('config')->twitter->toArray(); 
    $access_tokenSession = unserialize($this->_session->access_token); 



    $accessToken = new Zend_Oauth_Token_Access(); 
    $accessToken->setToken($access_tokenSession->oauth_token); 
    $accessToken->setTokenSecret($access_tokenSession->oauth_token_secret); 

    $temp = array(); 
    $temp['oauthOptions']['consumerKey'] = $config['consumerKey']; 
    $temp['oauthOptions']['consumerSecret'] = $config['consumerSecret']; 
    $temp['accessToken'] = $accessToken; 
    $temp['username'] = $access_tokenSession->screen_name; 


    $this->_twitter = new Zend_Service_Twitter($temp, null); 

    $this->_twitter->account->accountVerifyCredentials()->toValue()