mixiでoauthを使ってユーザ情報取得(PHP)
問題解決のメモです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | // セッション使うから開始させる session_start(); // アプリケーション設定 $mixiConsumerKey = "xxxxxxxxxx"; $mixiConsumerSecret = "xxxxxxxxxx"; // redirect URL設定 $mixiRedirectUrl = 'redirect_url'; // authorize URL設定 // stateに設定したものがそのままパラメーター(state=...)として返す // 取りたいユーザ情報の設定を参考URLに参照 $mixiAuthorizeUrl = "https://mixi.jp/connect_authorize.pl?client_id=" . $mixiConsumerKey . "&response_type=code&state=mixi&scope=取りたいユーザ情報"; // 一回目はmixiの認証URLにredirect if (!isset($_SESSION['mixi_state'])) { $_SESSION['mixi_state'] = 'redirected'; header("Location: " . $mixiAuthorizeUrl); exit; } else if ($_SESSION['mixi_state'] == 'redirected') { // codeをセッションに設定 if (!isset($_SESSION["mixi_code"])) { if (!empty($_REQUEST["code"])) { $_SESSION["mixi_code"] = $_REQUEST["code"]; } else { // ユーザが許可しないなら // エラー処理 } } // mixi側からaccess tokenを取得 $mixiAccessTokenUrl = "https://secure.mixi-platform.com/2/token"; $mixiAccessTokenParams = array( "grant_type" => "authorization_code", "client_id" => $mixiConsumerKey, "client_secret" => $mixiConsumerSecret, "code" => $_SESSION["mixi_code"], "redirect_uri" => 'アプリ設定で設定したredirect urlそのもの',//url_encodeが不要 ); $mixiAccessTokenParam = http_build_query($mixiAccessTokenParams); $ch = curl_init($mixiAccessTokenUrl); curl_setopt($ch,CURLOPT_POST, 1);// POSTでアクセス curl_setopt($ch,CURLOPT_POSTFIELDS, $mixiAccessTokenParam); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_ENCODING , "gzip");// 圧縮して通信する $mixi_response = curl_exec($ch); if (!$mixi_response) { $mixi_response = curl_error($ch); } curl_close($ch); $mixi_response = json_decode($mixi_response);// $mixi_responseがobject! // エラーが起きたら if (!is_object($mixi_response) || isset($mixi_response->error) || !isset($mixi_response->access_token)) { // エラー処理 } // access tokenを使ってユーザデータを取得 // fieldsを@allに指定し、取れる情報をすべて取得 $mixiPeopleApiUrl = "https://api.mixi-platform.com/2/people/@me/@self?oauth_token=" . $mixi_response->access_token . "&fields=@all"; // 取った情報をvar_dump var_dump(json_decode(file_get_contents($mixiPeopleApiUrl))); } else { // エラー処理 } |
参考URL
・http://developer.mixi.co.jp/connect/mixi_graph_api/api_auth/
・http://developer.mixi.co.jp/connect/mixi_graph_api/mixi_io_spec_top/people-api/#toc-1
Author Profile
スターフィールド編集部
SHARE