[英]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.