У меня пару месяцев работал небольшой скрипт php, который мог создавать и обновлять события календаря Google через API Календаря Google.Он работал в течение 2 месяцев, а затем внезапно перестал работать, несмотря на то, что я не могу найти никаких изменений.
Код все еще работает, если я изменю calendarId на «основной» (который является единственным истинным календарем, который принадлежит учетной записи службы).Поэтому я знаю, что сам код работает с точки зрения создания события, он просто не работает для доступа к общим календарям для создания событий из этих календарей.Вот как я изначально настроил код и что я пробовал:
1) Я создал учетную запись службы и предоставил ей роль «Владелец».Затем я создал ключ.(Обратите внимание, что это учетная запись GSuite, в которой я включил «Включить делегирование по всему домену G Suite»).
2) Для каждого календаря, который мне нужно было управлять с помощью учетной записи, я зашел в настройки общего ресурса календаря ("Поделиться с определенными людьми ") и добавил учетную запись службы" электронная почта "с разрешением" Вносить изменения и управлять совместным использованием ".
3) Сценарий PHP также довольно прост и использует последнюю версию API Google.Клиентская библиотека 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,просмотрел много учебников и предложений на этом сайте, и все, что я пробовал, включая сброс учетной записи службы, полностью не решило проблему.