Google 日历 api 推送通知:401 - 未经授权的 WebHook 回调通道

Nav*_*oti 2 google-calendar-api push-notification

该问题的任何解决方案。这似乎不起作用

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "push.webhookUrlUnauthorized",
    "message": "Unauthorized WebHook callback channel: https://xxxxx"
   }
  ],
  "code": 401,
  "message": "Unauthorized WebHook callback channel: https://xxxxx"
 }
}
Run Code Online (Sandbox Code Playgroud)

无论如何要解决这个问题

Fer*_*gal 5

推送通知要求您已验证域所有权,因此无法在 API Explorer 中创建,因为它不提供将请求与您已验证所有权的项目相关联的方法。如果您使用项目凭据,这可以在 OAuth Playground 中完成,详情如下:

  • 配置API项目:

    1. https://console.developers.google.com/project/访问您的 API 项目。
    2. 确保您已根据https://developers.google.com/admin-sdk/directory/v1/guides/push#registering-your-domain上的说明注册了网站的 HTTPS 版本。
    3. 从“产品和服务”菜单(左上角的三条水平线)中,选择“API 管理器”,然后选择“启用的 API”选项卡,并确保启用了相应的 API。
    4. 选择“凭据”,然后从“添加凭据”下拉列表中选择“Oauth 客户端 ID”。
    5. 如果之前未配置,系统会提示您配置同意屏幕,因此请单击“配置同意屏幕”。如果是这样,请输入您的电子邮件地址、产品名称,然后单击“保存”。
    6. 选择“Web 应用程序”,然后输入客户端 ID 的名称。
    7. 在“Authorized Javascript Origins”下输入“ https://developers.google.com”
    8. 在“授权的重定向 URI”下,输入“ https://developers.google.com/oauthplayground ”。
    9. 单击“创建客户端 ID”。
  • 配置 OAuth Playground:

    1. 导航到https://developers.google.com/oauthplayground/
    2. 单击右上角的“OAuth 2.0 配置”(齿轮图标)。
    3. 选中“使用您自己的 OAuth 凭据”。
    4. 将 API 项目“凭据”页面中的“客户端 ID”粘贴到“OAuth 客户端 ID”。
    5. 将 API 项目“凭据”页面中的“客户端密码”粘贴到“OAuth 客户端密码”中。
    6. 单击“关闭”。
  • 授权 API 请求:

    1. 在“输入您自己的范围”中输入https://www.googleapis.com/auth/admin.directory.user
    2. 单击“授权 API”。
    3. 系统会提示您允许 API 访问您的域,因此请单击“允许访问”。
    4. 您将看到响应“HTTP/1.1 302 Found”。单击“交换令牌的授权代码”。
    5. 您应该看到“HTTP/1.1 200 OK”。稍后页面将下拉到下一部分。
    6. 选择 POST 作为“HTTP 方法”。
    7. 单击“输入请求正文”,然后输入您的请求,例如:

      { "id": "c887ce64-adc8-4007-952c-a172c376b30d", "type": "web_hook", "address": "https://example.com/watch" }

    8. 完成后点击“关闭”。

    9. 输入要监控的资源的 URI,将 {calendarId} 替换为适当的日历 ID,例如: https://www.googleapis.com/calendar/v3/calendars/user@example.com/events/watch
    10. 点击“发送请求”。

    11. 您应该会收到类似于以下内容的回复:

      { "resourceId": "DmuNd7MI-w7qwW1FxDNf_pdqk7Y", "kind": "api#channel", "expiration": "1507327087000", "id": "c887ce64-adc8-4007-952c-a172c376b30d", "resourceUri": "https://www.googleapis.com/calendar/v3/calendars/user@example.com/events?maxResults=250&alt=json" }

注意:其他 API 的推送通知,例如Directory API,可能有额外的参数。有关详细信息,请查看相关的参考文档。