我有一个小型的php脚本,可以工作几个月,可以通过Google Calendar API创建和更新Google Calendar事件。它已经工作了2个月,然后突然停止工作,尽管我没有发现任何变化。
如果我将calendarId更改为“ primary”(这是服务帐户拥有的唯一真实日历),该代码仍然有效。因此,我知道代码本身在创建事件方面有效,只是无法访问共享日历以在这些日历上创建事件。这是我最初设置代码的方式以及尝试过的方法:
1)我创建了服务帐户并将其授予“所有者”角色。然后,我创建了密钥。 (请注意,这是我已启用“启用G Suite域范围委派”的GSuite帐户。)
2)对于需要使用该帐户管理的每个日历,我进入了日历共享设置(“与特定人员共享”),并添加了具有“进行更改并管理共享”权限的服务帐户“电子邮件”。
3)PHP脚本也是非常基本的,并使用最新版本的Google API PHP客户端库。它进行身份验证,然后可以创建一个事件(请注意,更改了一些详细信息,例如我的应用程序名称,以掩盖某些详细信息)。
require __DIR__ . '/vendor/autoload.php';
// Got the data and ready to authenticate
$client = new Google_Client();
$client->setApplicationName("MyAppName");
$client->setAuthConfig('credentials.json');
$client->setScopes([Google_Service_Calendar::CALENDAR_READONLY,Google_Service_Calendar::CALENDAR]);
$service = new Google_Service_Calendar($client);
// GATHER ALL PASSED IN DATA INTO VARIABLES
$calendarId = 'mycalendar@group.calendar.google.com';
$summary = "Test calendar entry";
$startDate = "2019-02-19";
$endDate = "2019-02-19";
$attendees = "user1@domain.com,user2@domain.com";
//Construct event array to send
$eventArray = array(
'summary' => $summary,
'start' => array(
'date' => $startDate,
'timeZone' => 'America/Chicago',
),
'end' => array(
'date' => $endDate,
'timeZone' => 'America/Chicago',
),
'guestsCanInviteOthers' => true,
'guestsCanModify' => true,
'guestsCanSeeOtherGuests' => true
);
//Only include attendees in event array if we find them
if ($data["attendees"]) {
// Attendees are present
$attendees = explode(",", $data["attendees"]);
$attendeesArray = array();
foreach ($attendees as $key => $value) {
$attendeesArray[$key]['email'] = $value;
};
//Now add to original event array
$eventArray["attendees"] = $attendeesArray;
}
//Create the event and return event id
$event = new Google_Service_Calendar_Event($eventArray);
$event = $service->events->insert($calendarId, $event);
$eventId = $event->id;
$createdDate = $event->created;
这可以验证OK,但是一旦您开始使用除“主要”以外的日历,就会出现错误:
Fatal error: Uncaught exception 'Google_Service_Exception' with message '{
"error": {
"errors": [
{
"domain": "global",
"reason": "notFound",
"message": "Not Found"
}
],
"code": 404,
"message": "Not Found"
}
}
我已经通过Google搜索,查看了本网站上的许多教程和建议,而我尝试过的所有事情(包括完全重置服务帐户)都无法解决问题。
答案 0 :(得分:0)
我不确定Google是否更改了它的工作方式,或者我的IT是否弄乱了设置,因为我知道这已经有一段时间了。但是,我确实找到了解决方法!
必须更改另一个设置,该设置只能由GSuite管理员设置。步骤如下:
在此处找到完整的详细信息-https://support.google.com/a/answer/60765?hl=en。