使用PHP将数据添加到Google Spreadsheet

时间:2018-08-16 15:38:23

标签: php google-sheets

我正在尝试使用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']);
}

预先感谢您的帮助

1 个答案:

答案 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']);

试一试