Google Spreadsheet API-访问使用服务帐户创建的电子表格

时间:2018-11-09 11:38:19

标签: google-sheets google-api google-drive-api google-oauth

我在laravel应用中创建了与google电子表格API连接的服务提供商,并且能够创建新的电子表格,编辑现有的电子表格(当然具有正确的共享权限)等等。

问题是我提供了我的服务帐户的json凭据密钥,因此正在创建的电子表格由该秘密邮件地址拥有,因此在创建后-当我尝试访问电子表格时会获得一个ID它为我提供了“请求访问权”页面,当我尝试请求访问自己的电子邮件(我也将自己定义为项目的“所有者”)时,我会通过邮件获得这些交付状态通知-

  

您的消息未发送给   xxxxxx@yyyyyy-1x3x71x4x27x4.iam.gserviceaccount.com,因为该域   找不到admanager-1x3x71x4x27x4.iam.gserviceaccount.com。   检查拼写错误或不必要的空格,然后重试。

很显然,它正在尝试将我(xxxx@gmail.com)的电子邮件发送到我的服务帐户电子邮件,以请求访问此特定电子表格,当然,该地址实际上并不存在。我觉得我一开始就做错了。.

GoogleServiceProvider.php-

class GoogleServiceProvider extends ServiceProvider
{

/**
 * Register services.
 *
 * @return void
 */
public function register()
{

    $this->app->singleton('google_spreadsheet_client', function ($app) {
        // we will instantiate the Google Spread Sheet Client once in this function
        $client = new Google_Client();
        $client->setApplicationName('xxxxx');
        $client->setScopes(Google_Service_Sheets::SPREADSHEETS);
        $client->setAuthConfig('xxxxxx-1xyxyxyxyxyxy-221ca2fc3123.json');
        $google_service_sheets = new Google_Service_Sheets($client);
        return $google_service_sheets;
    });
}

SpreadsheetController.php

class SpreadsheetsController extends Controller {

public function create() {
    $service = resolve('google_spreadsheet_client');
    $spreadsheet = new \Google_Service_Sheets_Spreadsheet([
        'properties' => [
            'title' => 'test'
        ]
    ]);
    $spreadsheet = $service->spreadsheets->create($spreadsheet, [
        'fields' => 'spreadsheetId'
    ]);
    printf("Spreadsheet ID: %s\n", $spreadsheet->spreadsheetId);
   }
}

就像我说的那样-我确实收到了一个看起来像实际电子表格ID的字符串的响应,但是由于某种原因无法使用我自己的电子邮件进行访问。

0 个答案:

没有答案