无法添加参会者创建Google Calendar事件,G Suite全域授权无法启用
解决Google Calendar服务账号添加参会者时的403 forbiddenForServiceAccounts错误
错误原因
服务账号本身没有权限直接向参会者发送日历邀请,必须启用域范围委派(Domain-Wide Delegation of Authority),并以G Suite域内的用户身份进行操作,才能绕过这个限制。
正确配置G Suite域范围委派
确保你按照以下步骤完成配置(配置生效可能需要15-30分钟):
- 登录G Suite管理员后台,进入「安全」>「API控制」>「域范围委派」
- 点击「添加新的客户端ID」,填入你的服务账号客户端ID(可从
credentials.json的client_id字段获取) - 添加OAuth2权限范围:
https://www.googleapis.com/auth/calendar - 保存配置,等待权限生效
修改代码关键部分
你的代码缺少了模拟G Suite域内用户的步骤,同时修复路径拼写错误,修改后的代码如下:
<?php // 修复单引号缺失和路径分隔符问题 $credentials = 'credentials.json'; require __DIR__ . '/vendor/autoload.php'; $client = new Google_Client(); $client->setScopes(Google_Service_Calendar::CALENDAR); $client->setAuthConfig($credentials); // 关键:模拟G Suite域内的用户(替换为你的域内邮箱,比如admin@your-domain.com) $client->setSubject('your-domain-user@your-domain.com'); $service = new Google_Service_Calendar($client); $event = new Google_Service_Calendar_Event(array( 'summary' => 'Testing for g calender', 'location' => 'ABC', 'description' => 'A chance to hear more about Google\'s developer products.', 'start' => array( 'dateTime' => '2022-01-05T09:00:00-07:00', 'timeZone' => 'America/Los_Angeles', ), 'end' => array( 'dateTime' => '2022-01-05T17:00:00-07:00', // 修正原结束时间不合理的问题 'timeZone' => 'America/Los_Angeles', ), 'recurrence' => array( 'RRULE:FREQ=DAILY;COUNT=2' ), 'attendees' => array( array('email' => 'attendee1@gmail.com'), array('email' => 'attendee2@gmail.com') ), 'reminders' => array( 'useDefault' => FALSE, 'overrides' => array( array('method' => 'email', 'minutes' => 24 * 60), array('method' => 'popup', 'minutes' => 10), ), ), )); $calendarId = 'primary'; $event = $service->events->insert($calendarId, $event); printf('Event created: %s\n', $event->htmlLink);
额外检查项
- 确认模拟的域内用户拥有Google Calendar的编辑权限
- 检查G Suite管理员是否允许向外部邮箱发送邀请:进入Calendar设置>「共享权限」,确保允许外部用户访问并接收邀请
- 验证
credentials.json文件路径正确,且PHP进程有读取权限
内容的提问来源于stack exchange,提问作者tabyf5
相关产品推荐
相关产品推荐

