У меня есть приложение php в моей интрасети, которому нужно добавлять события в календари моих пользователей.
Я следовал следующей инструкции https://developers.google.com/+/domains/authentication/delegation
Я установил клиент google-api-php и использовал пример service-accounts.php в качестве отправной точки.
$client_id = 'rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr.apps.googleusercontent.com';
$service_account_name = 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy@developer.gserviceaccount.com';
$key_file_location = 'file.p12';
$client = new Google_Client();
$client->setApplicationName("egw - intranet");
$service = new Google_Service_Calendar($client);
//authenticate
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/calendar'),
$key
);
$client->setAssertionCredentials($cred);
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$_SESSION['service_token'] = $client->getAccessToken();
$event = new Google_Service_Calendar_Event();
$event->setSummary('API V3 TEST');
$event->setLocation('rrrrrrrrrrrrrrrrrrrrrrrrr');
$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime('2014-11-03T10:00:00.000-07:00');
$event->setStart($start);
$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime('2014-11-04T10:25:00.000-07:00');
$event->setEnd($end);
$attendee1 = new Google_Service_Calendar_EventAttendee();
$attendee1->setEmail('email@domain.com');
$attendees = array($attendee1);
$event->attendees = $attendees;
$createdEvent = $service->events- >insert('email2@domain.com', $event);
echo $createdEvent->getId();
Я получаю 404 ошибка не найдена. Если я вручную делюсь календарем, который использую для своего теста, с учетной записью службы, это работает. Но я хотел бы, чтобы моя программа также работала без ручного обмена каждым календарем всех моих пользователей. Может кто-нибудь сказать мне, что мне не хватает?
С уважением,
2 ответа
Вы не можете добавить в календарь мероприятие, которое не было специально предоставлено вашему проекту Google. Вы должны либо поделиться каждым календарем с учетной записью службы, либо использовать OAuth2 с учетными данными веб-приложения, чтобы каждый пользователь мог предоставить вам доступ.
Когда я начал это, текущий клиент google-php-api-client был 1.1.0-beta. Несколько недель спустя мы достигли версии 1.1.2. Обновление до этой версии решило мою проблему. Добавление сервисной учетной записи дает приложению возможность идентифицировать себя с Google. Если вы добавите области в консоль администратора Google, как это сделал я, учетная запись службы будет иметь доступ ко всем данным, указанным в области для каждого пользователя в домене. Спасибо всем за ответы.
Похожие вопросы
Связанные вопросы
Новые вопросы
google-calendar-api
Вопросы, связанные с программным взаимодействием с календарями и событиями Календаря Google. Также должен быть включен языковой тег, например, [ Google -приложения -скрипт ] . Вопросы по общему использованию Служб Google следует размещать в Web Stack Exchange.