Учетная запись службы календаря Google с PHP API oauth2.0 — Как получить доступ к календарям, которые не являются общими

У меня проблемы с чтением событий календаря с библиотеками PHP, предоставленными Google. Календари, которые я хочу прочитать, НЕ являются общедоступными, но я хочу прочитать их в своем серверном приложении.

Учетная запись, в которой хранятся календари, отделена от моей (я буду называть ее учетной записью API), хотя календари предоставлены мне.

В соответствии с общедоступными сведениями о календаре в Google:

Любой может: ничего не увидеть

Вы можете: видеть только свободные / занятые (скрыть детали).

И учетная запись API, и моя учетная запись имеют учетные записи службы OAuth2.0 с ключом P12.

Я следовал за гидом в: http://www.daimto.com/google_service_account_php/ который помог мне понять процесс аутентификации. Мне удалось прочитать календари, которые открыты для общего доступа без каких-либо проблем на любой учетной записи. Вот мой код:

// Start the Google client
$client = new Google_Client();
$client->setClientId({{client_id from google}});
$client->setApplicationName("Project Name");
$client->setClientSecret({{client_secret from google}});
$key = file_get_contents({{key_file_location on my server}});
$cred = new Google_Auth_AssertionCredentials(
$Email_address,
// Scopes that we will be using
array(
"https://www.googleapis.com/auth/calendar"),
$key
);

$client->setAssertionCredentials($cred);

if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}

// Use Google Calendar API plugin
$service = new Google_Service_Calendar($client);

$optParams = array(
'singleEvents'=> true,
'timeMin'=>date(DateTime::ATOM),
'timeMax' => date(DateTime::ATOM, time()+(3 * 24 * 60 * 60))
);

$results = $service->events->listEvents(
'{{Calendar ID from Google Calendar Settings}}',
$optParams
);

Однако при попытке использовать код для календарей, которые не являются общедоступными, я получаю следующую ошибку для любой учетной записи:

Неустранимая ошибка: необработанное исключение ‘Google_Service_Exception’ с
сообщение «Ошибка вызова GET
https://www.googleapis.com/calendar/v3/calendars{{CalendarID}} 🙁 404)
Не обнаружена…

Когда я пытаюсь var_dump($client->getAuth())Я заметил, что есть значение, которое может указывать на то, что аутентификация не работает:["authenticated":"Google_Client":private]=> bool(false), Это происходит как для обеих учетных записей, так и для общедоступных и общедоступных календарей.

Я могу использовать Google API Explorer со своей учетной записью для отображения данных JSON в календарях, которые не являются общедоступными. Чего-то не хватает в Google PHP API или в настройках учетной записи Google, что позволит мне делать то, что я хочу?

Спасибо за ваше время.

0

Решение

Если вы хотите получить доступ к личным календарям с помощью учетной записи службы, вам потребуется выполнить делегирование полномочий, если у вас есть домен, содержащий эти календари (https://developers.google.com/drive/web/delegation описывает его для диска, но он работает для календаря) или вам нужно будет поделиться личным календарем с адресом электронной почты учетной записи службы.

2

Другие решения

Спасибо за ваше предложение.

Оказывается, проблема заключалась в том, что лицо, отвечающее за учетную запись API, не делило календари с электронной почтой учетной записи сервера учетной записи разработчика.

Поскольку у меня не было доступа к настройкам учетной записи API, а ошибка в API Календаря Google не была достаточно описательной, потребовалось время, чтобы выяснить это.

0

По вопросам рекламы [email protected]