我正在尝试使用php创建自动化脚本,该脚本将新的一行信息添加到我共享的google工作表中。我整个上午都在搜寻教程,试图找出答案,但是每种方法都不尽相同,而且似乎并不是我需要做的。本质上,此脚本将在我的网站上提交表单时触发。它将采用表格数据并将其放入我的Google工作表中。
我已经在我的项目下创建了一个服务帐户,该帐户存储在下载的json文件中。这是我现在拥有的脚本。它给我以下错误
{ "error": {
"code": 403,
"message": "The caller does not have permission",
"errors": [ {
"message": "The caller does not have permission",
"domain": "global",
"reason": "forbidden"
} ],
"status": "PERMISSION_DENIED"
}
,这是我正在运行的代码。 (是的,它不完整,因为我无法通过验证)
public function index()
{
$this->load->helper("url");
require APPPATH . 'third_party/GoogleAPI/vendor/autoload.php';
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . APPPATH . 'third_party/GoogleAPI/bdgsheets.json');
$client = new Google_Client;
$client->useApplicationDefaultCredentials();
$client->setApplicationName("Is this working");
$client->setScopes(['https://www.googleapis.com/auth/drive','https://spreadsheets.google.com/feeds']);
$client->setAccessType('offline');
if ($client->isAccessTokenExpired()) {
$client->refreshTokenWithAssertion();
}
$accessToken = $client->fetchAccessTokenWithAssertion()["access_token"];
$sheets = new Google_Service_Sheets($client);
$data = [];
$current_row = 2;
$spreadsheet_id = "{my spreadsheet id here}";
$range = 'A1:H';
$rows = $sheets->spreadsheets_values->get($spreadsheet_id, $range, ['majorDimension' => 'ROWS']);
}
预先感谢您的帮助
答案 0 :(得分:0)
添加创建访问令牌时您放置了正确的作用域。如果您使用了范围值
“ https://www.googleapis.com/auth/spreadsheets.readonly”代替
“ https://www.googleapis.com/auth/spreadsheets”您没有对Google表格的写权限。
如果您可以共享创建bdgsheets.json文件的代码段,则很容易理解您是否具有“写”权限。
另外,尝试更改这段代码
$ client-> setScopes(['https://www.googleapis.com/auth/drive','https://spreadsheets.google.com/feeds']);
到
$ client-> setScopes(['https://www.googleapis.com/auth/spreadsheets']);
试一试