0

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

Дело в том, что я понятия не имею, как настроить клиента, получить токен доступа и вызвать 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); 

Я был бы очень признателен, если кто-то может указать на то, что не хватает I`m и вести меня в использовании API правильно. Заранее спасибо!

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

Валентин

+0

Не думаю, что я понял вопрос. Учетная запись службы - это учетная запись. Если вы просто хотите, чтобы пользователи добавляли события в календарь учетных записей службы, у него есть доступ к этому. Если вы хотите добавить события в календарь пользователей, вам сначала нужно их разрешение. «всякий раз, когда он завершает» <- что вы подразумеваете под – DaImTo

+0

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

ответ

0

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

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

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

Смежные вопросы