2010-08-06 5 views
4

사용자가 트위터와 OAuth를 사용하여 로그인해야하는 곳에서 애플리케이션을 개발 중입니다. Zend_OAuth 덕분에 모든 것이 잘 작동합니다. 문제는 웹 앱이 트위터 API에 대한 호출을 일부 작성하지만 인증 없이도 내부적으로 처리된다는 것입니다. 트위터 Dev는이 목적을 위해 'access_token'및 'access_token_secret'키를 제공합니다 (여기에 언급 됨 http://dev.twitter.com/pages/oauth_single_token)Zend OAuth 트위터 싱글 액세스 토큰 사용

기존 액세스 토큰을 사용하여 Zend_OAuth를 훌륭하게 재생할 수없는 문제가 있습니다. 몇 줄의 코드로 도울 수있는 사람이 있습니까? Twitter의 승인 페이지로 리디렉션되지 않고 기존 키를 사용하여 API 호출을 수행하려면 어떻게해야합니까? 나는 그것이 끝날 수 있다는 것을 안다.

추신. 가능한 경우 dev.twitter.com에서 언급 한 것과 같은 외부 라이브러리를 사용하고 싶지 않습니다. 젠드 프레임 워크가 제공하는 것입니다.

고마워요!

답변

15

트위터에 게시하는 데 필요한 ZF 버전 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

멋진 솔루션, 훨씬 간결 –

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

해야 할 일. (저스틴 보였다대로)를 DB에 저장된 토큰 tokensecret 구성 요소에서 access_token과의 OBJ를 다시 생성 한 후

4

, 당신은 대안 트위터에 따라서는 필요 우회 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 */ } 
+0

두 사람의 대답은 정말로 도움이됩니다. – remedix

1

코드 샘플이 작동하지 않으면 "ConsumerSecret"의 대소 문자를 "consumerSecret"으로 변경해보십시오. 이것을 잡기까지 몇 시간이 걸렸습니다. 희망적으로 그것은 당신의 시간을 절약합니다.