1

PHPでマーケットプレイスアプリを開発しています。ドメイン管理者が自分のアプリを自分のドメインにインストールしたら、カレンダーとドライブのスコープに対する適切な承認を得て、私のアプリはドメイン上のすべてのユーザーのカレンダーとドライブにアクセスする必要があります (すべてのユーザーがアクセスを許可します)。

私は の例に従ってhttps://developers.google.com/google-apps/marketplace/tutorial_phpおり、チュートリアルの Zend_Gdata ライブラリを使用して、ログインしているユーザーの Google カレンダーの予定にアクセスできました。これまでのところ、素晴らしいです!

今、問題が発生しているユーザーのドライブとアプリが通信できるようにしようとしています。アプリ マニフェストで、私のアプリはhttps://www.googleapis.com/auth/drive、カレンダー スコープに加えて、ドライブ スコープ ( ) へのアクセスを要求します。ログインしているドメイン ユーザーのドライブにアクセスするために、PHP用の現在のGoogle API クライアント ライブラリを使用しようとしています。コードは次のようになります -

<?php

require_once 'common.php'; // has all the IDs, keys, secrets etc.
require_once 'google-api-php-client/src/Google_Client.php';
require_once 'google-api-php-client/src/contrib/Google_DriveService.php';

$client = new Google_Client();
$client->setClientId($OAUTH_2_CLIENT_ID);
$client->setClientSecret($OAUTH_2_CLIENT_SECRET);
$client->setDeveloperKey($OAUTH_2_DEVELOPER_KEY);
$client->setRedirectUri('http://dev.mydomain.com/g/display.php');
$client->setScopes(array('https://www.googleapis.com/auth/drive'));

$driveService = new Google_DriveService($client);
$files = $driveService->files->listFiles();

上記はこのエラーを生成します-

Fatal error: Uncaught exception 'Google_ServiceException' with message 
'Error calling GET https://www.googleapis.com/drive/v2/files?key={my_dev_key}: (401) Login Required' 
in /***/google-api-php-client/src/io/Google_REST.php:66 

200 応答を取得できないという事実は、認証を正しく行っていないか、間違った認証モードを使用しているか、またはそのようなものを使用していることを示しています。setDeveloperKey() が必要であることがわかりました。使用している値は、API コンソールで生成したサーバー アプリ (IP ロック付き) のキーです。これを正しく行っているかどうかはわかりません。

また、ファイルが必要なドメインユーザーをリクエストで識別する必要があると考えています。パラメータarray('xoauth_requestor_id' => $_SESSION['email'])を listFiles() 関数に渡そうとしましたが、別のエラーが発生しました。

私の質問:

  1. Google_Client() オブジェクトを正しく設定して、アプリがユーザーのドライブにアクセスできるようにするにはどうすればよいですか? setDeveloperKey() を使用する必要がありますか? もしそうなら、私が使用すべき値は何ですか?
  2. 現在ログインしているユーザーのメール アドレスを Google_DriveService() に渡して、そのユーザーのファイルのみを返すようにするにはどうすればよいですか?

ありがとう!

4

0 に答える 0