无法访问使用服务账户从 API 创建的新 Google 日历。

问题描述 投票:0回答:1

我们正在使用Google日历API来创建日历,并代表用户管理它们。

为此,我们创建了一个带有ACL规则的日历,如下所示。

$client = new Google_Client();
$client->setApplicationName(APPLICATION_NAME);
$client->setScopes(Google_Service_Calendar::CALENDAR);
$client->setAuthConfig('/.../oauth_secret.json');
$client->setRedirectUri(REDIRECT_URI);
$client->authenticate($_GET['code']);
$accessToken = $client->getAccessToken();
$client->setAccessToken($accessToken);
$service = new Google_Service_Calendar($client);

$calendar = new Google_Service_Calendar_Calendar();
$calendar->setSummary($calendarName);
$calendar->setTimeZone('Europe/Paris');
$newCalendar = $service->calendars->insert($calendar);
$calendarId = $newCalendar->getId();

$rule = new Google_Service_Calendar_AclRule();
$scope = new Google_Service_Calendar_AclRuleScope();
$scope->setType("user");
$scope->setValue("[email protected]");
$rule->setScope($scope);
$rule->setRole("owner");
$service->acl->insert($calendarId, $rule);

因此,我们试图访问日历,就像这样。

$client = new Google_Client();
$client->setApplicationName(APPLICATION_NAME);
$client->setScopes(Google_Service_Calendar::CALENDAR);
$client->setAuthConfig('/.../private_key.json');
if ($client->isAccessTokenExpired()) $client->refreshTokenWithAssertion();

$this->service = new Google_Service_Calendar(client);

$calendar = $service->calendarList->get($calendarId);

直到几个月前,这样做还能完美地工作, 但现在我们得到了这个错误。

google_runner error: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found"
   }
  ],
  "code": 404,
  "message": "Not Found"
 }
}

它仍然适用于以前创建的日历,但不是新的。我请求帮助,因为我找不到原因。

请注意,在新的日历上正确创建了ACL,你可以在这里看到。

enter image description here

有什么办法吗?

google-calendar-api
1个回答
1
投票

找到了!

当你创建一个日历时,Google不会再自动为用户的日历列表创建一个条目。

要检查日历是否存在,我只需要替换。

$calendar = $service->calendarList->get($calendarId);

替换为

$calendar = $service->calendars->get($calendarId);
© www.soinside.com 2019 - 2024. All rights reserved.