使用Google Calendar API批量插入事件遇403 Forbidden错误求助
排查Google Calendar API 403 Forbidden错误的实操思路
1. 确认令牌权限是否真的生效
- 别只看开发者控制台的权限设置,要验证实际获取的access_token权限范围。可以调用接口
https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=YOUR_TOKEN,返回的scope字段必须包含https://www.googleapis.com/auth/calendar,否则就是授权流程没拿到全权限。 - 如果用的是服务账号:要确认已开启域范围委派,且目标日历已共享给服务账号邮箱并授予编辑权限;如果是用户OAuth令牌,要确保用户自身对目标日历有编辑权限,且授权时确实给了应用编辑日历的权限。
2. 优先排查API限流问题
Google Calendar API有明确的配额限制(比如每分钟100次请求、每日10000次请求),1000条批量插入很容易触发限流——别以为限流只会返回429,部分场景下会返回403。
- 去Google Cloud控制台的「API和服务」→「用量」页面,查看是否有配额超标的记录。
- 给插入逻辑添加指数退避重试机制:比如第一次失败等待1秒,第二次2秒,第三次4秒,最多重试3-5次,避免短时间内集中发送请求。
3. 检查目标日历的权限设置
- 你要插入的收件人日历,是否真的允许当前授权账号编辑?比如共享日历是否只设置了「仅查看」权限,或者日历设为私有未开放给你的应用账号?
- 插入用户主日历时,要确认用户授权时没有选错权限(比如只给了查看日历的权限)。
4. 核对Excon请求的细节
- 确认请求方法为POST,请求URL格式正确:
https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events,其中calendarId填写收件人邮箱时别出现格式错误。 - 授权头格式必须是
Bearer {access_token},注意Bearer后面有空格,且access_token未过期、无拼写错误。 - 全天事件的JSON格式要合规:
start和end字段只能包含date字段(示例:{"start": {"date": "2024-05-20"}, "end": {"date": "2024-05-21"}}),别误用dateTime,格式错误也可能触发403。
5. 验证刷新令牌的有效性
- 刷新令牌并非永久有效:用户撤销应用授权、未添加
access_type=offline参数获取的令牌过期,都会导致刷新出的access_token无效。可以重新走授权流程获取新的刷新令牌测试。 - 注意获取刷新令牌时必须携带
access_type=offline参数,否则只能拿到短期有效的access_token,无法长期刷新。
6. 撤销SSL验证的错误设置
Excon.defaults[:ssl_verify_peer] = false是关闭SSL证书验证,和403权限问题无关,还会带来安全风险,建议立即改回默认的true。
内容的提问来源于stack exchange,提问作者Prajjwal Gupta
相关产品推荐
相关产品推荐

