【问题标题】:Google Drive API: Error on OAuth2 tokenGoogle Drive API:OAuth2 令牌错误
【发布时间】:2013-01-08 01:37:28
【问题描述】:

我想创建一个使用 Google Drive 作为存储的 web 应用程序,我正在使用 Google API,但我遇到了身份验证问题。 我已选择服务帐户作为身份验证方法,但是当我尝试运行脚本时出现此错误:

发生错误:刷新 OAuth2 令牌时出错,消息:'{ “错误”:“invalid_grant”}'数组()

代码如下:

<?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;
}
?>

【问题讨论】:

  • 我认为这比使用 Google Drive 更容易 -> cloud.google.com/storage/docs/gsutil 但这只是我的意见。我没有时间浪费在不知从何而来的随机错误上。
  • FWIW 我在这里是因为我使用的 WordPress 插件(Google Drive 集成)有同样的错误。幸运的是,我可以把我的生意带到别处。 (谷歌在这里有一个品牌/营销问题。)这是专有技术的问题,你被锁定,然后你遇到独特的问题并成为某人的狗。

标签: google-api google-drive-api google-authentication google-api-php-client


【解决方案1】:

【讨论】:

  • 按照上面链接中的步骤授予您的客户 ID 访问您希望使用的 Google 云端硬盘范围的权限。
  • 是的,我按照说明进行操作。他们没有具体说明什么授予什么,它是一个通用问题的通用解决方案。顺便说一句,说明需要更新,因为一些措辞已经改变。
  • 您正在为您域中的所有用户授予应用访问给定范围的权限。
  • 好的,杰伊,但这不是说明书所说的。 "例如,如果您需要在域范围内访问 Google Drive API 和 Google Calendar API,请输入:googleapis.com/auth/drive, googleapis.com/auth/calendar"
  • 这里我不清楚你不清楚什么。您能澄清一下您要对服务帐户做什么吗?根据您的用例的具体情况开始一个新的 SO 问题可能是值得的......
猜你喜欢
  • 2015-04-09
  • 1970-01-01
  • 2021-12-12
  • 2014-05-24
  • 2013-02-21
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多