PayControl Inform
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.
Подготовка сертификата для аутентификации на APNS
Конвертировать сертификат, используемый для аутентификации в APNS из формата PKCS12 в PEM можно при помощи команды:
openssl pkcs12 -in filename.p12 -out filename.pem -nodes
Описание интерфейса взаимодействия с PC Inform
Интерфейс общения с сервером представляет собой HTTP RESTful интерфейс.
Отправка уведомления
Запрос
Отправка запроса производится на адрес http://<hostname>/api/notification/ с помощью HTTP POST запроса.
Данные для отправки уведомления передаются в формате JSON и содержат следующие параметры:
- message - payload, который отправляется на устройство через 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"}
Информация о состоянии Push-уведомления
Запрос
Отправка запроса производится на адрес http://<hostname>/api/notification/<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> с помощью HTTP GET запроса, где <xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> - идентификатор, который возвратил PC Inform при запросе на создание push-уведомления.
Пример отправки запроса при помощи утилиты cURL:
curl http://<hostname>/api/notification/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
Ответ
Пример ответа:
{"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 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://<hostname>/api/payload/
где:
- auth_token - авторизационный токен, вычисляемый как HMAC(sha256(`device_token`), `uuid`)
- uuid - uuid запроса на уведомление
Ответ
- Если токен невалидый, то сервис возвращает 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}
Переключение 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', 'setting_value = {"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}');
- Перезапустить PayControl.