【问题标题】:Service Account for google sheets returns not found未找到 Google 表格返回的服务帐户
【发布时间】:2019-03-18 01:26:55
【问题描述】:

我正在尝试使用服务帐户读取电子表格(我无法使用有效的 OAuth,因为该过程将在服务器上运行以定​​期检查工作表数据)

我尝试了几种方法。如果我按照使用 oauth 的示例进行操作,我可以看到工作表值。但是,我需要在后台没有任何 GUI 的情况下运行脚本。

我找到了这个教程https://github.com/juampynr/google-spreadsheet-reader 我创建了一个项目、服务帐户、添加了查看者角色,并与服务帐户电子邮件共享了电子表格。生成了密钥。 似乎测试程序可以连接到 google 服务,但在它请求电子表格的那一刻,最终结果是“404 not found”。

require 'vendor/autoload.php';

$service_account_file = '/secrets/readsheetmar2019-08b737d1c1cb._portfolio_test.json';


$spreadsheet_id = '1TAWybckPrnWlQxBZh0ScDsFOvftwi2dvTBNGarSdY30';

$spreadsheet_range = '';

putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $service_account_file);
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Sheets::SPREADSHEETS_READONLY);
$client->fetchAccessTokenWithAssertion();
$service = new Google_Service_Sheets($client);

//added by me
if ($client->isAccessTokenExpired()) {
  print "expired\n";
}else{
  print "not expired\n";
}

$result = $service->spreadsheets_values->get($spreadsheet_id, $spreadsheet_range);
var_dump($result->getValues());

错误:PHP 致命错误:未捕获的异常“Google_Service_Exception”和消息“ 错误 404(未找到)!!1

【问题讨论】:

  • 您是否检查过您的文件是否存在与 id 相同的文件?
  • 是的。如果我使用 oauth 示例,我可以访问相同的文件。我可以使用链接查看文件。问题是当我使用服务帐户时,它返回“未找到”。可能这是一些权限问题,但我不知道如何解决它。
  • 解决方案是确保 $spreadsheet_range = '';设置了有效的选项卡名称

标签: service google-sheets google-sheets-api google-oauth service-accounts


【解决方案1】:
  • 当使用 OAuth2 检索到的访问令牌时,$spreadsheet_id = '1TAWybckPrnWlQxBZh0ScDsFOvftwi2dvTBNGarSdY30'; 的电子表格可以检索到值。
  • 使用Service Account检索到的访问令牌时,返回Error 404 (Not Found)!!1

如果我的理解是正确的,请确认以下几点。

确认点:

  1. 作为测试运行,请设置范围$spreadsheet_range = '';
    • 例如,$spreadsheet_range = 'Sheet1'
  2. 如果返回The caller does not have permission的错误信息,请确认如下。
    • 1TAWybckPrnWlQxBZh0ScDsFOvftwi2dvTBNGarSdY30 的电子表格是否正在共享服务帐户的电子邮件。
    • 如果您没有将服务帐户共享到电子表格,请将readsheetmar2019-08b737d1c1cb._portfolio_test.json 文件中的client_email 的电子邮件共享给您要访问的电子表格。
  3. 如果返回Google Sheets API has not been used in project ### before or it is disabled.的错误信息,请开启Sheets API。

如果这不能解决您的问题,我深表歉意。

【讨论】:

  • 非常感谢。缺少的部分是它需要一个工作表/选项卡名称。温,我确实迈出了你的第一步,它突然像一个魅力一样起作用。我想我以前尝试过,但一开始可能没有正确地做到这一点。
  • @Phil 博士感谢您的回复。很高兴您的问题得到解决。
猜你喜欢
  • 2019-02-28
  • 2018-10-03
  • 1970-01-01
  • 2022-06-30
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-22
相关资源
最近更新 更多