Я пытаюсь прочитать события в Календаре Google, используя PHP и официальную клиентскую библиотеку PHP Google.
Я создал service account
в Консоль разработчиков Google и, кажется, работает, я могу подключиться к календарю, но я получаю пустой массив:
Google_Service_Calendar_CalendarList Object (
[collection_key: protected] => items [internal_gapi_mappings: protected] => Array () [etag] => [itemsType: protected] => Google_Service_Calendar_CalendarListEntry [itemsDataType: protected] =>
array [kind] => [nextPageToken] => [nextSyncToken] =>
[modelData: protected] => Массив ([ошибка] => Массив ([ошибки] => Массив
([0] => Массив ([домен] => глобальный [причина] =>
достаточное разрешение [сообщение] => Недостаточное разрешение))
[code] => 403 [message] => Недостаточно прав))
[обработано: защищено] => Массив ())
мой код:
define('APPLICATION_NAME', 'Google Calendar API PHP Quickstart');
session_start();
$client = new Google_Client();
$client->setApplicationName(APPLICATION_NAME);
$client->setAuthConfigFile('client_secret.json');
$client->setAccessType('offline');
$client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$client->setAccessToken($_SESSION['access_token']);
#$client->setUseObjects(true);
$cal=new Google_Service_Calendar($client);
$calendarList=$cal->calendarList->listCalendarList();
while(true) {
foreach ($calendarList->getItems() as $calendarListEntry) {
echo $calendarListEntry;
}
$pageToken = $calendarList->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$calendarList = $service->calendarList->listCalendarList($optParams);
} else {
break;
}
}
} else {
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/google/oauth2callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
Кто-нибудь может сказать мне, что я делаю неправильно
Заранее спасибо за помощь.
Вы подключаетесь с учетной записью сервиса. У служебной учетной записи есть собственная учетная запись Google Calendar, которая по умолчанию не имеет календарей и не имеет доступа к вашей учетной записи Google Calendar.
Вот что говорит следующее сообщение:
Недостаточное разрешение
Если вы хотите предоставить доступ учетной записи службы к своему Календару Google, вам нужно будет взять адрес электронной почты учетной записи службы и поделиться им с Google своим календарем так же, как вы делитесь им с любым другим пользователем.
Других решений пока нет …