добавление события в календарь Google с помощью php - PullRequest
0 голосов
/ 02 июня 2018

Я работаю над клиентским веб-приложением, в котором пользователи могут бронировать диски с указанием даты, времени, местоположения и т. Д.

клиент требует, чтобы каждое бронирование добавлялось в качестве события в его календарь Google

Я создал ключ API и загрузил клиент PHP API: https://github.com/google/google-api-php-client

Но когда я пытаюсь добавить событие, я получаю ошибку «Требуется вход в систему» ​​

Как я могудобавьте событие напрямую, не используя OAuth и экран согласия, потому что функция будет автоматически выполняться в бэкэнде, у меня полный доступ к учетной записи gmail.

1 Ответ

0 голосов
/ 03 июня 2018

Я заставил его работать, используя служебную учетную запись и некоторые шаги, основанные на этом ответе , вот что я сделал:

1 - Создайте проект на Google Developer Console.

2- Перейдите в учетные данные и создайте ключ учетной записи службы с типом ключа JSON, файл JSON будет загружен, переместите его в папку проекта.

3- Включите календарьAPI на вкладке «Библиотека», найдите «Календарь API» и включите его.

4- Перейдите в Календарь Google

5 - Перейдите в Настройки -> Добавить календарь -> Создатькалендаря, после этого появится всплывающее уведомление / тост, нажмите «Настроить», прокрутите вниз до «Поделиться с определенными людьми» -> «Добавить людей», в поле электронной почты добавьте идентификатор учетной записи службы, вы можете получить его из «Учетные данные» -> «Управление учетными записями службы», затем установитеРазрешение на внесение изменений в события и нажмите «Отправить».

6 - Загрузите клиентскую библиотеку PHP .

7 - Теперь вам нужно получить идентификатор календаря из настроек календаря.прокрутите вниз до последнего разделавы найдете его, или вот пример кода для его получения, поищите его в ответе, это будет что-то вроде этого 'j85tnbuj1e5tgnizqt9faf2i88@group.calendar.google.com':

<?php
require_once 'google-api/vendor/autoload.php';

$client = new Google_Client();
//The json file you got after creating the service account
putenv('GOOGLE_APPLICATION_CREDENTIALS=google-api/test-calendar-serivce-1ta558q3xvg0.json');
$client->useApplicationDefaultCredentials();
$client->setApplicationName("test_calendar");
$client->setScopes(Google_Service_Calendar::CALENDAR);
$client->setAccessType('offline');

$service = new Google_Service_Calendar($client);

$calendarList = $service->calendarList->listCalendarList();
print_r($calendarList);
?>

8- Теперь вы можете добавлять события в календарь, пример кода:

$event = new Google_Service_Calendar_Event(array(
  'summary' => 'Test Event',
  'description' => 'Test Event',
  'start' => array(
    'dateTime' => '2018-06-02T09:00:00-07:00'
  ),
  'end' => array(
    'dateTime' => '2018-06-10T09:00:00-07:00'
  )
));

$calendarId = 'j85tnbuj1e5tgnizqt9faf2i88@group.calendar.google.com';
$event = $service->events->insert($calendarId, $event);
printf('Event created: %s\n', $event->htmlLink);

Здесь происходит то, что событие создается сервисной учетной записью, которая отличается от вашей собственной учетной записи Google и имеет свои собственные данные, поэтомуЕсли вы не открыли доступ к календарю для учетной записи службы и установили идентификатор календаря в качестве основного, это создаст событие в календаре учетной записи службы, к которому у вас нет нормального доступа.

Надеюсь, это кому-нибудь поможет.

Ссылки:
https://stackoverflow.com/a/26067547/8702128
https://github.com/google/google-api-php-client
https://developers.google.com/calendar/quickstart/php
Как вставить событие в пользовательский календарь Google с помощью php?

...