Я осознаю тот факт, что я не первый, кто задает вопрос, но я искал пару дней и не могу найти решение своей проблемы.
Итак, дело в том, что мне нужно настроить приложение с учетной записью Google, и всякий раз, когда пользователь завершает действие, приложение добавляет событие в календарь Google приложения, не отвлекая пользователя на какое-либо согласие. Мне нужно, чтобы вся аутентификация для учетной записи приложения выполнялась в коде. Я провел некоторый поиск и думаю, что связь между сервером Google и сервером через служебную учетную запись — это то, что нужно. https://developers.google.com/accounts/docs/OAuth2ServiceAccount
Дело в том, что я понятия не имею, как настроить клиент, получить токен доступа и вызвать API с ним. Пока что я установил Google API с помощью composer:
{
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.3.*",
"dlu/dlutwbootstrap": "dev-master",
"google/apiclient": "1.0.*@beta"}
}
Я также создал учетную запись службы в консоли разработчика Google и получил идентификатор клиента, адрес электронной почты и т. Д. Итак, это подводит нас к коду:
$client = new \Google_Client();
$clientId = '<MY ID>';
$service_email = '<THE EMAIL>';
$myMail = '<MY OTHER MAIL>';
$keyFile = './data/<NAME OF FILE>';
$client->setClientId($clientId);
$client->setApplicationName('Timesheet');
$key = file_get_contents($keyFile);
$client->setAssertionCredentials(new Google_AssertionCredentials(
$service_email,
array('https://www.googleapis.com/auth/calendar'),
$key));
$client->getRequestToken();
$calendar = new \Google_Service_Calendar($client);
$event = new Event();
$event->setSummary('Appointment');
$event->setLocation('Somewhere');
$start = new EventDateTime();
$start->setDateTime('2014-11-05T10:00:00.000-07:00');
$event->setStart($start);
$end = new EventDateTime();
$end->setDateTime('2014-11-05T10:25:00.000-07:00');
$event->setEnd($end);
$attendee1 = new EventAttendee();
$attendee1->setEmail('<EMAIL ONE>');
$attendee2 = new EventAttendee();
$attendee2->setEmail('<EMAIL TWO>');
$attendees = array($attendee1, $attendee2);
$event->attendees = $attendees;
$createdEvent = $calendar->events->insert('<CALENDAR TO INSERT EVENT INTO>', $event);
Я был бы очень признателен, если бы кто-то указал мне на то, что мне не хватает, и помог бы мне правильно использовать API. Заранее спасибо!
С наилучшими пожеланиями,
Valentin
Наконец-то ответ найден! Ошибка была в вызове вставки:
$calendar->events->insert('primary', $event);
правильный бит кода. Вам нужно поставить 'primary'
в качестве первого параметра вместо электронного письма.
Надеюсь, это поможет кому-то! 🙂
Других решений пока нет …