Попытка установить участников в Google Calendar API / PHP

Я пытаюсь создать мероприятие, и эта часть работает, но по какой-то причине приглашения / участники не будут рассылаться в календарной системе с помощью Google API с использованием PHP. Это действительно создает событие, но это тоже оно. Так что я надеюсь, что кто-нибудь поможет мне разобраться в том, что я делаю не так.

myfile.php // Детали события

parameters = {  title: $("#event-title").val(), 

                event_time: {

                    start_time: $("#event-type").val() == 'FIXED-TIME' ? $("#event-start-time").val().replace(' ', 'T') + ':00' : null,

                    end_time: $("#event-type").val() == 'FIXED-TIME' ? $("#event-end-time").val().replace(' ', 'T') + ':00' : null,

                    event_date: $("#event-type").val() == 'ALL-DAY' ? $("#event-date").val() : null

                },
                'attendees': [
{'email': '[email protected]'},
],

                all_day: $("#event-type").val() == 'ALL-DAY' ? 1 : 0,

            };




$("#create-event").attr('disabled', 'disabled');

$.ajax({

    type: 'POST',

    url: 'ajax.php',

    data: { event_details: parameters },

    dataType: 'json',

    success: function(response) {

        $("#create-event").removeAttr('disabled');

        alert('Event created with ID : ' + response.event_id);

    },

    error: function(response) {

        $("#create-event").removeAttr('disabled');

        alert(response.responseJSON.message);

    }

});

файл ajax.php

session_start();
header('Content-type: application/json');

require_once('google-calendar-api.php');
error_log($_SESSION['access_token']);
try {
// Get event details
$event = $_POST['event_details'];
error_log(__LINE__);
$capi = new GoogleCalendarApi();
error_log(__LINE__);
// Get user calendar timezone
$user_timezone = $capi->GetUserCalendarTimezone($_SESSION['access_token']);
error_log(__LINE__);
// Create event on primary calendar
error_log($event['attendees0']);
$event_id = $capi->CreateCalendarEvent('primary', $event['title'], $event['all_day'], $event['event_time'], $event['attendees'], $user_timezone, $_SESSION['access_token']);
error_log(__LINE__);
echo json_encode([ 'event_id' => $event_id ]);
}
catch(Exception $e) {
error_log($e->getMessage());
header('Bad Request', true, 400);
echo json_encode(array( 'error' => 1, 'message' => $e->getMessage() ));
}

google-calendar.api.php

class GoogleCalendarApi

{

public function GetAccessToken($client_id, $redirect_uri, $client_secret, $code) {  

    $url = 'https://accounts.google.com/o/oauth2/token';            


    $curlPost = 'client_id=' . $client_id . '&redirect_uri=' . $redirect_uri . '&client_secret=' . $client_secret . '&code='. $code . '&grant_type=authorization_code';

    $ch = curl_init();      

    curl_setopt($ch, CURLOPT_URL, $url);        

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        

    curl_setopt($ch, CURLOPT_POST, 1);      

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);    

    $data = json_decode(curl_exec($ch), true);

    $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);      

    if ($http_code != 200) 

        throw new Exception('Error : Failed to receieve access token');



    return $data;

}



public function GetUserCalendarTimezone($access_token) {

    $url_settings = 'https://www.googleapis.com/calendar/v3/users/me/settings/timezone';

    $ch = curl_init();      

    curl_setopt($ch, CURLOPT_URL, $url_settings);       

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token));   

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    

    $data = json_decode(curl_exec($ch), true); //echo '<pre>';print_r($data);echo '</pre>';

    $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);      

    if ($http_code != 200) 
        throw new Exception($http_code);



    return $data['value'];

}



