2012-10-01 6 views
14

Składnik Zend_Service_Twitter jest nadal przeznaczony dla Twitters API v1.0, który zostanie wycofany 5 marca 2013 r. Chciałem więc przygotować nową witrynę z interfejsem do Twitter API w wersji 1.1. Wszystko działa poprawnie z wersji 1.0 ale jeśli mogę zmienić adres URL z /1/ do /1.1/ nie jest on z kodu nagłówka HTTP 400 i komunikat o błędzie JSON: Bad Authentication data (kod: 215)Zend_Service_Twitter - Make API v1.1 ready

Aby wniosek i token dostępu mieszkaliśmy tak samo i działa już bez żadnych zmian, ale jeśli chcę zweryfikować poświadczenia jak ten pojawia się błąd opisałem powyżej:

// 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()); 

Zmieniłem kod verifyCredentials w Zend/Service/Twitter.php tym do:

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()); 
} 

Teraz dodałem przed return Zend_Json[...] tej linii:

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" 

Jak można zobaczyć oauth_consumer_key (i realm też) jest pusta. Czy to może być błąd? Jak mogę rozwiązać ten błąd (z powodu zaostrzonej nowej wersji interfejsu API?)? Czy byłoby dobrze ustawić w jakiś sposób oauth_consumer_key? Jeśli tak, jak mogę to zrobić?

Edit: Znalazłam też już raport o błędzie na trackerze emisyjnej Zend Framework: http://framework.zend.com/issues/browse/ZF-12409 (? Może zrobić upvote)

Odpowiedz

1

Podczas oczekiwania, aby rozwiązać ten problem w składniku Zend_Twitter_Service, można zrobić to obejście:

Musisz wysłać CustomerKey i customerSecret do 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

Dzisiaj mam ten sam problem - Zend Framework współpracuje z API 1.

I stworzył nową klasę jak

class Zend_Service_Twitter11 extends Zend_Service_Twitter 

i funkcji nadpisywania, co mi potrzeba.

statusUpdate 
statusReplies 

itp

+0

To nie jest bardzo opisowe nazwy klasy. A czy Zend nie napisałby tego w innej przestrzeni nazw? Rozumiem, że to po prostu poprawki, ale dobrze jest używać innej przestrzeni nazw, jeśli nadpisujesz klasę. – voidstate

+0

To tylko przykład. – yAnTar

9

z ZF 1.12.3 Rozwiązaniem jest przeniesienie consumerKey i consumerSecret w opcji oauthOptions nie directrly w opcjach.

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

Wielkie dzięki. Bardzo mi pomogło. –

+0

Istnieje również zmiana w wywołaniu funkcji aktualizacji statusu. "status" został zmieniony na 'statusy',' $ twitter-> statusy-> 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()