2010-08-06 93 views
4

我正在開發一個應用程序,它需要用戶使用twitter和OAuth登錄。一切正常,感謝Zend_OAuth。問題是,Web應用程序也會對Twitter API進行一些調用,但是這些將在內部進行處理而不需要進行身份驗證。 Twitter Dev爲此提供了一個'access_token'和'access_token_secret'鍵(在這裏提到http://dev.twitter.com/pages/oauth_single_tokenZend OAuth與Twitter單一訪問令牌

問題是我不能讓Zend_OAuth和現有的訪問令牌一起玩。有沒有人可以幫助我的幾行代碼如何使用我現有的密鑰進行API調用,而不必將其重定向到Twitter的授權頁面?我知道這是可以做到的。

PS。如果可能,我不想使用dev.twitter.com中提到的外部庫 - Zend Framework提供的是什麼

謝謝!

回答

15

隨着ZF版本發佈在Twitter上要求1.10.8最少的代碼是:

$token = new Zend_Oauth_Token_Access; 
$token->setParams(array(
'oauth_token' => 'REPLACE_WITH_TOKEN', 
'oauth_token_secret' => 'REPLACE_WITH_TOKEN_SECRET' 
)); 

$twitter = new Zend_Service_Twitter(array(
'consumerKey' => 'REPLACE_WITH_CONSUMER_KEY', 
'consumerSecret' => 'REPLACE_WITH_CONSUMER_SECRET', 
'accessToken' => $token 
)); 

$response = $twitter->status->update('REPLACE WITH MESSAGE'); 

所有令牌和祕密可以訪問http://dev.twitter.com

+0

不錯的解決方案,簡潔得多 – 2011-05-09 17:53:02

1
$token = new Zend_Oauth_Token_Access(); 
$token->setToken('singletoken'); 
$token->setTokenSecret('singlesecret'); 
$consumer = new Zend_Oauth_Consumer(
array('requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 
'version' => '1.0', 
'signatureMethod' => 'HMAC-SHA1', 
'callbackUrl' => 'http://example.org/dummyurl', 
'requestTokenUrl' => 'http://twitter.com/oauth/request_token', 
'accessTokenUrl' => 'http://twitter.com/oauth/access_token', 
'userAuthorizationUrl' => 'http://twitter.com/oauth/authorize', 
'consumerKey' => 'yourconsumerkey', 
'ConsumerSecret' => 'yourconsumersecret', 
)); 

$twtr = new Zend_Service_Twitter(array('accessToken'=>$token), $consumer); 

應該這樣做。

4

重新生成從數據庫存儲的令牌和tokensecret組件(就像賈斯汀展示)的的access_token OBJ後,你可以,或者,這取決於你的Twitter需要,旁路Zend_Oauth_Consumer和Zend_Service_Twitter和使用可用的一個Zend_Http_Client通過Zend_Oauth_Token_Access。這非常適用於簡單的狀態發佈 - 這是什麼下面所示:

$token = new Zend_Oauth_Token_Access(); 
$token->setToken('singletoken'); 
$token->setTokenSecret('singlesecret'); 

$client = $token->getHttpClient(array('requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 
'version' => '1.0', 
'signatureMethod' => 'HMAC-SHA1', 
'callbackUrl' => 'http://example.org/dummyurl', 
'requestTokenUrl' => 'http://twitter.com/oauth/request_token', 
'accessTokenUrl' => 'http://twitter.com/oauth/access_token', 
'userAuthorizationUrl' => 'http://twitter.com/oauth/authorize', 
'consumerKey' => 'yourconsumerkey', 
'ConsumerSecret' => 'yourconsumersecret', 
)); 

$client->setUri('http://twitter.com/statuses/update.json'); 
$client->setMethod(Zend_Http_Client::POST); 
$client->setParameterPost('status', $_POST["tweet_text"]); 
$response = $client->request(); 

$data = Zend_Json::decode($response->getBody(), Zend_Json::TYPE_OBJECT); 

if($data->text) { /* success */ } 
+0

謝謝你們,你們的答案真的很有幫助! – remedix 2010-08-08 08:48:49

1

如果代碼示例不起作用,請嘗試將「ConsumerSecret」的大小寫更改爲「consumerSecret」。我花了幾個小時來解決這個問題。希望它可以節省您的時間。