Yahoo! ID連携 PHP SDK ダウンロードして sample.php を動かすだけなのですが、そのままでは動作しないので、必ず1行追加する必要があります
<?php /** * The MIT License (MIT) * * Copyright (C) 2014 Yahoo Japan Corporation. All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ require("autoload.php"); use YConnect\Constant\OIDConnectDisplay; use YConnect\Constant\OIDConnectPrompt; use YConnect\Constant\OIDConnectScope; use YConnect\Constant\ResponseType; use YConnect\Credential\ClientCredential; use YConnect\YConnectClient; header( "Content-Type: text/html; Charset=utf-8" ); header( "pragma: no-cache" ); header( "Expires: Wed, 31 May 2000 14:59:58 GMT" ); header( "Cache-control: no-cache" ); // アプリケーションID, シークレット $client_id = ""; $client_secret = ""; // 各パラメータ初期化 $redirect_uri = "http://localhost/yconnect/sample.php"; // リクエストとコールバック間の検証用のランダムな文字列を指定してください $state = "44Oq44Ki5YWF44Gr5L+644Gv44Gq44KL77yB"; // リプレイアタック対策のランダムな文字列を指定してください $nonce = "5YOV44Go5aWR57SE44GX44GmSUTljqjjgavjgarjgaPjgabjgog="; $response_type = ResponseType::CODE_IDTOKEN; $scope = array( OIDConnectScope::OPENID, OIDConnectScope::PROFILE, OIDConnectScope::EMAIL, OIDConnectScope::ADDRESS ); $display = OIDConnectDisplay::DEFAULT_DISPLAY; $prompt = array( OIDConnectPrompt::DEFAULT_PROMPT ); // クレデンシャルインスタンス生成 $cred = new ClientCredential( $client_id, $client_secret ); // YConnectクライアントインスタンス生成 $client = new YConnectClient( $cred ); $client->disableSSLCheck(); // デバッグ用ログ出力 $client->enableDebugMode(); try { // Authorization Codeを取得 $code_result = $client->getAuthorizationCode( $state ); if( !$code_result ) { /***************************** Authorization Request *****************************/ // Authorizationエンドポイントにリクエスト $client->requestAuth( $redirect_uri, $state, $nonce, $response_type, $scope, $display, $prompt ); } else { /**************************** Access Token Request ****************************/ // Tokenエンドポイントにリクエスト $client->requestAccessToken( $redirect_uri, $code_result ); echo "<h1>Access Token Request</h1>"; // アクセストークン, リフレッシュトークン, IDトークンを取得 echo "ACCESS TOKEN : " . $client->getAccessToken() . "<br/><br/>"; echo "REFRESH TOKEN: " . $client->getRefreshToken() . "<br/><br/>"; echo "EXPIRATION : " . $client->getAccessTokenExpiration() . "<br/><br/>"; /***************************** Verification ID Token *****************************/ // IDトークンを検証 $client->verifyIdToken( $nonce ); echo "ID TOKEN: <br/>"; echo "<pre>" . print_r( $client->getIdToken(), true ) . "</pre>"; /************************ UserInfo Request ************************/ // UserInfoエンドポイントにリクエスト $client->requestUserInfo( $client->getAccessToken() ); echo "<h1>UserInfo Request</h1>"; echo "UserInfo: <br/>"; // UserInfo情報を取得 echo "<pre>" . print_r( $client->getUserInfo(), true ) . "</pre>"; } } catch ( ApiException $ae ) { // アクセストークンが有効期限切れであるかチェック if( $ae->invalidToken() ) { /************************************ Refresh Access Token Request ************************************/ try { // 保存していたリフレッシュトークンを指定してください $refresh_token = "STORED_REFRESH_TOKEN"; // Tokenエンドポイントにリクエストしてアクセストークンを更新 $client->refreshAccessToken( $refresh_token ); echo "<h1>Refresh Access Token Request</h1>"; echo "ACCESS TOKEN : " . $client->getAccessToken() . "<br/><br/>"; echo "EXPIRATION : " . $client->getAccessTokenExpiration(); } catch ( TokenException $te ) { // リフレッシュトークンが有効期限切れであるかチェック if( $te->invalidGrant() ) { // はじめのAuthorizationエンドポイントリクエストからやり直してください echo "<h1>Refresh Token has Expired</h1>"; } echo "<pre>" . print_r( $te, true ) . "</pre>"; } catch ( \Exception $e ) { echo "<pre>" . print_r( $e, true ) . "</pre>"; } } else if( $ae->invalidRequest() ) { echo "<h1>Invalid Request</h1>"; echo "<pre>" . print_r( $ae, true ) . "</pre>"; } else { echo "<h1>Other Error</h1>"; echo "<pre>" . print_r( $ae, true ) . "</pre>"; } } catch ( \Exception $e ) { echo "<pre>" . print_r( $e, true ) . "</pre>"; }
ヘッダー出力は、ユーザ情報が UTF-8 なので設定しています。 アプリケーションID, シークレットは、アプリケーションの管理から取得して下さい Yahoo! のログインボタンをクリックすると、最終的にはユーザ情報が表示されます。 1) Yahoo! のログインボタンをクリック 2) ログイン( ログイン済みでは表示されない ) 3) アプリケーション認証 4) ユーザ情報 補足情報 本来なら、ここから Yahoo! ボックスの API にアクセスしていけるはずなのですが、どうも現在はまともに動いていないようです。WEB で調べてもリリース当時( 2014/02 ) に2件ほどテストが成功したような記事がありましたが、現状全く動作したという情報がありません。自分でも、いろいろやってみましたが、無理でした。ドキュメントも中途半端にお茶を濁した感がありますので、チャレンジしないほうがいいです。
|
【APIの最新記事】
- WebRTC による WEBカメラ表示( 2018/11/15 ) : iPhone + Safari は iOS11 のみで確認
- PHP で Mastodon にアプリを登録して投稿する手順
- Google スプレッドシートの内容を JSON として localhost で取得する手順
- WebRTC による WEBカメラ表示を canvas にコピーして画像に変換し、サーバへアップロードする
- WebRTC による WEBカメラ表示
- Amazon API の 503エラー の対処について
- ドコモ デベロッパーサポートで API使いたいと思ってサインアップしようとしたら・・・・。法人情報は後から登録しましょう
- 手動で Facebook API の 60日間の アクセストークンを取得する
- Facebook Graph API Explorer でカスタムプライバシー設定をした投稿を行う
- C#(.NET) : Google Spreadsheets API version 3.0でGoogleスプレッドシートを参照
- Twitpic の画像URLを取得する API が変わっているようなのですが