Использование сервисной учетной записи Google Calendar V3 в ZF2

Я осознаю тот факт, что я не первый, кто задает вопрос, но я ищу уже пару дней, и я не могу найти решение своей проблемы. Итак, дело в том, что мне нужно, чтобы мое приложение было настроено с учетной записью Google, и всякий раз, когда пользователь завершает действие, приложение добавляет событие в Календарь Google приложения, не беспокоя пользователя о каком-либо согласии. Мне нужно, чтобы вся аутентификация для учетной записи приложения выполнялась в коде. Я провел некоторый поиск и думаю, что связь между серверами Google через учетную запись службы — это то, что нужно. https://developers.google.com/accounts/docs/OAuth2ServiceAccount

Дело в том, что я понятия не имею, как настроить клиент, получить токен доступа и вызвать с ним API. До сих пор я установил Google API с помощью композитора:

{
   "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. Заранее спасибо!

С наилучшими пожеланиями,

Валентин


person valio_sg    schedule 06.11.2014    source источник
comment
Я не думаю, что понимаю вопрос. Сервисный аккаунт — это аккаунт. Если вы просто хотите, чтобы пользователи добавляли события в календарь учетных записей служб, у них есть доступ для этого. Если вы хотите добавить события в календарь пользователей, вам сначала нужно их разрешение. всякий раз, когда a завершает ‹-- что вы подразумеваете под a   -  person DaImTo    schedule 06.11.2014
comment
Я имел в виду всякий раз, когда ПОЛЬЗОВАТЕЛЬ завершает действие. Итак, допустим, у пользователя есть следующая почта: [email protected] и у него есть свой календарь (который нас не интересует). Само приложение аутентифицируется по электронной почте: [email protected] и имеет календарь Google. Я хочу добавить события в календарь [email protected], поэтому согласие пользователя не требуется.   -  person valio_sg    schedule 06.11.2014


Ответы (1)


Наконец-то ответ найден! Ошибка была в вызове вставки:

$calendar->events->insert('primary', $event); - правильный бит кода. Вам нужно поставить 'primary' в качестве первого параметра вместо электронной почты.

Надеюсь, это поможет кому-то! :)

person valio_sg    schedule 06.11.2014