You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP为Google Sheets添加新用户遇500错误求助

问题:PHP添加Google Sheets查看权限时出现500错误

需求是通过PHP实现将学生邮箱添加为Google Sheets的查看者,目前能正常获取表格数据,但添加权限时触发500 HTTP错误,代码如下:

require_once 'vendor/autoload.php';

// Set up the client object with your credentials
$client = new Google_Client();
$client->setAuthConfig('credentials.json');
$client->addScope(Google_Service_Sheets::SPREADSHEETS);

// Create a new instance of the Sheets API service
$service = new Google_Service_Sheets($client);

// Set the spreadsheet ID and range of cells to retrieve
$spreadsheet_id = 'MYSHEETS_ID';
$range = 'Sheet1!A1:C10';

// Create a new permission object for the reader
$permission = new Google_Service_Drive_Permission();
$permission->setType('user');
$permission->setRole('reader');
$permission->setEmailAddress('studentsample@gmail.com');

try {
  // Make the request to the API to add the new reader
  $response = $service->permissions->create(
      $spreadsheet_id, 
      $permission, 
      array('sendNotificationEmail' => false)
  );
  // Print out the response
  print_r($response);
} catch (Google_Service_Exception $exception) {
  // Handle any exceptions that may have occurred
  echo 'An error occurred: ' . $exception->getMessage();
}

核心问题:权限操作归属错误

你当前用Google_Service_Sheets实例调用permissions->create,但Google Sheets的权限管理属于Google Drive API的功能,而非Sheets API,这是触发500错误的根本原因。

修正步骤

1. 补充Drive API权限范围

在初始化Google Client时,添加Drive API的权限范围(推荐使用精细权限,避免过度授权):

$client->addScope(Google_Service_Drive::DRIVE_FILE);

2. 使用Drive Service实例处理权限

创建Google_Service_Drive实例,专门用于权限操作,原Sheets Service保留用于数据读写。

修正后的完整代码

require_once 'vendor/autoload.php';

// 初始化客户端
$client = new Google_Client();
$client->setAuthConfig('credentials.json');
// 同时添加Sheets数据访问和Drive文件权限管理的范围
$client->addScope(Google_Service_Sheets::SPREADSHEETS);
$client->addScope(Google_Service_Drive::DRIVE_FILE);

// 分别创建Sheets和Drive服务实例
$sheetsService = new Google_Service_Sheets($client);
$driveService = new Google_Service_Drive($client);

$spreadsheet_id = 'MYSHEETS_ID';

// 创建权限对象
$permission = new Google_Service_Drive_Permission();
$permission->setType('user');
$permission->setRole('reader');
$permission->setEmailAddress('studentsample@gmail.com');

try {
    // 使用Drive Service调用权限创建接口
    $response = $driveService->permissions->create(
        $spreadsheet_id, 
        $permission, 
        ['sendNotificationEmail' => false]
    );
    print_r($response);
} catch (Google_Service_Exception $exception) {
    echo '错误信息:' . $exception->getMessage();
} catch (Exception $e) {
    // 捕获网络、配置等非API异常
    echo '系统错误:' . $e->getMessage();
}

额外检查项

  • 确认credentials.json对应的服务账号已被授予目标表格的编辑权限(只有拥有编辑权限的账号才能添加查看者)
  • 检查目标邮箱为有效Google账号(Gmail或Google Workspace账号)
  • 确认Google Cloud控制台已启用Google Drive API(之前可能仅启用了Sheets API)

内容的提问来源于stack exchange,提问作者Maharlikan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 19:45:13