2010-08-06 169 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”。我花了几个小时来解决这个问题。希望它可以节省您的时间。