mixiアプリ » 技術仕様(Graph API方式) » PC » はじめてのmixiアプリ » チュートリアル » 自分と友人の情報を表示(1)
自分と友人の情報を表示(1) - Graph API を利用するまで
Graph API を利用するまで
自分と友人の情報を表示してみましょう。
自分や友人の情報を取得するにはGraph API の People API を使用しますが、これにはいくつか準備が必要です。
ここでは Graph API を使用するまでに必要となる処理を見ていきます。
具体的には、次の実装が必要です。
- ユーザ認可
- アクセストークンの取得
ユーザ認可
ユーザ認可はチュートリアル用プログラムの user-auth.php で行っています。
user-auth.php
1 <?php 2 require_once('functions.php'); 3 require_once('config.php'); 4 5 ?> 6 <!DOCTYPE html> 7 <html> 8 <head> 9 <meta charset="UTF-8" /> 10 <title>はじめてのmixiアプリ</title> 11 <script type="text/javascript" charset="UTF-8" src="https://static.mixi.jp/js/application/connect.js"></script> 12 </head> 13 <body> 14 <div> 15 ユーザ認可 16 </div> 17 <div id="app" 18 data-consumer-key="<?=h( CONSUMER_KEY )?>" 19 data-relay-url="<?=h( RELAY_URL )?>" 20 data-state="<?=h( md5(session_id().FIXEDSALT) )?>" 21 ></div> 22 <script> 23 var app = document.getElementById('app'); 24 25 mixi.init({ 26 appId: app.dataset.consumerKey, 27 relayUrl: app.dataset.relayUrl 28 }); 29 mixi.auth({ 30 scope: "mixi_apps2 r_profile", 31 state: app.dataset.state 32 }); 33 </script> 34 </body> 35 </html>
ユーザ認可API mixi.auth() はJavaScript API で提供されているため、「JavaScript API 利用の準備」を実装する必要があります。詳細は 「JavaScript API 利用の準備」 をご参照ください。
user-auth.php では 11行、25-28行が「JavaScript API利用の準備」のコードにあたります。
29-32行 ユーザ認可API mixi.auth() を呼び出しています。ここでは認可画面の表示されないmixi_apps2, r_profile のみをスコープに指定しています。
20, 31行目 CSRF脆弱性を防ぐために、パラメータ state を利用してsession_id のチェックを行います。ここでは session_id と FIXEDSALT から生成したハッシュ値を設定しています。state に設定した値はリダイレクト先に渡されますので、そちらでこの値のチェックを行います。詳細は「ユーザ認可について」をご参照ください。
ユーザ認可処理が実行された後、 Partner Dashboard 「アプリ設定変更」画面の「リダイレクトURI 」に設定したページへリダイレクトされます。
アクセストークンの取得
チュートリアル用プログラムでは、ユーザ認可後のリダイレクトURIのページを redirect.php で作成しています。
redirect.php の中で、「アクセストークンの取得」の処理を行っています。プログラムを見ていきます。
redirect.php
1 <?php 2 require_once('functions.php'); 3 require_once('config.php'); 4 5 if($_GET['state'] != md5(session_id().FIXEDSALT)){ // session idをチェック 6 echo "session error"; 7 exit; 8 } 9 10 $url = 'https://secure.mixi-platform.com/2/token'; 11 12 $headers = array( 13 'Content-type: application/x-www-form-urlencoded', 14 ); 15 16 $params = array( 17 'grant_type' => 'authorization_code', 18 'client_id' => CONSUMER_KEY, 19 'client_secret' => CONSUMER_SECRET, 20 'code' => $_GET['code'], 21 'redirect_uri' => REDIRECT_URI, 22 ); 23 $params = http_build_query($params); 24 25 $ch = curl_init(); // init 26 curl_setopt($ch, CURLOPT_URL, $url); // URLをセット 27 curl_setopt($ch, CURLOPT_POST, true); // POST 28 curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // params 29 curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // header 30 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_exec()の結果を文字列で返す 31 $c = curl_exec($ch); // 実行 32 $c = json_decode($c, true); 33 curl_close($ch); // close 34 35 $_SESSION['access_token'] = $c['access_token']; 36 $_SESSION['refresh_token'] = $c['refresh_token']; 37 38 ?> 39 <!DOCTYPE html> 40 <html> 41 <head> 42 <meta charset="UTF-8" /> 43 <title>はじめてのmixiアプリ</title> 44 </head> 45 <body> 46 <div> 47 リダイレクトURI 48 </div> 49 <hr /> 50 <div> 51 ユーザ認可とAuthorization Codeの取得 52 </div> 53 <div> 54 code: <?=h( $_GET['code'] )?> 55 </div> 56 <div> 57 state: <?=h( $_GET['state'] )?> 58 </div> 59 <div> 60 <?=h( (isset($_GET['error'])) ? "error: {$_GET['error']}" : '' )?> 61 </div> 62 <hr /> 63 <div> 64 アクセストークンの取得 65 </div> 66 <div> 67 <pre><?=h( print_r($c, true) )?></pre> 68 </div> 69 <div> 70 <a href="start.php">top</a> 71 </div> 72 </body> 73 </html>
5-8行 CSRF脆弱性を防ぐため、パラメータ state に渡された session_id をチェックしています。
10行以下がアクセストークンの取得となります。アクセストークンの取得はAPIを使って行います。詳細は「リフレッシュトークン、アクセストークンの入手」をご参照ください。
10行 エンドポイントの設定。
12-14行 header の設定
16-33行 パラメータ設定を行い、curlを使ってリクエストしています。パラメータに設定している値は次の通りです。
18, 19行 Graph API のCONSUMER_KEY, CONSUMER_SECRET
20行 ユーザ認可で得られたauthorization code
21行 リダイレクトURI(このページのURI)
35-36行で、取得したアクセストークン、リフレッシュトークンをセッションに保存しています。
アクセストークンの有効期限は15分となります。リフレッシュトークンの有効期限は約90日となります。
ここでは簡単のためにセッションに保存していますが、本来はDB等へ保存し、アクセストークンの有効期限が切れた場合には、リフレッシュトークンからアクセストークンの再取得を行ってください。
画面から動作を見てみましょう。
TOPページの「ユーザ認可」から user-auth.php へ遷移できます。
「ユーザ認可」をクリック
ユーザ認可画面が一瞬だけ表示された後、リダイレクトURIへリダイレクトされます。
一瞬だけ表示される。
リダイレクトURI画面が、次のように表示されれば、ユーザ認可は成功です。
画面上段の code に表示されている文字列がAuthorization Code となります。
画面下段に表示される refresh_token がリフレッシュトークン、access_token がアクセストークンとなります。
これでアクセストークンが取得できました。
次のチュートリアルでは取得したアクセストークンを使って、自分と友人の情報を取得してみましょう。
前ページ スタートURLでの署名認証
次ページ 自分と友人の情報を表示(2)