1

Googleドライブをストレージとして使用するWebアプリを作成したいのですが、Google APIで遊んでいますが、認証に問題があります。認証方法としてサービスアカウントを選択しましたが、スクリプトを実行しようとすると、次のエラーが発生しました。

エラーが発生しました:OAuth2トークンの更新中にエラーが発生しました。メッセージ:'{"error": "invalid_grant"}' Array()

コードは次のとおりです。

<?php
require_once 'api/Google_Client.php';
require_once 'api/contrib/Google_DriveService.php';
require_once "api/contrib/Google_Oauth2Service.php";
session_start();

$service = buildService();

$fileList = retrieveAllFiles($service);
print_r($fileList);

/**
 * Build and returns a Drive service object authorized with the service accounts.
 *
 * @return Google_DriveService service object.
 */
function buildService($userEmail) {

  $DRIVE_SCOPE = 'https://www.googleapis.com/auth/drive';
  $SERVICE_ACCOUNT_EMAIL = 'xxxapps.googleusercontent.com';
  $SERVICE_ACCOUNT_PKCS12_FILE_PATH = 'xxx-privatekey.p12';

  $key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
  $auth = new Google_AssertionCredentials(
      $SERVICE_ACCOUNT_EMAIL,
      array($DRIVE_SCOPE),
      $key);
  $auth->prn = $SERVICE_ACCOUNT_EMAIL;

  $client = new Google_Client();
  $client->setUseObjects(true);
  $client->setAssertionCredentials($auth);
  return new Google_DriveService($client);
}


/**
 * Retrieve a list of File resources.
 *
 * @param Google_DriveService $service Drive API service instance.
 * @return Array List of Google_DriveFile resources.
 */
function retrieveAllFiles($service) {
  $result = array();
  $pageToken = NULL;

  do {
    try {
      $parameters = array();
      if ($pageToken) {
        $parameters['pageToken'] = $pageToken;
      }
      $files = $service->files->listFiles($parameters);

      $result = array_merge($result, $files->getItems());
      $pageToken = $files->getNextPageToken();
    } catch (Exception $e) {
      print "An error occurred: " . $e->getMessage();
      $pageToken = NULL;
    }
  } while ($pageToken);
  return $result;
}
?>
4

1 に答える 1

2

ドメイン全体の権限をサービスアカウントのクライアントIDに委任することを覚えていますか?

于 2013-01-24T20:42:53.610 に答える