繁体   English   中英

Zend OAuth使用twitter单一访问令牌

[英]Zend OAuth with twitter single access tokens

我正在开发一个应用程序,它要求用户使用twitter和OAuth登录。 Zend_OAuth,一切正常。 问题是Web应用程序也会调用twitter API,但这些将在内部处理而无需进行身份验证。 Twitter Dev为此目的提供了“access_token”和“access_token_secret”密钥(此处提到http://dev.twitter.com/pages/oauth_single_token

问题是我无法让Zend_OAuth与现有的访问令牌一起玩得很好。 是否有人可以帮助我使用现有密钥进行API调用,而无需重定向到Twitter的授权页面? 我知道可以做到。

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

谢谢!

使用ZF版本1.10.8,在Twitter上发布所需的最少代码是:

$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上注册您的应用程序后,可以访问所有令牌和机密

在从db-stored token和tokensecret组件重新生成access_token obj之后(就像Justin所示),您可以根据您的Twitter需求绕过Zend_Oauth_Consumer和Zend_Service_Twitter,并使用Zend_Oauth_Token_Access提供的Zend_Http_Client。 这适用于简单的状态发布 - 这就是下面显示的内容:

$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 */ }
$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);

应该这样做。

如果代码示例不起作用,请尝试将“ConsumerSecret”的大小写更改为“consumerSecret”。 我花了几个小时才赶上这个。 希望它可以节省您的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM