Подключение учетной записи сервиса к Календарю Google - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь подключиться к Календарю Google и настроил Сервисную учетную запись с делегированием по всему домену .Затем я скачал файл json p12, поместил его на свой веб-сервер и попытался запустить следующий код.

Цель состоит в том, чтобы скрипт php возвратил список событий из Календаря Google, чтобы их можно было обработать.с.

Когда код выполняется, $ events не содержит ни одного из элементов, перечисленных в календаре, но объект json аналогичен тому, что находится ниже источника php.

Я неправильно прочитал документацию, я что-то упускаю из виду?

Спасибо за отзыв,

Nate

<? require_once 'vendor/autoload.php';

    $calendar = initCalendar();

    $events = $calendar->events->listEvents('primary');

    // Take from : https://developers.google.com/calendar/v3/reference/events/list
    while(true) {
      foreach ($events->getItems() as $event) {
        echo $event->getSummary();
      }
      $pageToken = $events->getNextPageToken();
      if ($pageToken) {
        $optParams = array('pageToken' => $pageToken);
        $events = $service->events->listEvents('primary', $optParams);
      } else {
        break;
      }
    }

    function initCalendar(){

        $KEY_FILE_LOCATION = __DIR__ . '/my_downloaded_file.json';

        $client = new Google_Client();

        putenv('GOOGLE_APPLICATION_CREDENTIALS='.$KEY_FILE_LOCATION);
        $client->setAuthConfig($KEY_FILE_LOCATION);
        $client->useApplicationDefaultCredentials();


        $client->setApplicationName('Calendar Sync');
        $client->setIncludeGrantedScopes(true);   // incremental auth       
        $client->setScopes([
            Google_Service_Calendar::CALENDAR
            , Google_Service_Calendar::CALENDAR_READONLY
        ]);     


        $client->setRedirectUri('https://' . $_SERVER['HTTP_HOST'] . '/api/events.php');
        $client->setAccessType('offline');        // offline access


        $calendar = new Google_Service_Calendar($client);       

        return $calendar;   

    }


?>

Возвращено JSON

object(Google_Service_Calendar_Events)#58 (19) {
  ["collection_key":protected]=>
  string(5) "items"
  ["accessRole"]=>
  string(5) "owner"
  ["defaultRemindersType":protected]=>
  string(37) "Google_Service_Calendar_EventReminder"
  ["defaultRemindersDataType":protected]=>
  string(5) "array"
  ["description"]=>
  NULL
  ["etag"]=>
  string(18) ""sdfsdfgsdfsf""
  ["itemsType":protected]=>
  string(29) "Google_Service_Calendar_Event"
  ["itemsDataType":protected]=>
  string(5) "array"
  ["kind"]=>
  string(15) "calendar#events"
  ["nextPageToken"]=>
  NULL
  ["nextSyncToken"]=>
  string(28) "sdfsdfsdfsdfsdf="
  ["summary"]=>
  string(67) "user@domain.test"
  ["timeZone"]=>
  string(3) "UTC"
  ["updated"]=>
  string(24) "2018-09-20T10:17:37.161Z"
  ["internal_gapi_mappings":protected]=>
  array(0) {
  }
  ["modelData":protected]=>
  array(0) {
  }
  ["processed":protected]=>
  array(0) {
  }
  ["defaultReminders"]=>
  array(0) {
  }
  ["items"]=>
  array(0) {
  }
}

1 Ответ

0 голосов
/ 20 сентября 2018

Сервисная учетная запись является фиктивным пользователем, а не вашим личным пользователем.у него есть собственный аккаунт в календаре Google.Когда вы указываете primary для календаря, если он является основным календарем для текущего аутентифицированного пользователя, который является учетной записью службы.

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

...