Google sheets API v4 创建 sheet 并邀请用户
Google sheets API v4 Create sheet and invite users
我正在使用服务帐户身份验证使用 Google 工作表 API 创建 google sheet。我想创建一个点差sheet 并以某种方式允许我的团队打开它。
$private_key = file_get_contents($rootDir . '/config/googleApiCredentials.p12');
$client_email = 'project-names@positive-water-134xxx.iam.gserviceaccount.com';
$scopes = implode(' ', ["https://www.googleapis.com/auth/drive"]);
$credentials = new \Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);
// tried once with additional constructor params:
// $privateKeyPassword = 'notasecret',
// $assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
// $sub = 'myMail@gmail.com
$this->googleClient = new \Google_Client();
$this->googleClient->setAssertionCredentials($credentials);
if ($this->googleClient->getAuth()->isAccessTokenExpired()) {
$this->googleClient->getAuth()->refreshTokenWithAssertion();
}
$service = new \Google_Service_Sheets($this->googleClient);
$newSheet = new \Google_Service_Sheets_Spreadsheet();
$newSheet->setSpreadsheetId('34534534'); // <- hardcoded for test
$response = $service->spreadsheets->create($newSheet);
print_r($response);
正在创建 sheet,我收到回复
[spreadsheetId] => 34534534
但是,我无法使用我的 google 帐户通过浏览器打开此文件,即使我在 [=26= 中添加为所有者、编辑、作者和 reader 也是如此] 的开发者控制台,在项目的权限中。浏览器说我未经授权,我可以联系管理员获取权限
有什么建议吗?有没有人管理过如何创建文档并为任何 "human" 提供访问权限?
服务帐户是虚拟用户。它有自己的驱动器帐户,它拥有在其帐户上创建的文件。服务帐户需要授予您的个人 google 驱动器帐户访问所述文件的权限。 (与其他用户一样与您分享)
Permissions: insert Inserts a permission for a file.
注意:您目前已通过身份验证,可以使用 Google 工作表 API 您将必须添加 google 驱动器 API(范围)到您的代码和 Google 开发人员控制台上的项目。无法通过 google 工作表 API 更改文件的权限。
是的,您将必须为您希望允许查看/编辑此文件的每个团队成员添加权限。
提示:当您添加 google 驱动器 API 时,尝试执行 files.list 在结果中查找 downloadUrl、alternateLink 和 embedLink。有时这些已填写,可用于共享仅对其他用户可见。
可以为域帐户授予权限:
private function createNewSheet($title)
{
$properties = new \Google_Service_Sheets_SpreadsheetProperties();
$properties->setTitle($title);
$newSheet = new \Google_Service_Sheets_Spreadsheet();
$newSheet->setProperties($properties);
$response = $this->sheetService->spreadsheets->create($newSheet);
$fileId = $response['spreadsheetId'];
$domainPermission = new \Google_Service_Drive_Permission([
'type' => 'domain',
'role' => 'writer',
'value' => 'myCompany.com' //eg user@myCompany.com
]);
$this->driveService->permissions->insert($fileId, $domainPermission);
return $response;
}
我正在使用服务帐户身份验证使用 Google 工作表 API 创建 google sheet。我想创建一个点差sheet 并以某种方式允许我的团队打开它。
$private_key = file_get_contents($rootDir . '/config/googleApiCredentials.p12');
$client_email = 'project-names@positive-water-134xxx.iam.gserviceaccount.com';
$scopes = implode(' ', ["https://www.googleapis.com/auth/drive"]);
$credentials = new \Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);
// tried once with additional constructor params:
// $privateKeyPassword = 'notasecret',
// $assertionType = 'http://oauth.net/grant_type/jwt/1.0/bearer',
// $sub = 'myMail@gmail.com
$this->googleClient = new \Google_Client();
$this->googleClient->setAssertionCredentials($credentials);
if ($this->googleClient->getAuth()->isAccessTokenExpired()) {
$this->googleClient->getAuth()->refreshTokenWithAssertion();
}
$service = new \Google_Service_Sheets($this->googleClient);
$newSheet = new \Google_Service_Sheets_Spreadsheet();
$newSheet->setSpreadsheetId('34534534'); // <- hardcoded for test
$response = $service->spreadsheets->create($newSheet);
print_r($response);
正在创建 sheet,我收到回复
[spreadsheetId] => 34534534
但是,我无法使用我的 google 帐户通过浏览器打开此文件,即使我在 [=26= 中添加为所有者、编辑、作者和 reader 也是如此] 的开发者控制台,在项目的权限中。浏览器说我未经授权,我可以联系管理员获取权限
有什么建议吗?有没有人管理过如何创建文档并为任何 "human" 提供访问权限?
服务帐户是虚拟用户。它有自己的驱动器帐户,它拥有在其帐户上创建的文件。服务帐户需要授予您的个人 google 驱动器帐户访问所述文件的权限。 (与其他用户一样与您分享)
Permissions: insert Inserts a permission for a file.
注意:您目前已通过身份验证,可以使用 Google 工作表 API 您将必须添加 google 驱动器 API(范围)到您的代码和 Google 开发人员控制台上的项目。无法通过 google 工作表 API 更改文件的权限。
是的,您将必须为您希望允许查看/编辑此文件的每个团队成员添加权限。
提示:当您添加 google 驱动器 API 时,尝试执行 files.list 在结果中查找 downloadUrl、alternateLink 和 embedLink。有时这些已填写,可用于共享仅对其他用户可见。
可以为域帐户授予权限:
private function createNewSheet($title)
{
$properties = new \Google_Service_Sheets_SpreadsheetProperties();
$properties->setTitle($title);
$newSheet = new \Google_Service_Sheets_Spreadsheet();
$newSheet->setProperties($properties);
$response = $this->sheetService->spreadsheets->create($newSheet);
$fileId = $response['spreadsheetId'];
$domainPermission = new \Google_Service_Drive_Permission([
'type' => 'domain',
'role' => 'writer',
'value' => 'myCompany.com' //eg user@myCompany.com
]);
$this->driveService->permissions->insert($fileId, $domainPermission);
return $response;
}