Больше не может получить доступ к общим календарям через API Календаря Google, используя учетную запись службы - PullRequest
0 голосов
/ 21 декабря 2018

У меня пару месяцев работал небольшой скрипт 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,просмотрел много учебников и предложений на этом сайте, и все, что я пробовал, включая сброс учетной записи службы, полностью не решило проблему.

1 Ответ

0 голосов
/ 26 декабря 2018

Я не уверен, изменил ли Google то, как это работало, или мои IT испортили настройки, так как я знаю, что это работало некоторое время.Однако я нашел исправление!

Необходимо было изменить другую настройку, которую может установить только администратор GSuite.Вот шаги:

  1. В консоли администратора Google (на admin.google.com) ...
  2. Перейдите в Приложения> G Suite> Календарь.(Для этого необходимо иметь права администратора «Календарь»> «Настройки».)
  3. Щелкните «Настройки общего доступа».
  4. В разделе «Параметры внешнего обмена» выберите «Совместное использование всей информации, и посторонние могут изменять календари»
  5. Если я правильно помню, мне даже не нужно было нажимать кнопку сохранения, и настройка была мгновенной (независимо от сообщения о том, что это может занять некоторое время).

Полная информация найдена здесь - https://support.google.com/a/answer/60765?hl=en.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...