Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 谷歌日历服务客户端以404响应 目标_Php_Http Status Code 404_Google Calendar Api_Google Client - Fatal编程技术网

Php 谷歌日历服务客户端以404响应 目标

Php 谷歌日历服务客户端以404响应 目标,php,http-status-code-404,google-calendar-api,google-client,Php,Http Status Code 404,Google Calendar Api,Google Client,我正在尝试集成到我的公司网站,以便在某些事件上自动创建事件 这些事件将被添加到公司日历并显示给用户,因此我不需要用户进行身份验证,我不会在他们自己的日历上工作 我所做的 创建了一个OAuth 2.0服务帐户,如Google文档中所述 创建、下载并将凭据文件添加到我的项目中,并将其路径添加到环境变量GOOGLE_APPLICATION_credentials 遵循和。 以下是我的源代码的简短版本: $client = new Google_Client(); $client->setA

我正在尝试集成到我的公司网站,以便在某些事件上自动创建事件

这些事件将被添加到公司日历并显示给用户,因此我不需要用户进行身份验证,我不会在他们自己的日历上工作

我所做的
  • 创建了一个OAuth 2.0服务帐户,如Google文档中所述

  • 创建、下载并将凭据文件添加到我的项目中,并将其路径添加到环境变量
    GOOGLE_APPLICATION_credentials

  • 遵循和。
    以下是我的源代码的简短版本:

    $client = new Google_Client();
    $client->setApplicationName("XXX");
    $client->addScope(Google_Service_Calendar::CALENDAR); // "https://www.googleapis.com/auth/calendar"
    $client->useApplicationDefaultCredentials();
    
    $service = new Google_Service_Calendar($client);
    
    $event = new Google_Service_Calendar_Event(/* array with event data */);
    $calendarId = /* calendar id taken from calendar Settings and Sharing on calendar.google.com*/;
    
    $event      = $service->events->insert($calendarId, $event);
    
    与示例(第43:52行)相比,我没有手动检查凭据文件,而是直接检查
    useApplicationDefaultCredentials()

错误 我的代码中记录的错误为

[2020-10-19 14:29:19] local.ERROR: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}
 {"userId":2,"exception":"[object] (Google_Service_Exception(code: 404): {
 \"error\": {
  \"errors\": [
   {
    \"domain\": \"global\",
    \"reason\": \"notFound\",
    \"message\": \"Not Found\"
   }
  ],
  \"code\": 404,
  \"message\": \"Not Found\"
 }
}
 at /var/www/vendor/google/apiclient/src/Google/Http/REST.php:123)
[stacktrace]
它似乎调用了错误的api端点,因为
404
未找到页面的响应

日历ID
我想说清楚,这里是我拿日历id的地方

据我所知,服务帐户没有自己的日历,因此需要授予他们访问特定组织的权限才能创建/读取事件

如果这是针对内部应用程序(并且您是组织的管理员),则可以按照以下步骤授予您的服务帐户访问组织日历的权限:

然后,G套件域的超级管理员必须完成以下步骤:

  • 从您的G套件域,转到主菜单>安全>API控件
  • 在域范围的委派窗格中,选择管理域范围的委派。 单击添加新
  • 在“客户端ID”字段中,输入服务帐户的客户端ID。您可以在中找到服务帐户的客户端ID
  • 在OAuth范围(逗号分隔)字段中,输入应用程序应被授予访问权限的范围列表。例如,如果您的应用程序需要对Google Drive API和Google Calendar API进行全域完全访问,请输入:
    https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar
  • 单击“授权”
  • 您还需要按照以下步骤模拟下的特定用户,以便为有权访问相关日历的用户检索令牌

    如果这是一个打算由多个组织安装的应用程序,你应该考虑使用一个管理的OAuthService,比如(我在哪里工作)。Xkit特别具有一个抽象的功能,它将所有这些步骤(包括IT管理员的分步指南)从开发人员那里抽象出来,在一个API调用中为您提供一个工作访问令牌

    作为补充说明,您引用的服务帐户示例使用Books API中的公共数据,因此它不需要用户授权,只需将自己标识为应用程序。

    是的,我发现了,所以我回答了自己的问题,但方式不对,所以我自己的答案被否决并取消