Google calendar api 无法使用服务帐户访问从API创建的新Google日历

Google calendar api 无法使用服务帐户访问从API创建的新Google日历,google-calendar-api,Google Calendar Api,我们使用谷歌日历API来创建日历,并代表用户进行管理 为此,我们使用如下ACL规则创建日历: $client=new Google_client(); $client->setApplicationName(应用程序名称); $client->setScopes(谷歌服务日历::日历); $client->setAuthConfig('/…/oauth_secret.json'); $client->setRedirectUri(重定向URI); $client->authenticate($_

我们使用谷歌日历API来创建日历,并代表用户进行管理

为此,我们使用如下ACL规则创建日历:

$client=new Google_client();
$client->setApplicationName(应用程序名称);
$client->setScopes(谷歌服务日历::日历);
$client->setAuthConfig('/…/oauth_secret.json');
$client->setRedirectUri(重定向URI);
$client->authenticate($_GET['code']);
$accessToken=$client->getAccessToken();
$client->setAccessToken($accessToken);
$service=新谷歌服务日历($client);
$calendar=新的Google_服务_calendar_calendar();
$calendar->setSummary($calendarName);
$calendar->setTimeZone(“欧洲/巴黎”);
$newCalendar=$service->calendars->insert($calendar);
$calendarId=$newCalendar->getId();
$rule=新的Google_服务_日历_AclRule();
$scope=new Google_Service_Calendar_AclRuleScope();
$scope->setType(“用户”);
$scope->setValue(“295093256…012ulkkk4oklusjh8…@developer.gserviceaccount.com”);
$rule->setScope($scope);
$rule->setRole(“所有者”);
$service->acl->insert($calendarId,$rule);
因此,我们尝试如下方式访问日历:

$client=new Google_client();
$client->setApplicationName(应用程序名称);
$client->setScopes(谷歌服务日历::日历);
$client->setAuthConfig('/…/private_key.json');
如果($client->isAccessTokenExpired())$client->refreshTokenWithAssertion();
$this->service=new Google\u service\u日历(客户端);
$calendar=$service->calendarList->get($calendarId);
直到几个月前,这还可以正常工作,但现在我们发现了这个错误:

google\u运行程序错误:{
“错误”:{
“错误”:[
{
“域”:“全局”,
“原因”:“未找到”,
“消息”:“未找到”
}
],
“代码”:404,
“消息”:“未找到”
}
}
它仍然适用于以前创建的日历,但不适用于新日历。我请求帮助,因为我找不到原因

注意:ACL是在新日历上正确创建的,如下所示:

有什么想法吗?

找到了

当你创建日历时,谷歌不再自动在用户的日历列表中创建条目

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

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


您是否已与服务帐户共享日历?我猜最后一张法语图片显示了这一点,但如果你能证实的话。你说新的是什么意思?你在使用域范围的委派吗?是的,我通过设置服务帐户的电子邮件地址(使用API,它会显示在谷歌日历上,如图所示)来共享它。它在几个月前就停止工作了,在此之前创建的日历仍然可以访问,它不仅找到我创建的新日历。是的,我选中了服务帐户的全域授权复选框。
$calendar = $service->calendars->get($calendarId);