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

Материал из PayControl Wiki
Перейти к: навигация, поиск
(Ответ)
Строка 72: Строка 72:
 
==Подготовка сертификата для аутентификации на APNS==
 
==Подготовка сертификата для аутентификации на APNS==
 
Конвертировать сертификат, используемый для аутентификации в APNS из формата PKCS12 в PEM можно при помощи команды:
 
Конвертировать сертификат, используемый для аутентификации в APNS из формата PKCS12 в PEM можно при помощи команды:
<syntaxhighlight lang="ифыр">openssl pkcs12 -in filename.p12 -out filename.pem -nodes</syntaxhighlight>
+
<syntaxhighlight lang="bash">openssl pkcs12 -in filename.p12 -out filename.pem -nodes</syntaxhighlight>
 
 
 
=Описание интерфейса взаимодействия с PC Inform=
 
=Описание интерфейса взаимодействия с PC Inform=
 
Интерфейс общения с сервером представляет собой HTTP RESTful интерфейс.
 
Интерфейс общения с сервером представляет собой HTTP RESTful интерфейс.
Строка 104: Строка 103:
 
  http://<hostname>/api/notification/
 
  http://<hostname>/api/notification/
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
===Ответ===
 
===Ответ===
 
В ответ сервис возвратит идентификатор созданного запроса на уведомление в формате UUID вида:
 
В ответ сервис возвратит идентификатор созданного запроса на уведомление в формате UUID вида:
Строка 110: Строка 108:
 
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}
 
{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx"}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
==Информация о состоянии Push-уведомления==
 
==Информация о состоянии Push-уведомления==
 
===Запрос===
 
===Запрос===
Отправка запроса производится на адрес http://<hostname>/api/notification/<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> с помощью '''HTTP GET''' запроса, где <xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> - идентификатор, который возвратил PC Inform при запросе на создание push-уведомления.
+
{{REST endpoint|http://<hostname>/api/notification/<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx>|GET}}
 +
<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx> - идентификатор созданного запроса на уведомление.
  
 
Пример отправки запроса при помощи утилиты cURL:
 
Пример отправки запроса при помощи утилиты cURL:
Строка 122: Строка 120:
 
Пример ответа:
 
Пример ответа:
 
<syntaxhighlight lang="json">{"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"}</syntaxhighlight>
 
<syntaxhighlight lang="json">{"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"}</syntaxhighlight>
==Получения пэйлоада==
+
==Получение полезной нагрузки==
 
===Запрос===
 
===Запрос===
Получения пэйлоада осуществляется мобильным устройством с помощью отправки '''HTTP POST''' запроса на адрес http://<hostname>/api/payload/
+
{{REST endpoint|http://<hostname>/api/payload/|POST}}
 +
Получение приложенных данных осуществляется мобильным устройством с помощью отправки HTTP POST запроса.
  
 
Пример отправки запроса при помощи утилиты cURL:
 
Пример отправки запроса при помощи утилиты cURL:
Строка 135: Строка 134:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
где:
 
где:
* auth_token - авторизационный токен, вычисляемый как HMAC(sha256(`device_token`), `uuid`)
+
* auth_token - авторизационный токен, вычисляемый как HMAC(sha256(<device_token>), <uuid>)
* uuid - uuid запроса на уведомление
+
* uuid - идентификатор запроса на уведомление
 
===Ответ===
 
===Ответ===
* Если токен невалидый, то сервис возвращает 401
+
* Если токен некорректный, то сервис возвращает 401
* Если токен, валидный, но пэйлоада нет, то сервис возвращает 204
+
* Если токен, корректный, но полезной нагрузки нет, то сервис возвращает 204
* Если токен валидный и пэйлоад есть, то сервис возвращает его с кодом 200. Пример:<syntaxhighlight lang="json">{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA=="}</syntaxhighlight>
+
* Если токен корректный и полезная нагрузка есть, то сервис возвращает его с кодом 200. Пример:<syntaxhighlight lang="json">{"uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx", "payload": "dGVzdA0KdGVzdCBQYXlDb250cm9sIEluZm9ybQ0KUGF5Q29udHJvbCBJbmZvcm0gdGVzdA0KdGVzdA=="}</syntaxhighlight>
 
==Callback==
 
==Callback==
 
PC Inform с использованием callback-адреса, указанного при создании задачи, выполняет HTTP POST вызов в Прикладную систему для уведомления о статусе получения уведомления.
 
PC Inform с использованием callback-адреса, указанного при создании задачи, выполняет HTTP POST вызов в Прикладную систему для уведомления о статусе получения уведомления.
Строка 146: Строка 145:
 
Обратный вызов прикладной системы выполняется при условии, что при создании транзакции указан адрес, на который будет отправляться callback.
 
Обратный вызов прикладной системы выполняется при условии, что при создании транзакции указан адрес, на который будет отправляться callback.
  
Отправка callback'а происходит после запроса на получение пэйлоада.
+
Отправка callback'а происходит после запроса на получение полезной нагрузки.
  
 
Пример отправляемых в callback данных:
 
Пример отправляемых в callback данных:

Версия 17:04, 5 декабря 2018

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 - данные уведомления, которое отправляется на устройство через 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> - идентификатор созданного запроса на уведомление.

Пример отправки запроса при помощи утилиты 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://<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 - идентификатор запроса на уведомление

Ответ

  • Если токен некорректный, то сервис возвращает 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', '{"messages":[{"aps":{"alert":"%PUSH_TEXT%","sound":"%PUSH_SOUND%","badge":%PUSH_IOS_BADGE%},"type":"%PUSH_TYPE%","userid":"%USER_ID%"}]}');
    
  • Перезапустить PayControl.

Журналирование

Запись событий функционирования PCInform осуществляется в файл /var/log/messages.