использование служебной учетной записи для доступа к календарю Google, но переменные ответа пусты - PullRequest
0 голосов
/ 25 мая 2020

Я создал учетную запись службы для доступа к определенному календарю Google. этот пользователь учетной записи службы также получил разрешение в настройках календаря, как описано в этом блоге: « разрешить моему пользователю добавлять встречу в мой календарь с помощью Google Calendar API с PHP без аутентификации ».

Как я вижу в облачной платформе Google в разделе API + Сервисы -> Учетные данные в разделе Учетная запись службы, созданная учетная запись службы используется со всеми службами (за последние 30 дней) каждый раз, когда я запускаю этот сценарий php, но в окне браузера я не получаю сообщения об ошибке, что возникла бы проблема с аутентификацией, но: Неперехваченная ошибка: вызов функции-члена getSummary () с нулевым значением в строке ... сценария php Скрипт и настройки в Google Cloud Platform описаны в упомянутом сообщении.

Есть идеи, в чем может быть проблема? Изменилось ли что-нибудь в API календаря Google с момента публикации этой публикации в 2019 году?

require '../google-api-php-client/vendor/autoload.php';
ini_set('display_errors', 1);

$client = new Google_Client();
$client->addScope("https://www.googleapis.com/auth/calendar");

$client->setAuthConfig(dirname(__FILE__).'/credentials/credentials.json');

$service = new Google_Service_Calendar($client);

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

while(true) {

  foreach ($calendarList->getItems() as $calendarListEntry) {
    echo $calendarListEntry->getSummary();
    echo "\n------------------------------\n\n";

    // get events 
    $events = $service->events->listEvents($calendarListEntry->id);

    foreach ($events->getItems() as $event) {
        echo "- " . $event->getSummary() . "\n";
        echo "- " . $event->getStart()->getDateTime() . "\n\n";
    }

  }

  $pageToken = $calendarList->getNextPageToken();

  if ($pageToken) {
    $optParams = array('pageToken' => $pageToken);
    $calendarList = $service->calendarList->listCalendarList($optParams);
  } else {

    echo "break";
   break;
  }

}
    echo "calendar summary: " . $calendarListEntry->getSummary();
    echo "\ncalendar id: " . $calendarListEntry->getId();
    echo "\n------------------------------\n\n";

Очевидно, что $ calendarList и $ calendarListEntry пусты ....

1 Ответ

0 голосов
/ 28 мая 2020

Причина, по которой function getSummary () не может отображать какие-либо результаты (имеет значение NULL или пусто), заключается в том, что новый пользователь учетной записи службы имеет пустой CalendarList. Предоставляя разрешение в любом другом календаре учетной записи службы, пользователь не добавляет этот календарь автоматически в CalendarList пользователя учетной записи службы.

Итак, сначала вам нужно вставить / создать calenderList для учетной записи службы:

$calendarListEntry = new Google_Service_Calendar_CalendarListEntry();
$calendarListEntry->setId("calendar_address_you_want_to_add");
$createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);
echo $createdCalendarListEntry->getSummary();

Теперь при использовании первого скрипта вы будете получать результаты calendarEvents (если в календаре есть какие-либо предстоящие события), функции getSummary () и getId ().

...