public function GetCalendarsList($access_token) {

    $url_parameters = array();



    $url_parameters['fields'] = 'items(id,summary,timeZone)';

    $url_parameters['minAccessRole'] = 'owner';



    $url_calendars = 'https://www.googleapis.com/calendar/v3/users/me/calendarList?'. http_build_query($url_parameters);



    $ch = curl_init();      

    curl_setopt($ch, CURLOPT_URL, $url_calendars);      

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token));   

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    

    $data = json_decode(curl_exec($ch), true); //echo '<pre>';print_r($data);echo '</pre>';

    $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);      

    if ($http_code != 200) 

        throw new Exception('Error : Failed to get calendars list');



    return $data['items'];

}


//'primary', $event['title'], $event['all_day'], $event['event_time'], $event['attendees'], $user_timezone, $_SESSION['access_token']
public function CreateCalendarEvent($calendar_id, $summary, $all_day, $event_time, $event_attendees, $event_timezone, $access_token) {

    $url_events = 'https://www.googleapis.com/calendar/v3/calendars/' . $calendar_id . '/events';



    $curlPost = array('summary' => $summary);

    if ($all_day == 1) {

        $curlPost['start'] = array('date' => $event_time['event_date']);

        $curlPost['end'] = array('date' => $event_time['event_date']);

    }

    else {

        $curlPost['start'] = array('dateTime' => $event_time['start_time'], 'timeZone' => $event_timezone);

        $curlPost['end'] = array('dateTime' => $event_time['end_time'], 'timeZone' => $event_timezone);

    }

    $ch = curl_init();      

    curl_setopt($ch, CURLOPT_URL, $url_events);     

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);        

    curl_setopt($ch, CURLOPT_POST, 1);      

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '. $access_token, 'Content-Type: application/json')); 

    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($curlPost));   

    $data = json_decode(curl_exec($ch), true);

    $http_code = curl_getinfo($ch,CURLINFO_HTTP_CODE);      

    if ($http_code != 200) 

        throw new Exception($http_code);



    return $data['id'];

}

}

Я надеюсь, что это имеет смысл, поскольку я пробовал так много попыток, что потерял их из виду.

Данные формы, которые отправляются (после того, что я могу выяснить из Google Chrome, это следующее:

event_details[title]: Privat
event_details[event_time][start_time]: 2018-08-11T13:00:00
event_details[event_time][end_time]: 2018-08-11T15:30:00
event_details[event_time][event_date]: 
event_details[attendees][0][email]: [email protected]
event_details[all_day]: 0

Насколько я понимаю, ваш метод CreateCalendatEvent просто не использует данные участников в данных, которые он отправляет в Google. Так что календарь Google никогда о них не знает. Метод принимает $event_attendees в качестве параметра, но не использует его. Вам необходимо добавить данные в ваши данные curl в формате, указанном Google.

ADyson 10.08.2018 11:31

Кстати, по какой-то причине вы не используете библиотеку PHP, предоставленную Google, для разговора с их API? Он дает вам объектно-ориентированный интерфейс для создания необходимых структур данных, а затем обрабатывает все тонкости построения HTTP-запросов, поэтому вам не нужно.

ADyson 10.08.2018 11:31

Я не мог заставить работать библиотеку PHP из Google после бесчисленных часов, поэтому, как только я заставил это работать (отчасти я знаю), я сосредоточился здесь ...

Jess Larsen 10.08.2018 11:51
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
678
1

Ответы 1

ADyson, спасибо за помощь / подсказку. Решением стал отсутствующий завиток.

$ curlPost ['посетители'] = $ event_attendees;

Я надеюсь, что это не будет сильно беспокоить, но похоже, что он не рассылает приглашения на мероприятия, как ожидалось, даже подумал, что он действительно добавляет «гостей» на мероприятие.

Отправная точка для этого решения находится здесь: http://usefulangle.com/post/29/google-calendar-api-create-event-php, и если кто-нибудь может помочь мне вставить или правильно установить * "sendNotifications" => true *, я был бы очень благодарен. (хотел бы увидеть, как устанавливается этот параметр / функция).

С уважением Джесс

Другие вопросы по теме