首页 > 解决方案 > Google Calendar API 服务帐户错误

问题描述

我收到这个错误

{ "error": 
     { "errors": 
         [
            { "domain": "calendar", "reason": "forbiddenForServiceAccounts", "message": "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority." } 
         ], 
         "code": 403,
         "message": "Service accounts cannot invite attendees without Domain-Wide Delegation of Authority."
      } 
}

已经关注了这个 https://developers.google.com/admin-sdk/directory/v1/guides/delegation

我正在使用这个库并在 laravel 5.7 上运行它:https ://github.com/spatie/laravel-google-calendar

有什么办法可以解决这个问题。请帮忙。

标签: phpgoogle-apigoogle-calendar-apigoogle-oauth

解决方案


以下是完成这项工作的步骤:

在您的服务帐户中启用域范围委派

1 - 为您的服务帐户提供日历范围

2 - 您的用户需要具有角色服务帐户令牌创建者

3 - 在您将模拟的帐户中创建一个日历

服务帐户没有日历,因此您必须创建自己的日历

创建谷歌客户端

  • 验证您的服务帐户。(我使用了 JSON 密钥,我不确定其他身份验证是否适用于此目的)

代码示例:(我使用了 PHP,但我假设其他语言非常相似,因此您可以将其用作指南)

请注意,使用一些电子邮件进行 IMPERSONALIZATION 是至关重要的。否则,403 错误将仍然存在,请使用它进行身份验证,有关详细信息,请参阅 Maksym Kalin 响应。

$google_client = new Google_Client();
$google_client->setAuthConfig($LOCATION_OF_JSON_KEY);
$google_client->setAccessType( 'offline' );
$google_client->setSubject('EmailToImpersonate@SomeAddress.com');
$google_client->setApplicationName("YourApplicationName");
$google_client->setScopes([\Google_Service_Calendar::CALENDAR, \Google_Service_Calendar::CALENDAR_EVENTS]);

与受邀者一起创建活动:) 并享受!

注意: 使用这种方法,您可以创建活动并邀请人们参加。请记住 G Suite https://support.google.com/a/answer/2905486的限制,因此如果您想创建许多活动,您将需要一个服务帐户池和一个日历池。


推荐阅读