忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/03/23 17:17 |
ZF1.10 Zend_Oauthその2

前回の続き

とりあえずZend_Oauthで、普通にOAuthログインを行ってみます。

ちなみにZend_Service_Twitterというのがあるのですが、こちらは使いません。
なにそれ。

やることは実はチュートリアルに全部書いてあります。

index.php

<?php
	//あ
	
	//require
		require_once('Zend/Oauth/Consumer.php');
	
	//セッション
		session_start();
	
	//OAuthオプション
	$zf_oauth_config = array(
		//twitterにログイン後戻ってくるURL
		'callbackUrl'     => 'http://localhost/callback.php',
		//リダイレクト先の情報
		'siteUrl'         => 'http://twitter.com/oauth',
		'requestTokenUrl' => 'https://twitter.com/oauth/request_token',
		'accessTokenUrl'  => 'https://twitter.com/oauth/access_token',
		'authorizeUrl'    => 'https://twitter.com/oauth/authorize',
		//Consumer keyとConsumer secret
		'consumerKey'     => '1234567890',
		'consumerSecret'  => '9876543210'
	);
	$zf_oauth = new Zend_Oauth_Consumer($zf_oauth_config);
	
	//リクエストトークンを保存しておく
		$zf_request_token = $zf_oauth->getRequestToken();
		$_SESSION['TWITTER_REQUEST_TOKEN'] = $zf_request_token;
	
	//リダイレクト実行
		$zf_oauth->redirect();

まずindex.phpでtwitterサイトへのリダイレクトを行います。
'callbackUrl'にtwitterサイトでの認証成功後にリダイレクトを行うURLを入れます。
'consumerKey'と'consumerSecret'には、前回作成したTwitterアプリのConsumer keyとConsumer secretを突っ込みます。
サンプルなので適当な数値が入ってますが実際は数十桁の英数文字列です。
リダイレクト先の情報は基本的に固定なので変える必要はないみたいです。

実行すると、Zend_Oauth_Consumer::getRequestToken()で認証用のトークンを取得できます。
これは認証後にPHPからtwitterにアクセスする際に必要になる情報なので、必ず保存しておきます。
チュートリアルではserialize()してから保存していますが、中身は単なる配列なので別にシリアライズする必要はありません。

最後にZend_Oauth_Consumer::redirect()で、twitterサイトにリダイレクトを行います。
この際リクエストに?oauth_token=**という形式の長いパラメータが付きます。
twitter側では、このパラメータが付いたリクエストにアカウント操作の許可を与えるかどうかをユーザに聞きます。

許可を与えると'callbackUrl'で指定したURLにリダイレクトで戻ってきます。
このときに?oauth_token=**&oauth_verifier=**という二種類のパラメータが返ってきます。
oauth_tokenはリクエストに与えられた文字列で、oauth_verifierはベリファイ用の文字列です。
この返り値を使ってZend_Oauth_Consumerで最終的な認証を行います。

callback.php
<?php
	
	//require
		require_once('Zend/Oauth/Consumer.php');
	
	//セッション
		session_start();
	
	//OAuthオプション
	$zf_oauth_config = array(
		//必要らしい
		'callbackUrl'     => 'http://localhost/callback.php',
		'siteUrl'         => 'http://twitter.com/oauth',
		//Consumer keyとConsumer secret
		'consumerKey'     => '1234567890',
		'consumerSecret'  => '9876543210'
	);
	$zf_oauth = new Zend_Oauth_Consumer($zf_oauth_config);
	
	//アクセストークンを取得
	$zf_access_token = $zf_oauth->getAccessToken(
		$_REQUEST
		,$_SESSION['TWITTER_REQUEST_TOKEN']
	);
	
	//アクセストークンを保存
	$_SESSION['TWITTER_ACCESS_TOKEN'] = $zf_access_token;
	//リクエストトークンはもはや不要
	$_SESSION['TWITTER_REQUEST_TOKEN'] = NULL;

アクセストークンを取得することができました。
今後twitterにアクセスする際、アクセストークンをくっつけて送信すると、twitter側ではそのリクエストは認証が行われたものだと判断して操作を許可します。


簡単に解説してみます。

まずindex.phpではコンシューマキー等からリクエストトークンを作成します。
twitterサイトに行く際にはリクエストトークンをくっつけて送信します。

twitterサイトで認証を行うと、リクエストトークンと共にベリファイコードが返ってきます。
callback.phpではベリファイコード等からアクセストークンを作成します。

このアクセストークンが、twitterで認証を行った証となります。

ここまでくれば後は簡単で、セッションに保存したアクセストークンを利用してtwitterの操作を行うことができます。

send.php
<?php
	
	//require
		require_once('Zend/Oauth/Consumer.php');
		require_once('Zend/Json.php');
	
	//セッション
		session_start();
	
	//OAuthオプション
	$zf_oauth_config = array(
		//必要らしい
		'callbackUrl'     => 'http://localhost/callback.php',
		'siteUrl'         => 'http://twitter.com/oauth',
		//Consumer keyとConsumer secret
		'consumerKey'     => '1234567890',
		'consumerSecret'  => '9876543210'
	);
	$zf_oauth = new Zend_Oauth_Consumer($zf_oauth_config);
	
	//アクセストークンを取得
		$zf_access_token = $_SESSION['TWITTER_ACCESS_TOKEN'];
	
	//twitterに投稿する
		//Zend_Oauth_Clientを取得
		$zf_client = $zf_access_token->getHttpClient($zf_oauth_config);
		//投稿先をセット
		$zf_client->setUri('http://twitter.com/statuses/update.json');
		$zf_client->setMethod(Zend_Http_Client::POST);
		//投稿内容をセット
		$zf_client->setParameterPost('status', 'テスト投稿');
		//リクエスト実行
		$response = $zf_client->request();
	
	//返り値を確認
		$data = Zend_Json::decode($response->getBody());
		$result = $response->getBody();
		if (isset($data->text)) {
		    $result = 'true';
		}

なんかあんまり簡単に見えませんね。
次回はZend_Service_Twitterでも使ってみましょう。

ちなみに公式サイトサンプルの11行目は
 $client = $token->getHttpClient($configuration);
ってなってますが正しくは
 $client = $token->getHttpClient($config);
ですな。

 

 

PR


2010/12/06 22:53 | Comments(0) | TrackBack(1) | PHP

トラックバック

トラックバックURL:
前回までZend_Oauthでtwitter認証を行いましたが、この仕組みはブラウザ経由でログインさせて云々しないといけません。 何故このような作りになっているかというとそれはOauthの目的そのものなのですが、前回のプログラムをよく見ると、プログラム自体には投稿を行うユーザのID、パスワードの情報が一切渡されていません。 ID、パスワードは直接twitterのサイトに入力します。 するとIDに紐付くAccessTokenおよびAccessTokenSecretというものが発行され、パスワ...
弱小PHPerの憂鬱 | 2011/01/21 21:52

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<シヴィライゼーションレボリューション 難易度天帝で制覇/文化/経済勝利 | HOME | 買ったものリスト 2010/12/05>>
忍者ブログ[PR]