2012-10-01 20 views
14

Zend_Service_TwitterコンポーネントはまだTwitters API v1.0用ですが、2013年3月5日に非推奨になる予定です。Twitter APIの相互作用v1.1で新しいウェブサイトを作りたかったのです。 すべてはv1.0のと正常に動作しますが、私は/1/から/1.1/にURLを変更した場合には、HTTPヘッダコード400とJSONのエラーメッセージで失敗します。Bad Authentication data(コード:215)Zend_Service_Twitter - API v1.1の準備完了

要求とアクセストークンが滞在を取得するには同じとは 、何も変更せずに、すでに動作しますが、私はエラーが私が上記の取得このような資格情報を確認したい場合:私はそれにそのからZend/Service/Twitter.phpにverifyCredentialsのコードを変更し

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

あなたは(余りにと realmoauth_consumer_keyが空で見ることができたよう

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" 

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

は、今私はreturn Zend_Json[...]前にこの行を追加しました。それはエラーでしょうか?このエラーを解決するにはどうすればよいですか(より厳しい新しいAPIバージョンのために)?どういうわけかoauth_consumer_keyを設定しても問題ありませんか?はいの場合、どうすればそれを管理できますか?

編集: 私もすでにZend Frameworkのの問題追跡のバグレポートが見つかりました: http://framework.zend.com/issues/browse/ZF-12409を(多分upvoteしていますか?)

答えて

1

あなたはZend_Twitter_Serviceコンポーネントでこの問題を解決するために待っている間、あなたが行うことができますこの回避策:

あなたはZend_Service_Twitter

$twitter = new Zend_Service_Twitter(array(
       'consumerKey' => $this->consumer_key, 
       'consumerSecret' => $this->consumer_secret, 
       'username' => $user->screenName, 
       'accessToken' => unserialize($user->token) 
)); 
customerKeycustomerSecretを送信する必要があります
0

今日、私は同じ問題を抱えている - Zend Frameworkには、私は私が必要

class Zend_Service_Twitter11 extends Zend_Service_Twitter 

そして、オーバーライド機能、のような新しいクラスを作成したAPI 1.

で動作します。 ZF 1.12.3と

statusUpdate 
statusReplies 

など

+0

。 Zendがそれを書いていないと、それは別の名前空間にあるべきではありませんか?私はそれがちょうど微妙なことであることを認識していますが、クラスをオーバーライドする場合は、別の名前空間を使用することをお勧めします。 – voidstate

+0

これはほんの一例です。 – yAnTar

9

この問題を回避するには、オプションでdirectrlyない、oauthOptionsオプションでconsumerKeyとconsumerSecretを渡すことです。非常にわかりやすいクラス名ではありません

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

ありがとうございました。私を助けてくれました。 –

+0

ステータス更新機能の呼び出しに変更もあります。 'status'が' 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() 
関連する問題