以下メソッドを追加した。
・getRequestToken
・getAuthorizeURL
・getAccessToken
メソッド名は、HTTP_OAuth_Consumerと同じにした。
ただ、引数はちょっと違う。
example
前回と同じく、以下ソースを修正。
HTTP_OAuthを利用してTwitterのOAuth認証を行う @ php-tips
http://php-tips.com/php/2009/11/http_oauth%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6twitter%E3%81%AEoauth%E8%AA%8D%E8%A8%BC%E3%82%92%E8%A1%8C%E3%81%86
サービスプロバイダは、HTTP_OAuthProviderのサンプルを想定。
このソースは、HTTP_OAuthProviderのサンプルにも追加した。
<?php require_once('HTTP/OAuthConsumer.php'); session_start(); // provider url $provider_base = sprintf('http://%s%s', $_SERVER['HTTP_HOST'], dirname($_SERVER['SCRIPT_NAME'])); $provider_base = rtrim($provider_base, '/').'/'; $request_url = $provider_base.'3legged_request.php'; $authorize_url = $provider_base.'3legged_authorize.php'; $access_url = $provider_base.'3legged_access.php'; $resource_url = $provider_base.'3legged_resource.php'; // consumer url $callback_url = sprintf('http://%s%s', $_SERVER['HTTP_HOST'], $_SERVER['SCRIPT_NAME']); /* セッションのクリア */ if (@$_REQUEST['test'] === 'clear') { session_destroy(); session_start(); } $content = ''; try { $oauth = HTTP_OAuthConsumer::factory(); $oauth->setConsumer('testconsumer', 'testpass'); if (!isset($_SESSION['type'])) { $_SESSION['type'] = null; } // 2 認可をもらって帰ってきた if ($_SESSION['type']=='authorize' && isset($_GET['oauth_token'], $_GET['oauth_verifier'])) { // リクエストトークンをアクセストークンに交換 $oauth->setURL($access_url); $oauth->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $access = $oauth->getAccessToken($_GET['oauth_verifier']); // アクセストークンを保存 $_SESSION['type'] = 'access'; $_SESSION['oauth_token'] = $access['oauth_token']; $_SESSION['oauth_token_secret'] = $access['oauth_token_secret']; } // 3 保護されたリソースへアクセス if ($_SESSION['type']=='access') { // 保護されたリソースへリクエストを送る $oauth->setURL($resource_url); $oauth->setToken($_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); $res = $oauth->send(); // データを取得 $content = $res->getBody(); // 1 認可をもらいに飛ぶ } else { // プロバイダからリクエストトークンの取得 $oauth->setURL($request_url); $req = $oauth->getRequestToken($callback_url); // リクエストトークンをセッションに保存 $_SESSION['type'] = 'authorize'; $_SESSION['oauth_token'] = $req['oauth_token']; $_SESSION['oauth_token_secret'] = $req['oauth_token_secret']; // authorize urlを取得 $authorize_url = $oauth->getAuthorizeURL($authorize_url); // authorize urlのリンク作成 $content = "Click on the link to go to provider to authorize your account.<br />\n"; $content .= sprintf('<a href="%s">%s</a>', $authorize_url, $authorize_url); } } catch(Exception $e) { $content .= $e->getMessage(); } ?> <html> <head> <title>OAuth in PHP</title> </head> <body> <h2>Welcome to a OAuth PHP example.</h2> <p><a href='<?php echo $_SERVER['PHP_SELF']; ?>?test=clear'>clear sessions</a></p> <p><pre><?php print_r($content); ?><pre></p> </body> </html>
URL
/HTTP_OAuthProvider/trunk/example/consumer_http_oauthconsumer.php - リポジトリブラウザ - Openpear
http://openpear.org/repository/HTTP_OAuthProvider/trunk/example/consumer_http_oauthconsumer.php
HTTP_OAuthConsumer - Openpear
http://openpear.org/package/HTTP_OAuthConsumer
HTTP_OAuthProvider - Openpear
http://openpear.org/package/HTTP_OAuthProvider