PayControl Inform — различия между версиями

Материал из PayControl Wiki
Перейти к: навигация, поиск
(Новая страница: «{{В работе}} '''PayControl Inform 2.0''' (сокр. PC Inform) является модулем для платформы PayControl, обеспечиваю…»)
 
Строка 1: Строка 1:
 
{{В работе}}
 
{{В работе}}
 
'''PayControl Inform 2.0''' (сокр. PC Inform) является модулем для платформы PayControl, обеспечивающим высокопроизводительную доставку push-уведомлений до клиентских устройств с обеспечением безопасности передаваемых через уведомление данных.
 
'''PayControl Inform 2.0''' (сокр. PC Inform) является модулем для платформы PayControl, обеспечивающим высокопроизводительную доставку push-уведомлений до клиентских устройств с обеспечением безопасности передаваемых через уведомление данных.
=Описание взаимодействия с PC Inform=
+
 
==Отправка уведомления на iOS==
+
Конечному устройству информация может доставляться в двух вариантах:
 +
* Только push-уведомление;
 +
* Push-уведомление и полезная нагрузка (payload).
 +
=Описание интерфейса взаимодействия с PC Inform=
 +
Интерфейс общения с сервером представляет собой HTTP RESTful интерфейс.
 +
==Отправка уведомления==
 
===Запрос===
 
===Запрос===
Пример отправки запроса при помощи утилиты [[wikipedia:ru:curl]]
+
Отправка запроса производится на адрес http://<hostname>/api/notification/ с помощью '''HTTP POST''' запроса.
<syntaxhighlight lang="bash">
+
 
$ curl \
+
Данные для отправки уведомления передаются в формате JSON и содержат следующие параметры:
    -H "Content-Type: application/json" \
 
    -X POST \
 
    -d '{"device_token": "XXXXXXXXXX", "device_type": "apple", "time_to_live": 3, "priority": "high", "collapse_key": "1234567890", "message": {"aps": {"alert": "Hello from APNs", "badge": "1"}}}' \
 
    http://127.0.0.1/api/notification/
 
</syntaxhighlight>
 
где:
 
 
* message - payload, который отправляется на устройство через APNs
 
* message - payload, который отправляется на устройство через APNs
* payload - дополнительный payload, который отправляется устройству по запросу к сервису `payloader`
+
* payload - (опционально) дополнительный пэйлоад;
 
* time_to_live - время жизни уведомления в секундах (0 - сервер APNs не будет пытаться отправить повторно)
 
* time_to_live - время жизни уведомления в секундах (0 - сервер APNs не будет пытаться отправить повторно)
 
* priority - приоритет ("high" или "normal")
 
* priority - приоритет ("high" или "normal")
 
* collapse_key - значение параметра apns-collapse-id, отправляемого в APNs
 
* collapse_key - значение параметра apns-collapse-id, отправляемого в APNs
===Ответ===
+
 
В ответ сервис выдает UUID-идентификатор созданного запроса на уведомление в сообщении вида:
+
Примеры отправки запроса при помощи утилиты [[wikipedia:ru:curl|cURL]]:
<syntaxhighlight lang="json">
+
====Android====
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}
 
</syntaxhighlight>
 
==Отправка уведомления на Android==
 
===Запрос===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ curl \
+
curl \
 
     -H "Content-Type: application/json" \
 
     -H "Content-Type: application/json" \
 
     -X POST \
 
     -X POST \
     -d '{"device_token": "XXXXXXXXXX", "device_type": "google", "time_to_live": 3, "priority": "high", "collapse_key": "1234567890", "message": {"title": "Hello from Firebase", "body": "This is notification"}}' \
+
     -d '{"device_token": "XXXXXXXXXX", "device_type": "google", "time_to_live": 3, "priority": "high", "collapse_key": "1234567890", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "message": {"notification":{"title": "Hello from Firebase", "body": "This is notification"}}}' \
 
     http://127.0.0.1/api/notification/
 
     http://127.0.0.1/api/notification/
 
</syntaxhighlight>
 
</syntaxhighlight>
где:
+
====iOS====
* message - payload, который отправляется на устройство через Firebase Cloud Messaging
+
<syntaxhighlight lang="bash">
* payload - дополнительный payload, который отправляется устройству по запросу к сервису `payloader`
+
curl \
* time_to_live - время жизни уведомления в секундах (0 - сервер FCM не будет пытаться отправить повторно)
+
-H "Content-Type: application/json" \
* priority - приоритет ("high" или "normal")
+
-X POST \
* collapse_key - значение параметра collapse_key, отправляемого в FCM
+
-d '{"device_token": "XXXXXXXX", "device_type": "apple", "time_to_live": 3, "priority": "high", "collapse_key": "1234567890","payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "message": {"aps": {"alert": "Hello from APNs", "badge": "1"}}}' \
 +
http://127.0.0.1/api/notification/
 +
</syntaxhighlight>
 
===Ответ===
 
===Ответ===
 +
В ответ сервис выдает UUID-идентификатор созданного запроса на уведомление в сообщении вида:
 
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
 
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}
 
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}
Строка 44: Строка 42:
 
==Информация о доставке Push-уведомления==
 
==Информация о доставке Push-уведомления==
 
===Запрос===
 
===Запрос===
По данному uuid можно впоследствии получить информацию по доставке уведомления запросом:
+
Отправка запроса производится на адрес http://<hostname>/api/notification/<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> с помощью '''HTTP GET''' запроса, где <xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> - идентификатор, который возвратил PC Inform при запросе на создание push-уведомления.
 +
 
 +
Пример отправки запроса при помощи утилиты cURL:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ curl http://127.0.0.1/api/notification/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
+
curl http://127.0.0.1/api/notification/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===Ответ===
 
