PayControl Inform — различия между версиями
(→Отправка уведомления) |
|||
Строка 132: | Строка 132: | ||
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"} | {"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"} | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | ===Передача uuid на мобильное устройство=== | ||
+ | Идентификатор сообщения (в формате UUID) будет принудительно (с версии apple-pusher 1.0.014 и google-pusher 1.0.009) направляться в Push-уведомлении, в параметре '''pcinform_uuid'''. Примеры: | ||
+ | ====Android==== | ||
+ | <syntaxhighlight lang="json">{ | ||
+ | "aps":{ | ||
+ | "alert":"Требуется подтверждение операций", | ||
+ | "badge":1, | ||
+ | "sound":"default" | ||
+ | }, | ||
+ | "pcinform_uuid":"a2e35fa5-9131-48ca-b8d4-b6bd1c044f5b" | ||
+ | }</syntaxhighlight> | ||
+ | ====iOS==== | ||
+ | <syntaxhighlight lang="json">{ | ||
+ | "notification":{ | ||
+ | "title":"PayContol", | ||
+ | "body":"Требуется подтверждение операции", | ||
+ | "sound":"default" | ||
+ | }, | ||
+ | "data":{ | ||
+ | "f1":1, | ||
+ | "f2":"s2", | ||
+ | "pcinform_uuid":"4df3823b-4767-44a9-87e9-d7e722ef5b1d" | ||
+ | } | ||
+ | }</syntaxhighlight> | ||
==Информация о состоянии Push-уведомления== | ==Информация о состоянии Push-уведомления== |
Версия 10:57, 12 апреля 2019
PayControl Inform 2.0 (сокр. PC Inform) является модулем для платформы PayControl, обеспечивающим высокопроизводительную доставку push-уведомлений до клиентских устройств с обеспечением безопасности передаваемых через уведомление данных.
Конечному устройству информация может передаваться в двух вариантах:
- Только push-уведомление;
- Push-уведомление и полезная нагрузка (payload).
Содержание
Установка
Руководство по установке приведено в статье PayControl Inform. Installation guide.
Настройка
Параметры конфигурации PCInform распологаются в файле configuration/pushgate.conf
Переменная | Пример | Описание |
---|---|---|
DB_DSN | postgres://inform_user:techpassw@127.0.0.1/inform_db | Источник данных (строка подключения к БД) |
Push Secretary | ||
PUSH_SECRETARY_WORKER_NUM | 4 | Количество процессов Push_secretary |
PUSH_SECRETARY_LISTEN | 0.0.0.0:80 | Прослушиваемый порт |
PUSH_SECRETARY_LOG_LEVEL | INFO | Уровень логирования |
Apple-pusher | ||
APNS_CERT | /var/app/configuration/apns/ru.safe-tech.PayControl.v3.pem | Файл сертификата для аутентификации на APNS для отправки push-уведомлений |
APPLE_PUSHER_PREFETCH_COUNT | 2500 | Количество забираемых сообщений из очереди |
APPLE_PUSHER_LOG_LEVEL | INFO | Уровень логирования |
Google-pusher | ||
FCM_SENDER_ID | 431994891053 | ID Отправителя Google firebase |
FCM_API_KEY | AAAAZJTm6y0:APA91bF1OQYv9T2opZtI... ...0e8tLxCmBzhda | Ключ для аутентификации на Google Firebase для отправки push-уведомлений |
GOOGLE_PUSHER_PREFETCH_COUNT | 2500 | Количество забираемых сообщений из очереди |
GOOGLE_PUSHER_LOG_LEVEL | INFO | Уровень логирования |
Payloader | ||
PAYLOADER_WORKER_NUM | 3 | Количество процессов payloader |
PAYLOADER_LISTEN | 0.0.0.0:8080 | Прослушиваемый порт |
PAYLOADER_LOG_LEVEL | INFO | Уровень логирования |
Housekeeper | ||
AGING_PERIOD | 3600 | Cрок жизни записи push-уведомления перед очисткой БД housekeeper'ом |
HOUSEKEEPING_DELAY | 3600 | Периодичность очистки БД |
Callbacker | ||
CALLBACKER_PREFETCH_COUNT | 2500 | Количество забираемых сообщений из очереди |
CALLBACKER_LOG_LEVEL | INFO | Уровень логирования |
Status-porter | ||
STATUS_PORTER_PREFETCH_COUNT | 2500 | Количество забираемых сообщений из очереди |
STATUS_PORTER_LOG_LEVEL | INFO | Уровень логирования |
Количество экземпляров сервиса
Конфигурирование количества запуска других служб доступно в статье, описывающей установку, раздел Enable services.
Аутентификация для отправки Push
Google Firebase
Аутентификационные данные прописываются в configuration/pushgate.conf, параметры
- FCM_SENDER_ID;
- FCM_API_KEY.
APNS
Аутентификация с помощью сертификата. Путь к сертификату прописывается в значении APNS_CERT в файле configuration/pushgate.conf. Для аутентификации используется .pem-файл. Для конвертирования из .p12-файла используется команда:
openssl pkcs12 -in filename.p12 -out filename.pem -nodes
Адреса серверов для отправки Push
Apple Push Notification Service
Адрес | Порт |
---|---|
api.push.apple.com | 443 |
Google Firebase
Адрес | Порт |
---|---|
fcm-xmpp.googleapis.com | 5235 |
Описание интерфейса взаимодействия с PC Inform
Интерфейс общения с сервером представляет собой HTTP RESTful интерфейс.
Отправка уведомления
Запрос
Адрес конечной точки | http://<hostname>/api/notification/ |
HTTP-метод | POST |
Данные для отправки уведомления передаются в формате JSON и содержат следующие параметры:
- device_token – идентификатор устройства для отправки уведомления;
- device_type – тип устройства ("apple"/"google");
- message – данные уведомления, которое отправляется на устройство через FCM/APNs;
- payload – (опционально) дополнительная полезная нагрузка («пэйлоад»);
- callback_url – (опционально) адрес, по которому будет осуществляться callback;
- time_to_live – время жизни уведомления в секундах (0 - сервер FCM/APNs не будет пытаться отправить повторно);
- priority – приоритет ("high" или "normal");
- collapse_key – значение параметра FCM collapse_key/ APNs apns-collapse-id;
Примеры отправки запроса при помощи утилиты 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==", "callback_url" : "http://<callbackhost>/callback.php", "message": {"notification":{"title": "Hello from Firebase", "body": "This is notification"}}}' \
http://<hostname>/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==", "callback_url" : "http://<callbackhost>/callback.php", "message": {"aps": {"alert": "Hello from APNs", "badge": "1"}}}' \
http://<hostname>/api/notification/
Ответ
В ответ сервис возвратит идентификатор созданного запроса на уведомление в формате UUID вида:
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}
Передача uuid на мобильное устройство
Идентификатор сообщения (в формате UUID) будет принудительно (с версии apple-pusher 1.0.014 и google-pusher 1.0.009) направляться в Push-уведомлении, в параметре pcinform_uuid. Примеры:
Android
{
"aps":{
"alert":"Требуется подтверждение операций",
"badge":1,
"sound":"default"
},
"pcinform_uuid":"a2e35fa5-9131-48ca-b8d4-b6bd1c044f5b"
}
iOS
{
"notification":{
"title":"PayContol",
"body":"Требуется подтверждение операции",
"sound":"default"
},
"data":{
"f1":1,
"f2":"s2",
"pcinform_uuid":"4df3823b-4767-44a9-87e9-d7e722ef5b1d"
}
}
Информация о состоянии Push-уведомления
Запрос
Адрес конечной точки | http://<hostname>/api/notification/<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> |
HTTP-метод | GET |
<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> - идентификатор созданного запроса на уведомление.
Пример отправки запроса при помощи утилиты cURL:
curl http://<hostname>/api/notification/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
Ответ
Возможные значения параметра "status":
Значение | Значение передаваемое в составе коллбэка | Описание |
---|---|---|
NEW | 0 | Задача на отправку уведомления создана |
NOTIFICATION_SENT | 1 | Уведомление отправлено |
NOTIFICATION_SENDING_ERROR | 2 | Ошибка отправки уведомления |
PAYLOAD_SENT | 3 | Полезная нагрузка отправлена |
PAYLOAD_SENDING_ERROR | 4 | Ошибка передачи полезной нагрузки |
CALLBACK_DONE | 5 | Коллбэк отправлен |
CALLBACK_ERROR | 6 | Ошибка отправки коллбэка |
Пример ответа:
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "device_token": "XXXXXXXXXX", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA==", "callback_url": "http://<callbackhost>/callback.php", "created_at": "2018-11-19 14:53:51.780572", "updated_at": "2018-11-19 14:53:52.344391", "status": "notification_sent"}
Получение полезной нагрузки
Запрос
Адрес конечной точки | http://<hostname>/api/payload/ |
HTTP-метод | POST |
Получение приложенных данных осуществляется мобильным устройством с помощью отправки HTTP POST запроса.
Пример отправки запроса при помощи утилиты cURL:
curl -i \
-H "Content-Type: application/json" \
-X POST \
-d '{"auth_token": "XXXXXXXXXX", "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}' \
http://<hostname>/api/payload/
где:
- auth_token - авторизационный токен, вычисляемый как HMAC(sha256(<device_token>), <uuid>)
- uuid - идентификатор запроса на уведомление
Пример расчёта auth_token
Например, для идентификатора транзакции:
c03a6d7f-5b5c-49af-be5c-6ea380080cb7
и идентификатора для уведомлений:
fu37vBAcNxY:APA91bGMpZIh7zcksU2cjNVE8ZRhFyo6Xxac-K8Gp3ZOgVkZdanH5xHHpGkaFN1o2khW86pkU2nrC4EUmSaxRKpAYCA9v5h3YtMm-KaWbMUNHn3IWdzn3lFQRFWOtzD9GTl2qlQMezYS
должно вычисляться следующее значение HMAC:
4f84bc0f9fffc793aa6a2e6b010737c3a5294fd2853111bcef4728af486f8263
Например, корректное значение можно сформировать на сайте https://www.freeformatter.com/hmac-generator.html
Ответ
- Если токен некорректный, то сервис возвращает 401
- Если токен корректный, но полезной нагрузки нет, то сервис возвращает 204
- Если токен корректный и полезная нагрузка есть, то сервис возвращает его с кодом 200. Пример:
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA=="}
Callback
PC Inform с использованием callback-адреса, указанного при создании задачи, выполняет HTTP POST вызов в Прикладную систему для уведомления о статусе получения уведомления.
Обратный вызов прикладной системы выполняется при условии, что при создании транзакции указан адрес, на который будет отправляться callback.
Отправка callback'а происходит после запроса на получение полезной нагрузки.
Пример отправляемых в callback данных:
{"task_uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "status": 3}
где:
- task_uuid - идентификатор запроса на уведомление;
- status - числовое значение статуса задачи. Возможные варианты описаны в разделе Информация о состоянии Push-уведомления.
Переключение PayControl на использование PCInform
Для переключения PayControl на использование PCInform нужно:
- Установить PCInform вместо PCIS Internal с помощью SQL-запроса к БД PCS:
update pc_system set pc_is_internal_url='[pc-inform]http://<PCINFORM_HOSTNAME/IP>/api/notification/';
- Установить шаблоны пушей для всего сервера PayControl (таблица pc_sys_property). Пример SQL-запросов для PostgreSQL:
insert into pc_sys_property values (nextval('pc_setting_seq'), 'ANDROID_PUSH_PAYLOAD_TEMPLATE', '{"messages":[{"notification":{"tag":"%USER_ID%","title":"PayControl","body":"%PUSH_TEXT%","icon":"paycontrol_push","sound":"default"},"data":{"type":"PayControl_v2"}},{"data": {"type": "PayControl_v2", "userid": "%USER_ID%"}}]}'); insert into pc_sys_property values (nextval('pc_setting_seq'), 'IOS_PUSH_PAYLOAD_TEMPLATE', '{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}');
- Перезапустить PayControl.
Журналирование
Запись событий функционирования PCInform осуществляется в файл /var/log/messages.