Intereting Posts
Javascript выводится из отдельного скрипта php Можно ли проверить, приведет ли imagecreatefromjpeg к тому, что память исчерпала фатальную ошибку, прежде чем запускать ее? расшифровать зашифрованный текст as3crypto в PHP Почему неопределенные константы оцениваются как истинные? PHP и MySQL – как отобразить выбранное значение в раскрывающемся меню Как показать несколько recaptchas на одной странице? Как получить доступ к частной электронной таблице из API? что является лучшим способом создания случайного идентификатора mysql с помощью PHP Доступ Xampp Запрещенный php Как отправить данные в iframe с помощью JQuery Как создать новую страницу в панели администратора prestashop? Как безопасно хранить пароль внутри PHP-кода? Почему Ajax дает мне ошибку перекрестного происхождения, когда я могу сделать запрос с PHP? Как автоматически читать в вычисленных значениях с помощью PHPExcel? javascript XMLHttpRequest открыть файл php и выполнить больше javascript

Как обрабатывать push-уведомления API Google Calendar?

Кажется, я не могу понять эту статью .

Я пытаюсь создать двухстороннюю синхронизацию событий между моим веб-приложением и Календарем Google. У меня есть мои события, успешно синхронизирующиеся с Календарем Google, но push-уведомления, которые Google отправляет мне, бесполезны.

Когда я создаю новое событие, а затем создаю часы:

$channel = new Google_Service_Calendar_Channel(); $channel->setId($watchId); $channel->setType('web_hook'); $channel->setAddress(URL::route('gapi.watchEvent')); $channel->setResourceId($seg->gapi_event_id); // does this do anything?? $channel->setToken(json_encode(['segment_id'=>$seg->id])); $channel->setParams([ 'ttl' => 2628000, // is this respected?? ]); $watchResp = $calendarService->events->watch($googleCalendarId, $channel); 

Во-первых, делает ли $channel->setResourceId что-нибудь? Я хочу слушать изменения в конкретном событии, но всегда, кажется, дает мне уведомления для всего календаря.

Заголовки, которые отправляет Google, выглядят следующим образом:

 "X-Goog-Channel-Id": "qJSdaxkKKkXXXXXXXXXX", "X-Goog-Channel-Expiration": "Thu, 10 Sep 2015 01:45:57 GMT", "X-Goog-Resource-State": "exists", "X-Goog-Message-Number": "1811101", "X-Goog-Resource-Id": "wBkuOkYwEhDiXXXXXXXXX", "X-Goog-Resource-Uri": "https://www.googleapis.com/calendar/v3/calendars/9t4rmmb2rfdvcXXXXXXX@group.calendar.google.com/events?alt=json", 

X-Goog-Channel-Id – это идентификатор часов, который я выбрал. X-Goog-Resource-Uri кажется просто ссылкой на календарь. И я не знаю, что X-Goog-Resource-Id . Он не является ни моим идентификатором календаря, ни моим идентификатором события.

Все, что я хочу знать, это то, какие данные изменились? Как извлечь эту информацию из push-уведомления?

Мне все равно, нужно ли мне подписываться на каждое событие, созданное моим приложением, или только один раз в календаре.

Solutions Collecting From Web of "Как обрабатывать push-уведомления API Google Calendar?"

Когда вы получаете push-уведомление, оно не содержит практически никакой полезной информации. Вы должны отправить запрос в Google, чтобы узнать, что изменилось с момента последней синхронизации. Прочтите эту статью для получения дополнительной информации.

В принципе, вы хотите использовать $_SERVER['HTTP_X_GOOG_CHANNEL_ID'] (созданный вами идентификатор часов) и / или $_SERVER['HTTP_X_GOOG_RESOURCE_ID'] (генерирует идентификатор часов Google), чтобы найти идентификатор календаря, в котором вы создали часы ваш собственный БД (вам придется хранить это при создании часов).

Когда у вас есть идентификатор календаря, вам нужно сделать запрос событий / списка, чтобы узнать, что изменилось. У них есть пример PHP на этой странице, но вам нужно добавить в syncToken который вы также должны хранить.

Несмотря на то, что события / часы находятся под «событиями», вы действительно слушаете все события для календаря, а не изменения в конкретном событии (не обманывайте PHP API, который имеет параметр Google_Service_Calendar_Channel::setResourceId – он ничего не делает). Не забудьте сохранить resourceId вы вернетесь. Вам нужно будет остановить уведомления.

Кроме того, часы истекают через некоторое время. И вы не можете их обновить . Я предлагаю вам остановить старые часы неделю или две, прежде чем истечет срок действия и создаст новый. Новый должен иметь другой идентификатор, чем старый.