===Ответ===
 
Пример ответа:
 
Пример ответа:
<syntaxhighlight lang="json">{"uuid": "4e813216-2deb-4846-87d9-5f21f2754ac8", "device_token": "cyd7Pj2uY2k:APA91bG1MMxsOjyEgUThqkuf55zExXKSPq1DBNyLKLjW-h-Hte3Alb9fXaOrgjC1CqubEGEp-80JCAp_59Qsdad4Xaez7ht4oJe8PGvtJmQxTEs2SWaMZyctxVjI_v-us18d2v-WEaNu", "payload": null, "callback_url": null, "created_at": "2018-11-19 11:04:30.880346", "updated_at": "2018-11-19 11:04:31.460938", "status": "notification_sent"}</syntaxhighlight>
+
<syntaxhighlight lang="json">{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "device_token": "XXXXXXXXXX", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "callback_url": null, "created_at": "2018-11-19 14:53:51.780572", "updated_at": "2018-11-19 14:53:52.344391", "status": "notification_sent"}</syntaxhighlight>
 
==Получения пэйлоада==
 
==Получения пэйлоада==
# Опиание запроса на получения пэйлоада
 
 
===Запрос===
 
===Запрос===
 +
Получения пэйлоада осуществляется с помощью отправки '''HTTP POST''' запроса на адрес http://<hostname>/api/payload/
 +
 +
Пример отправки запроса при помощи утилиты cURL:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
$ curl -i \
+
curl -i \
    -H "Content-Type: application/json" \
+
  -H "Content-Type: application/json" \
    -X POST \
+
  -X POST \
    -d '{"auth_token": "XXXXXXXXXX", "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}' \
+
  -d '{"auth_token": "XXXXXXXXXX", "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}' \
    http://127.0.0.1:8080/api/payload/
+
  http://127.0.0.1:8080/api/payload/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
где:
 
где:

Версия 18:19, 19 ноября 2018

В работе
Статья в процессе написания


PayControl Inform 2.0 (сокр. PC Inform) является модулем для платформы PayControl, обеспечивающим высокопроизводительную доставку push-уведомлений до клиентских устройств с обеспечением безопасности передаваемых через уведомление данных.

Конечному устройству информация может доставляться в двух вариантах:

  • Только push-уведомление;
  • Push-уведомление и полезная нагрузка (payload).

Описание интерфейса взаимодействия с PC Inform

Интерфейс общения с сервером представляет собой HTTP RESTful интерфейс.

Отправка уведомления

Запрос

Отправка запроса производится на адрес http://<hostname>/api/notification/ с помощью HTTP POST запроса.

Данные для отправки уведомления передаются в формате JSON и содержат следующие параметры:

  • message - payload, который отправляется на устройство через APNs
  • payload - (опционально) дополнительный пэйлоад;
  • time_to_live - время жизни уведомления в секундах (0 - сервер APNs не будет пытаться отправить повторно)
  • priority - приоритет ("high" или "normal")
  • collapse_key - значение параметра apns-collapse-id, отправляемого в APNs

Примеры отправки запроса при помощи утилиты cURL:

Android

curl \
    -H "Content-Type: application/json" \
    -X POST \
    -d '{"device_token": "XXXXXXXXXX", "device_type": "google", "time_to_live": 3, "priority": "high", "collapse_key": "1234567890", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "message": {"notification":{"title": "Hello from Firebase", "body": "This is notification"}}}' \
    http://127.0.0.1/api/notification/

iOS

curl \
 -H "Content-Type: application/json" \
 -X POST \
 -d '{"device_token": "XXXXXXXX", "device_type": "apple", "time_to_live": 3, "priority": "high", "collapse_key": "1234567890","payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "message": {"aps": {"alert": "Hello from APNs", "badge": "1"}}}' \
 http://127.0.0.1/api/notification/

Ответ

В ответ сервис выдает UUID-идентификатор созданного запроса на уведомление в сообщении вида:

{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}

Информация о доставке Push-уведомления

Запрос

Отправка запроса производится на адрес http://<hostname>/api/notification/<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> с помощью HTTP GET запроса, где <xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> - идентификатор, который возвратил PC Inform при запросе на создание push-уведомления.

Пример отправки запроса при помощи утилиты cURL:

curl http://127.0.0.1/api/notification/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx

Ответ

Пример ответа:

{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "device_token": "XXXXXXXXXX", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "callback_url": null, "created_at": "2018-11-19 14:53:51.780572", "updated_at": "2018-11-19 14:53:52.344391", "status": "notification_sent"}

Получения пэйлоада

Запрос

Получения пэйлоада осуществляется с помощью отправки HTTP POST запроса на адрес http://<hostname>/api/payload/

Пример отправки запроса при помощи утилиты cURL:

curl -i \
   -H "Content-Type: application/json" \
   -X POST \
   -d '{"auth_token": "XXXXXXXXXX", "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}' \
   http://127.0.0.1:8080/api/payload/

где:

  • auth_token - авторизационный токен, вычисляемый как *HMAC(sha256(`device_token`), `uuid`)*
  • uuid - uuid запроса на уведомление

Ответ

  • Если токен невалидый, то сервис возвращает 401
  • Если токен, валидный, но пэйлоада нет, то сервис возвращает 204
  • Если токен валидный и пэйлоад есть, то сервис возвращает его с кодом 200

Callback

Callbacker с использованием callback-адреса, указанного при создании задачи, выполняет HTTP-вызов в Прикладную систему для уведомления о статусе получения уведомления. После callback-вызова Callbacker вносит информацию в БД о статусе задачи «callback выполнен». Если в задаче не был указан callback-адрес, то callback не выполняется.