Google APIをPHPウェブアプリケーションから呼び出す(OAuth2.0証明書) 第4回
今回は、作成済みのOAuth2.0証明書を使用して、PHPウェブアプリケーションからGoogle APIを呼び出します。
Google APIのドキュメントが親切に書かれていて、私でもGoogle APIを使うことができました。
事前準備
1.プロジェクトの作成
Google APIを使用するための設定(プロジェクトの作成 ・ 使用するAPIの設定) 第1回 - プログラミングノートの「1.プロジェクトを作成」をご覧ください。
2.使用するAPIの設定
Google APIを使用するための設定(プロジェクトの作成 ・ 使用するAPIの設定) 第1回 - プログラミングノートの「1.プロジェクトで使用するAPIを設定」をご覧ください。
3. OAuth2.0証明書の作成(認証情報の登録)
Google API Google APIを使用するための設定(認証情報の登録) 第2回 - プログラミングノートの「OAuth2.0クライアントID」にて、
アプリケーションの種類に「ウェブアプリケーション」を指定して、OAuth2.0証明書を作成しました。
4.クライアントライブラリのインストール
クライアントライブラリをインストールするために「Composer」を使います。
まず、Composerをインストールします。
1.php.iniで、openssl.dllを有効にします。
2.Composerをインストールするディレクトリに移動します。
3.コマンドプロンプトで下のコマンドを実行し、インストールします。
php -r "eval('?>'.file_get_contents('https: //getcomposer.org/installer'));"
4.コマンドプロンプトで下のコマンドを実行しcomposer.batをコピー作成します。
echo @php "%~dp0composer.phar" %* >composer.bat
5.Composerインストールディレクトリのパスを環境変数Pathに設定します。
次に、コマンドプロンプトで下のコマンドを実行し、クライアントライブラリをインストールします。
composer require google/apiclient:^2.0
Composer実行ディレクトリがPHPインストールディレクトリと異なる場合、PHPインストールディレクトのパスを環境変数Pathに設定しておく必要があります。
最後に、インストールすると作成されるvendor/autoload.phpを、PHPファイルで読み込みます。
例)require_once '../ vendor/autoload.php';
手順
1.クライアントオブジェクトを作成
2.OAuth2.0サーバーへユーザーをリダイレクト
3.OAuth2.0サーバーからの返信を処理
4.Google APIを呼び出す
1.クライアントオブジェクトを作成
クライアントオブジェクトを生成し、生成したクライアントオブジェクトに下の3点をセットします。
- OAuth2.0証明書を作成した時、ダウンロードしたjsonファイル
- アクセスをリクエストする範囲
- エンドポイント(OAuth2.0サーバ―からユーザーが転送されるページ)
(※サンプルコード)
Googleドライブへ読み取り専用でアクセス
$client = new Google_Client();
$client->setAuthConfig('client_secrets.json');
$client->addScope(Google_Service_Drive::Drive_METADATA_READONLY);
$client->setRedirectUri('http:// '.$_SERVER['HTTP_HOST'].'/oauth2callback.php');
<補足>
- 「3. エンドポイント(OAuth2.0サーバ―からユーザーが転送されるページ)」は、認証画面で登録した「リダイレクトURI」です。
- また、OAuth2.0証明書を作成した時ダウンロードしたjsonファイルには、「リダイレクトURI」が書かれていますので、認証情報の「リダイレクトURI」を修正した場合は、再度jsonファイルをダウンロードする必要があります。
2.OAuth2.0サーバーへユーザーをリダイレクト
(リダイレクト:自動的に別ページへ転送)
ユーザーデータにアクセスする必要がある場合、ユーザーをOAuth2.0サーバへリダイレクトします。リダイレクト後、OAuth2.0サーバーはユーザーを認証します。さらに、OAuth2.0サーバーはユーザーにユーザーデータへのアクセスの同意を確認します。
まずOAuth2.0サーバーへユーザーをリダイレクトするためのURLを作成し、次にユーザーをリダイレクトします。
(※サンプルコード)
$auth_url = $client->createAuthUrl();
header('Location:'.filter_var($auth_url, FILTER_SANITIZE_URL));
3.OAuth2.0サーバーからの返信を処理
OAuth2.0からの返信は「1.クライアントオブジェクトを作成」でsetRedirectUriメソッドによりセットしたURIに届きます。
ユーザーが同意した場合は、認可コードが送信され、ユーザーが同意しなかった場合は、エラーメッセージが送信されます。
▼同意してもらった場合
https:// oauth2.examle.com/auth?code=4/P7q・・・・7W91a-oMsCe
▼同意してもらわなかった場合
https:// ouath2.examle.com/auth?error=access_denied
まず認可コードをアクセストークンと交換し、次にアクセストークンを取得します。
(※サンプルコード)
$client->authenticate($_GET['code']);
$access_token=$client->getAccessToken();
4.Google APIを呼び出す
まず、アクセストークンをユーザーのセッションに保存するため、クライアントオブジェクトにアクセストークンをセットします。
次に、使用するAPIのコンストラクタにクライアントオブジェクトを指定し、サービスオブジェクトを作ります。
最後に、サービスオブジェクトのインタフェースを使って、APIサービスへ要求します。
(※サンプルコード)
$client->setAccessToken($access_token);
$drive_service = new Google_Service_Drive($client);
サービスオブジェクトのインタフェースを使う方法は、後日書きます。
※サンプルコード
上記すべてのサンプルコードは、Google Identity PlatformのUsing OAuth 2.0 for Web Server Applicationsから引用しました。
サンプルコードのライセンス:the Apace 2.0 License(htt://www.apache.org/licenses/LICENSES-2.0)
記事一覧
第1回 Google APIを使用するための設定(使用するAPIの選択)
第2回 Google APIを使用するための設定(認証情報の登録)
第3回 Google APIを使用するための設定(APIキーの作成)
第4回 Google APIをPHPウェブアプリケーションから呼び出す
第5回 Google APIをPHPウェブアプリケーションから呼び出す(サービスアカウント)
第6回 Google APIへの問い合わせ状況と割り当てを確認する方法
第7回 Google APIをPHPウェブアプリケーションから呼び出す(APIキー)
参照
◇ Google Identity Platform 「Using OAuth 2.0 for Web Server Applications」
https://developers.google.com/identity/protocols/OAuth2WebServer
◇ Composer https://getcomposer.org/
◇ GitHub - google/google-api-php-client: A PHP client library for accessing Google APIs