Справочное руководство включает в себя сведения о возможных допустимых параметрах конфигурации PC и сопутствующих компонентов.
Прикладная система
Для каждой зарегистрированной прикаладной системы возможно сконфигурировать параметры, приведённые ниже.
Адрес отправки информации о событиях
Адрес для отправки информации об устройстве и событиях взаимодействия мобильного приложения, или SDK, с сервером устанавливается двумя способами: путём выполнения запроса Change System Settings к API сервера PCS, или через АРМ РКС.
Описание способа установки параметра через API — в описании API сервера PC.
Перезапуск сервиса PCS не требуется.
Внимание! Обязательным требованием для сбора информации о событиях является установка флага сбора информации о событиях при создании ключа, а для сбора данных об устройстве — ещё и флага сбора информации об устройстве. Подробнее — в описании API сервера.
Адрес отправки коллбэков
Устанавливается через через API PCS, подробнее в описании API сервера PC, или через АРМ РКС, при наличии.
Адреса модулей и БД
Изменение адресов компонентов сервера PC
Описание процесса смены адресов сервера описаны в руководстве по инсталляции.
Параметры подключения к БД
К БД подключаются только модули PCS и PCSS. У каждого своя БД.
Параметры подключения модулей к БД указываются в переменных окружения или в файле application.yml соответствующего модуля, в разделе spring.datasource
. Строка подключения к СУБД устанавливается в параметре url
. Имя пользователя (схема) и пароль в username
и password
соответственно.
Параметры кофигурации сервера PC
Конфигурирование PCS
Конфигурирование модуля Server производится через переменные окружения, либо через файл application.yml
.
Для модуля необходимо установить следующие параметры для подключения к БД PCS:
spring:
datasource:
url: jdbc:postgresql://db-server/pcs-db-name
username: username
password: password
Также можно переопределить следующие параметры:
server:
port: 8080
spring:
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
pc:
server:
instance-name: PCS
logging:
level:
tech.paycon: info
где,
Параметр | Значение по умолчанию | Описание |
---|---|---|
server.port | 8080 | Порт, который будет прослушивать сервис |
spring.jpa.database-platform | org.hibernate.dialect.PostgreSQLDialect | Диалект hibernate для подключения к БД. Другие возможные значения: — org.hibernate.dialect.OracleDialect; — org.hibernate.dialect.SQLServer2012Dialect |
pc.server.instance-name | PCS | Идентификатор инстанса. Может быть использован для идентификатора инстанса в кластере |
logging.level.tech.paycon | info | Уровень логирования модуля |
При передаче параметров через переменные окружения, необходимо использовать заглавные буквы, уровни вложенности разделять подчёркиванием (_
), дефисы опускать. Пример для передачи параметров подключения к БД через переменные окружения:
SPRING_DATASOURCE_URL=jdbc:postgresql://db-server/db-name=info
SPRING_DATASOURCE_USERNAME=username
SPRING_DATASOURCE_PASSWORD=password
Установка параметров
Прочие параметры конфигурации PC Server устанавливаются путём отправки HTTP POST запросов на сервер PCS — http[s]://PCS/pc-api/server_settings
с телом в формате JSON с названиями параметров в качестве ключа, и желаемыми значениями, например:
{
"DEBUG_INFO":"1"
}
Также задать значения параметров можно в АРМ РКС (при наличии), в разделе настроек модуля PCS.
Параметры конфигурации PC Server
setting_name | Значение по умолчанию | Описание |
---|---|---|
REPORT_TEMPLATE | Путь к шаблону отчёта. Имеет приоритет ниже, чем значение установленное в pc_system_params (с 3.6) или pc_system (до 3.6). С версии 5 параметр для указанной системы устанавливается с помощью запроса. |
|
KEY_INFO_LIFE_TIME | 365 | Время жизни ключевой информации пользователя (в днях). Имеет приоритет ниже, чем значение установленное в pc_system_params (с 3.6) или pc_system (до 3.6). С версии 5 параметр для указанной системы устанавливается с помощью запроса. |
BILL_PERIOD | 365 | Период биллинга (в днях) для постоплатной системы расчётов. Имеет приоритет ниже, чем значение установленное в pc_system_params (с 3.6) или pc_system (до 3.6). |
DEBUG_INFO | 0 | Выводить отладочную информацию (0 — не выводить, 1 — выводить). |
CRYPTO_PROVIDER | BC | Криптопровайдер. Устаревший параметр. Значение только "BC" (сокращение от Bouncy Castle) |
T_AUTH_CODE | 180 | Интервал дискретизации для кода аутентификации (auth_code) (в секундах). |
T_CONFIRM_CODE | 180 | Интервал дискретизации для кода подтверждения (в секундах). |
KEY_QR_SIZE | 300 | Размер QR-кода ключа (в пикселях). |
TRANSACTION_QR_SIZE | 300 | Размер QR-кода транзакции (в пикселях). |
CLEAN_TRANSACTION | 1 | Очищать данные транзакции после подтверждения. |
DEFAULT_TRANSACTION_TTL | 0 | Время жизни транзакций по умолчанию в секундах. 0 – без ограничений. |
COLLECT_EVENTS | 0 c версии 3.6.367: 1 |
Включает сбор информации о событиях для сервера. |
COLLECT_DEVICE_INFORMATION | 0 c версии 3.6.367: 1 |
Включает сбор информации об устройстве для сервера. |
CHECK_HTTP_AUTH_HEADER | 1 | Включает проверку аутентификации HTTP запросов от МП по значению, передаваемому в HTTP заголовке. |
IOS_PUSH_PAYLOAD_TEMPLATE | Шаблон push-уведомлений для iOS. Используются только при отправке через PCInform. | |
ANDROID_PUSH_PAYLOAD_TEMPLATE | Шаблон push-уведомлений для Android. Используются только при отправке через PCInform. | |
c версии 3.6.355: | ||
KEYFLAG_WITH_FINGERPRINT | 0 | Установка параметра ключа "Обязательное использование Отпечатка устройства" по умолчанию. Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_EVENTS | 0 | Установка параметра ключа "Собирать события" по умолчанию. Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_DEVICEINFO | 0 | Установка параметра ключа "Собирать информацию об устройстве" по умолчанию. Требует включения сбора событий. Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_SIMINFO | 0 | Установка параметра ключа "Собирать информацию о телефоне (SIM-карте)" по умолчанию. Требует включения сбора информации об устройстве. В ОС Android будет выведен запрос на доступ к Телефону (либо потребуется предоставление этих прав при встраивании PC SDK в своё приложение). Допустимые значения '0' или '1'. |
KEYFLAG_COLLECT_LOCATION | 0 | Установка параметра ключа "Собирать информацию о местоположении (геолокации) устройства" по умолчанию. Требует включения сбора информации об устройстве. Будет выведен запрос на доступ к Местоположению устройства (либо потребуется предоставление этих прав при встраивании PC SDK в своё приложение). Допустимые значения '0' или '1'. |
KEYFLAG_PASS_POLICY | 0 | Установка параметра ключа "Требований к сложности пароля (пин-кода) для сохранения ключа на устройстве" по умолчанию. Доступны следующие варианты: — «0» – минимум 6 символов, пароль не обязателен (доступна кнопка "Без пароля"); — «1» – минимум 6 символов, пароль обязателен; — «2» – минимум 8 символов (обязательно использование A-Z и a-z) пароль обязателен; — «3» – минимум 8 символов (обязательно использование A-Z, a-z и 0-9) пароль обязателен. |
KEYFLAG_DENY_STORE_WITH_OS_PROTECTION | 0 | Установка параметра ключа "Запрет сохранения ключа на мобильном устройства, используя системный способ защиты, такой как Apple TouchID/FaceID или Google Imprint" по умолчанию. Допустимые значения '0' или '1'. |
KEYFLAG_DENY_RENEW_PUBKEY | 0 | Установка параметра ключа "Запрет перерегистрации открытого ключа на сервере" по умолчанию. Является особо рекомендуемым параметром, при подписании акта признания открытого ключа с владельцем ключа ЭП. Допустимые значения '0' или '1'. |
KEYFLAG_SCORING_ENABLED c версии 5.0 |
0 | Установка параметра ключа разрешающего "скоринг" устройства. |
KEYFLAG_AUTOSIGN_ENABLED c версии 5.0 |
0 | Установка параметра ключа разрешающего автоподтверждение транзакций на основании результатов скоринга. |
KEYFLAG_REMOTE_UPDATE_ENABLED c версии 5.2 |
1 | разрешает выполнять восстановление ключа с помощью кодового слова или другого механизма дополнительной аутентификации пользователя. |
KEYFLAG_NFC_POLICY c версии 5.3 |
0 | Установка параметра ключа разрешающего использование NFC-токена для хранения ключа ЭП и генерации ЭП с использованием хранящегося на карте ключа ЭП. Доступны следующие варианты: — «0» – Запрещено; — «1» – Разрешено; — «2» – Обязательно. |
KEYFLAG_TELEGRAM_ENABLED c версии 5.4 |
0 | Разрешение отправки уведомлений через Telegram. |
KEYFLAG_ONLINE_CREDENTIALS c версии 5.5 |
1 | Установка параметра ключа по умолчанию "Включение ограничения количества попыток ввода пароля ключа и кода активации". |
c версии 3.6.368: | ||
NETWORK_TIMEOUT | 1000 | Количество миллисекунд, которое poster ожидает при установке соединения (при отправке коллбэка, событий, скоринге). |
c версии 3.8, но не выше версии 5.0: | ||
APP_ID_FOR_PUSHER | {"Android":"ru.safe-tech.PayControl.v3","iOS":"ru.safe-tech.PayControl.v3"} | Идентификатор приложения "по умолчанию" (app/bundle id) для отправки на него Push-уведомлений (актуально для приложений на базе PCSDKv1/PCSDKv2) |
c версии 5.0: | ||
QR_LOGO_LOCATION | c версии 5.2 /opt/pc/qr_logo.png |
Путь к файлу логотипа, располагающемуся на QR коде. Если не задан - ничего не выводится. Допустимо использование png/jpg. Рекомендуемый максимальный размер — не более 10% от площади QR-кода. Однако, чем ближе размер логотипа к этой цифре, тем чаще будет отображаться QR без него, т.к. будет срабатывать механизм защиты от ошибок. |
QR_COLOR | #066AB2 | Цвет QR-кода. Применяется только если задан путь к файлу логотипа, располагающемуся на QR-коде. |
CLEAN_LOGIN_TRANSACTION | 1 | Включение удаления данных (ext_pulp) использующихся для механизма входа по QR. |
CALLBACK_VERSION | 3 | Версия коллбэка: — «1» – Формат PC 3.5-3.9 — «2» – Формат PC 5.0 — «3» – Формат PC 5.1+ |
ARM_RKS_ENABLED | 1 | Включение АРМ РКС |
SCORING_SETTINGS | {} | Настройки параметров скоринга устройства с помощью FACCT FP |
EXT_AUTH_SETTINGS | {} | Настройки способа дополнительной аутентификации (в формате JSON) |
c версии 5.1: | ||
LICENSE_FILE_LOCATION | — C:\pc\ — /opt/pc/ |
Место поиска лицензионных файлов. При указании пути поиска файла лицензии для OC Windows, необходимо экранировать имеющиеся в пути слеши, например: C:\\custom_path\\ |
USER_CACHE_TTL | 600 | Время жизни валидированной пользовательской записи в кэше для Flexible-типов лицензирования (секунд) |
USER_CACHE_SIZE | 100 | Количество сохраняемых в кэше валидированных пользовательских записей для Flexible-типов лицензирования |
LICENSE_CACHE_TTL | 600 | Срок жизни лицензии в кэше (секунд) |
LICENSE_CACHE_SIZE | 10 | Количество лицензий для их загрузки в кэш |
SYSTEM_CACHE_TTL | 600 | Срок жизни параметров прикладной системы в кэше (секунд) |
SYSTEM_CACHE_SIZE | 10 | Количество прикладных систем для сохранения их параметров в кэше |
c версии 5.1.140: | ||
SET_APP_ID_FOR_TRANSACTION_CALLBACK | 0 | Передавать app_id в коллбэке о подтверждении транзакции (0 — не передавать, 1 — передавать) |
c версии 5.2: | ||
CHECK_HTTP_AUTH_HEADER_TIME_INTERVAL | 1 | Проверка значения времени при HTTP-авторизации (0 — не проверять, 1 — проверять) |
EXT_AUTH_FAIL_LIMIT | 5 | Количество неуспешных попыток использовать дополнительный метод аутентификации, после чего этот доп. метод будет отключён |
PKI_SETTINGS_PATH | /opt/pc/pki/pki-settings.properties | Путь к файлу настроек PKI-коннектора |
SERVER_SIGNER_PERS_URL | http://localhost:8080/pc-server-signer-api/personalize_async | Адрес для персонализации пользователя с серверной подписью |
PDF_SIGNATURE_SETTINGS | {"position": { "x": 0, "y": 0, "width": 220, "height": 65}, "frame_color": "#004D99", "pdf_permissions": 1, "visualize_signature": true, "image_uri":"/opt/pc/logo.svg"} | Параметры визуализации PDF-подписи Назначение параметров: — position x,y — место размещения штампа подписи; — width, height — ширина и высота штампа; — frame_color — цвет рамки штампа; — pdf_permissions — запрет на дальнейшее модифицирование файла, в т.ч. на последующее наложение ЭП (допустимые значения 0/1); — visualize_signature — отображать штамп визуализации подписи (допустимые значения true/false); — image_uri — месторасполажение SVG-файла для добавления пиктограммы в штамп подписи. |
c версии 5.4: | ||
SEND_EVENT_IN_CALLBACK | 1 | Передавать информацию о событии в коллбэке (0 — не передавать, 1 — передавать) |
c версии 5.5: | ||
ONLINE_ACTIVATION_ATTEMPTS | 5 | Количество попыток ввода кода активации ключа |
ONLINE_PASSWORD_ATTEMPTS | 10 | Количество попыток ввода пароля (пин-кода) к ключу |
GOST_IMIT_PROVIDER | Криптопровайдер для формирования ГОСТ-имитовставки | |
c версии 5.5.304: | ||
ALLOW_EVENTS_REMOVE | 0 | Включение возможности полного удаления событий через из БД через API |
EVENTS_TRANSPARENT | 0 | Отключение записи информации о событиях в БД PCS при включённом сборе информации о событиях: — 0 – Запись событий в БД включена. Информация о событиях отправляется (на events_post_url) и записывается в БД. — 1 – Запись событий в БД отключена. События только отправляются. |
c версии 5.5.306: | ||
HTTP_HEADERS_PASSTHROUGH | 0 | Включение передачи всех получаемых HTTP заголовков, в т.ч. при отправлении коллбэков и инфомрации о событиях (кроме тех заголовков, значения которых, при отправке запросов, должны быть иными) |
c версии 6.0: | ||
QR_DATA_LENGTH_LIMIT | 2048 | Максимальный объём данных для создания QR-кода (символов) |
DEFAULT_CRYPT_TYPE | ECDSA | Криптоалгоритмы по умолчанию для выпускаемых ключей: — "ECDSA": ECDSA, HMACSHA256, AES/CBC/PKCS5Padding; — "CryptoPro JCP 2.0": ГОСТ 34.10, ГОСТ 34.11, ГОСТ 28147/CBC/PKCS5Padding. |
Конфигурирование PCE
Конфигурирование модуля External производится через переменные окружения, либо через файл application.yml
.
Для модуля возможно переопределить следующие параметры:
server:
port: 8081
pc:
external:
locale: ru
themes-path: /opt/pc/pc_themes/
network-timeout: 5000
deeplink-scheme: paycontrol
server:
url: http://localhost:8080/pc-api/
kyc:
url: http://localhost:8083/
logging:
level:
tech.paycon: info
где,
Параметр | Значение по умолчанию | Описание |
---|---|---|
server.port | 8081 | Порт, который будет прослушивать сервис |
pc.external.locale | ru | Язык, на котором будут возвращаться серверные ошибки. Допустимые значения: — ru — русский; — en — английский. |
pc.external.themes-path | /opt/pc/pc_themes/ | Путь для размещения файлов тем оформления мобильного приложения |
pc.external.network-timeout | 5000 | Таймаут для ожидания результатов сетевых запросов (мс) |
pc.external.deeplink-scheme | paycontrol | Схема для формирования диплинка, используемая при настройке отправки уведомлений через Telegram |
pc.external.server.url | http://localhost:8080/pc-api/ | URL доступа к API модуля PCS |
pc.external.kyc.url | http://localhost:8083/ | URL доступа к API модуля eKYC |
logging.level.tech.paycon | info | Уровень логирования модуля |
При передаче параметров через переменные окружения, необходимо использовать заглавные буквы, уровни вложенности разделять подчёркиванием (_
), дефисы опускать. Пример для значений по умолчанию в виде переменных окружения.
LOGGING_LEVEL_TECH_PAYCON=info
PC_EXTERNAL_LOCALE=ru
PC_EXTERNAL_THEMESPATH=/opt/pc/pc_themes/
PC_EXTERNAL_NETWORKTIMEOUT=5000
PC_EXTERNAL_DEEPLINKSCHEME=paycontrol
PC_EXTERNAL_SERVER_URL=http://localhost:8080/pc-api/
PC_EXTERNAL_KYC_URL=http://localhost:8083/
Конфигурирование PCP
Конфигурирование модуля Pusher производится через переменные окружения, либо через файл application.yml
.
Для модуля возможно переопределить следующие параметры:
server:
port: 8082
pc:
pusher:
config-path:
logging:
level:
tech.paycon: info
где,
Параметр | Значение по умолчанию | Описание |
---|---|---|
server.port | 8082 | Порт, который будет прослушивать сервис |
pc.pusher.config-path | "/opt/pc/pc_pusher", "C:\pc\pc_pusher" | Место поиска директории с конфигурационными файлами модуля PCP |
logging.level.tech.paycon | info | Уровень логирования модуля |
Аутентификационные данные и шаблоны для отправки Push-уведомлений в приложения PC уже присутствуют в модуле PCP. Таким образом, для типового использования с приложением PC конфигурирование модуля не требуется. Изменение параметров конфигурации может понадобится для добавления аутентификационных данных и шаблонов уведомлений для отправки Push-уведомлений в приложения заказчика, или, например, для включения режима отладки.
После установки или изменения значений параметров конфигурации, службу необходимо перезапустить.
В параметры конфигурации входят:
- общие параметры модуля;
- аутентификационные данные для приложения (дифференцируются по application/bundle id);
- шаблоны для прикладных систем (дифференцируются по systemid).
Поиск параметров конфигурации осуществляются в следующих директориях последовательно, до нахождения первой из перечисленных:
- /opt/pc/pc_pusher
- C:\\pc\\pc_pusher
Структура директории
.
├── apps
│ ├── com.example.corp.dev.json
│ ├── com.example.cort.json
│ ├── com.example.retail.dev.json
│ └── com.example.retail.json
├── systems
│ └── 3550fa38-5d17-4fbf-a660-506227a2ed0e.json
└── pusher.conf.json
Параметры конфигурации PC Pusher
Свойство | Описание |
---|---|
proxy | Параметры для подключения через прокси |
notification_status_buffer_size | Размер буфера для хранения статусов отправляемых уведомлений |
core_size | Первоначальное количество воркеров |
queue_size | Порог очереди сообщений на отправку, после при достижении которого будет увеличено количество воркеров. Количество воркеров может увеличиваться до укзананного в параметре max_core_size значения. |
max_core_size | Максимальное количество воркеров. Если очередь заполнилась максимально, то возвращается ошибка "TASKS_QUEUE_IS_FULL" (HTTP 400, PC_Error 313). |
performance_log | Включение демон-процесса для генерация отчёта о производительности PCP и его вывода в журнал работы. Требуется включение debug_info . |
performance_log_period | Периодичность генерации и вывода отчёта производительности в секундах |
Пример конфигурационного файла PCP
Приведённые значения установлены по-умолчанию
{
"notification_status_buffer_size": 1000,
"proxy": {
"host": null,
"port": 3128,
"username": null,
"password": null
},
"push_tasks_pool": {
"core_size": 5,
"max_core_size": 50,
"queue_size": 500
},
"performance_log": false,
"performance_log_period": 1000
}
Аутентификационные данные для приложений
Аутентификационные данные для отправки push-уведомлений в приложения задаются в файлах с именем %app_id%.json
в директории apps
(где %app_id%
— application/bundle ID).
Для iOS достаточно только одного из перечисленных вариантов аутентификации (p8/p12/firebase).
Пример файла с аутентификационными данными:
{
"android": {
"type": "service_account",
"project_id": "...",
"private_key_id": "...",
"private_key": "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----",
"client_email": "...",
"client_id": "...",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "...",
"universe_domain": "googleapis.com"
},
"ios": {
"use_fcm": false,
"apns_p8": {
"use_dev_gate": false,
"apns_key_id": "...",
"apns_team_id": "...",
"apns_key": "-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----"
}
},
"huawei": {
"client_secret": "...",
"client_id": "..."
}
}
Получение аутентификационных данных для приложений
APNS (iOS)
- Зайдите в ваш Apple Developer Account
- Нажмите "Certificates"
- Нажмите "Keys"
- Нажмите the "+" button
- Дайте имя ключу
- Нажмите "Enable" в "Apple Push Notifications Service (APNs)"
- Нажмите "Continue"
- Нажмите "Register"
- Нажмите "Download", p8-файл будет загружен
Key ID будет предоставлен в процессе создания ключа.
Team ID, это идентификатор вашей команды в программе Apple Developer.
Firebase (Android, iOS)
PC Pusher использует FCM API для отправки push-уведомлений.
Чтобы получить учетные данные, пожалуйста, выполните следующие действия:
- Откройте консоль Firebase https://console.firebase.google.com/
- Откройте страницу вашего проекта
- Откройте Project settings для приложения или создайте новое приложение
- Перейдите на вкладку Cloud Messaging
- Убедитесь, что Firebase Cloud Messaging API (V1) включен для вашего приложения
- Нажмите на ссылку "Manage Service Accounts", откроется Google Cloud Console
- Нажмите на запись своей учетной записи службы (должно быть что-то вроде
firebase-adminsdk-AAAAAA@AAAAAAAA.iam.gserviceaccount.com
). - Перейдите на вкладку
Keys
- Нажмите
ADD KEY
и выберите опциюJSON
- Сохраните JSON-файл, предоставленный консолью, на свой компьютер
- Откройте этот файл в текстовом редакторе, скопируйте его содержимое в раздел
android
файла учетных данных вашего приложения
HMS (Huawei)
Пожалуйста, ознакомьтесь с официальной документацией Huawei
Шаблоны push-уведомлений
Шаблоны push-уведомлений в приложения задаются в файлах с именем %systemid%.json
, либо default.json
в директории systems
. Приоритет имеет файл с указанным SystemID. Пример файла с шаблонами:
{
"android": {
"templates": {
"transaction": [
{
"message": {
"token": "%DEVICE_TOKEN%",
"android" : {
"data": {
"type": "PayControl_v2"
},
"notification": {
"tag": "%USER_ID%",
"title": "PayControl",
"body": "Новая операция для подтверждения",
"icon": "paycontrol_push",
"sound": "default"
}
}
}
},
{
"message": {
"token": "%DEVICE_TOKEN%",
"data": {
"type": "PayControl_v2",
"userid": "%USER_ID%",
"transactionid": "%TRANSACTION_ID%"
}
}
}
]
}
},
"ios": {
"templates": {
"transaction": [
{
"aps": {
"alert": "Новая операция для подтверждения",
"sound": "default",
"badge": 1,
"mutable-content": 1,
"category": "NEW_OPERATION"
},
"type": "PayControl",
"userid": "%USER_ID%",
"transactionid": "%TRANSACTION_ID%",
"pc_notification_type": "alert",
"pc_notification_priority": 10,
"pc_notification_timeout": 600,
"pc_collapse_id": "%USER_ID%"
}
]
}
},
"huawei": {
"templates": {
"transaction": [
{
"validate_only": false,
"message": {
"android": {
"notification": {
"tag": "%USER_ID%",
"title": "PayControl",
"body": "Новая операция для подтверждения",
"icon": "paycontrol_push",
"click_action": {
"type": 3
}
}
},
"token": [
"%DEVICE_TOKEN%"
]
}
},
{
"validate_only": false,
"message": {
"android": {
"collapse_key": -1,
"urgency": "HIGH",
"ttl": "86400",
"data": "{\"type\": \"PayControl_v2\",\n\"userid\": \"%USER_ID%\",\"transactionid\": \"%TRANSACTION_ID%\"}"
},
"token": [
"%DEVICE_TOKEN%"
]
}
}
]
}
}
}
Шаблоны должны быть помещены в массив [os-type]->templates->transaction
и *ДОЛЖНЫ * соответствовать спецификациям APNS / FB / HMS.
Каждое значение в массиве интерпретируется как конкретное push-уведомление (например, вы можете отправить несколько уведомлений за одну транзакцию).
В шаблонах можно использовать следующие переменные
Переменная | Значение |
---|---|
%DEVICE_TOKEN% | Push-токен, предоставляемый ПК-сервером (обычно регистрируется с помощью PC SDK) |
%USER_ID% | PC User Id |
%TRANSACTION_ID% | PC Transaction Id |
%SYSTEM_ID% | PC System Id |
Конфигурирование PCCRT
Конфигурирование модуля АРМ РКС производится через переменные окружения, либо через файл application.yml
.
Для модуля возможно переопределить следующие параметры:
server:
port: 8084
pc:
crt:
pcs-url: http://localhost:8080/pc-api/
logging:
level:
tech.paycon: info
где,
Параметр | Значение по умолчанию | Описание |
---|---|---|
server.port | 8084 | Порт, который будет прослушивать сервис |
pc.crt.pcs-url | http://localhost:8080/pc-api/ | URL доступа к API модуля PCS |
logging.level.tech.paycon | info | Уровень логирования модуля |
Конфигурирование Server Signer
Конфигурирование модуля Server Signer производится через переменные окружения, либо через файл application.yml
.
Для модуля необходимо установить следующие параметры для подключения к БД PCSS:
spring:
datasource:
url: jdbc:postgresql://db-server/pcss-db-name
username: username
password: password
Для модуля возможно переопределить следующие параметры:
server:
port: 8083
spring:
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
pc:
signer:
secret: ********************************
url: http://localhost:8083/pc-server-signer-api/confirm_async
pcs-url: http://localhost:8080/pc-api/
logging:
level:
tech.paycon: info
где,
Параметр | Значение по умолчанию | Описание |
---|---|---|
server.port | 8083 | Порт, который будет прослушивать сервис |
spring.jpa.database-platform | org.hibernate.dialect.PostgreSQLDialect | Диалект hibernate для подключения к БД. Другие возможные значения: — org.hibernate.dialect.OracleDialect; — org.hibernate.dialect.SQLServer2012Dialect |
pc.signer.secret | * | Секрет для формирования ключа шифрования ключей подписания в БД PCSS |
pc.signer.url | http://localhost:8083/pc-server-signer-api/confirm_async | URL отправки уведомлений модулем PCS модулю PCSS о новой транзакции для подписания |
pc.signer.pcs-url | http://localhost:8080/pc-api/ | URL доступа к API модуля PCS |
logging.level.tech.paycon | info | Уровень логирования модуля |
Включение и конфигурирование HTTPS
Добавление сертификата
Для включения HTTPS необходимо сформировать P12-файл, содержащий ключ и цепочку сертификации. После этого необходимо указать в настройках сервиса реквизиты к этому файлу.
Пример для файла конфигурации модуля в YAML
server:
port: 8443
ssl:
key-store-type: PKCS12
key-store: file:keystore.p12
key-store-password: changeit
protocol: TLS
Пример для docker-compose
environment:
- SERVER_PORT=8443
- SERVER_SSL_KEY-STORE-TYPE=PKCS12
- SERVER_SSL_KEY-STORE=file:keystore.p12
- SERVER_SSL_KEY-STORE-PASSWORD=changeit
- SERVER_SSL_PROTOCOL=TLS
Включение аутентификации входящих соединений
Для аутентификации входящих подключений с помощью сертификата клиента (mTLS) необходимо включить требование аутентификации, и указать хранилище доверенных сертификатов.
Пример для файла конфигурации модуля в YAML:
server:
ssl:
client-auth: need
trust-store: file:truststore.p12
trust-store-password: changeit
Пример для docker-compose:
environment:
- SERVER_SSL_CLIENT-AUTH=need
- SERVER_SSL_TRUST-STORE=file:truststore.p12
- SERVER_SSL_TRUST-STORE-PASSWORD=changeit
Добавление сертификатов корпоративных УЦ
Для корректной валидации подключения к хостам, использующих сертификат, выпущенный корпоративным УЦ, необходимо передать Java путь к jks-контейнеру и пароль, хранящий корневой и промежуточные сертификаты конечного хоста. Пример добавления сертификата в контейнер:
keytool -keystore CustomerStore.jks -storepass changeit -alias LocalRoot -import -file localhost.crt
Пример передачи пути и пароля к контейнеру с сертификатами УЦ для docker-compose:
environment:
- JAVA_TOOL_OPTIONS=-Djavax.net.ssl.trustStore=/opt/pc/CustomerStore.jks -Djavax.net.ssl.trustStorePassword=changeit
Пример передачи параметров через переменную окружения:
JAVA_TOOL_OPTIONS='-Djavax.net.ssl.trustStore=/opt/pc/CustomerStore.jks -Djavax.net.ssl.trustStorePassword=changeit'
Параметры ключа
При создании запроса на генерацию ключевой информации пользователя, могут быть установлены параметры, перечисленные ниже.
Отпечаток устройства
withFingerPrint — указывает, осуществлять ли привязку устройства к Пользователю PC. В случае наличия в запросе на создание пользователя параметра «флаг привязки пользователя к устройству» со значением «true» при проверке кода подтверждения будет использован отпечаток устройства пользователя. Отпечаток устройства вносится в информацию о пользователе путем вызова метода «Сохранение отпечатка устройства».
Флаг не может быть использован одновременно с флагом указывающим, на тип пользователя "Серверная подпись".
Сбор событий
collectEvent — флаг, указывающий необходимость передачи мобильным приложением информации о событиях и сохранения её сервером в базе данных PC.
Информация об устройстве
collectDeviceInfo — флаг, указывающий необходимость сбора информации об устройстве в составе информации о событии. Учитывается только в случае, если установлен флаг collectEvent.
Информация о сим-карте
collectDeviceSIMInfo — флаг, указывающий необходимость сбора информации о телефоне (SIM-карте). При включении – мобильное устройство передаёт информацию, относящуюся к телефону и SIM-карте в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На Android-устройстве необходимо дополнительное разрешение приложению на доступ к информации о телефоне.
Информация о местоположении устройства
collectDeviceLocation — флаг, указывающий необходимость сбора информации о местоположении устройства. При включении – мобильное устройство передаёт координаты местоположения устройства в составе информации об устройстве. Учитывается только если установлен флаг collectDeviceInfo. На мобильном устройстве необходимо дополнительное разрешение на доступ к геолокации.
Запрет перерегистрации открытого ключа
denyRenewPublicKey — флаг, запрещающий перерегистрацию открытого ключа на сервере, если открытый ключ уже был зарегистрирован ранее. Использование этого флага предотвращает возможность "дружественного фрода", когда пользователь подписывает акт признания открытого ключа (если подписание акта признания предусмотрено организацией выпускающей ключ), заново добавляет ключ (при этом асимметричная ключевая пара будет сгенерирована новая), и использует его для подписания. Однако, в акте признания будет неактуальный ключ, что даст возможность пользователю попытаться опротестовать транзакцию, на основании того, что ЭП сгенерирована на ключе, открытый ключ которого не признаёт в виду отсутствия акта признания.
С другой стороны, использование этого флага будет препятствовать добавлению ключа на мобильное устройство вновь, в случае его удаления из приложения или удаления приложения. Таким образом, при использовании этого флага, ключевая информация, полученная от организации, выпустившей ключ может быть использована для добавления ключа в приложение лишь один раз.
Параметры сохранения ключевой информации на устройстве
Запрет использования механизмов безопасности ОС
denyStoreWithOSProtection — флаг, запрещающий сохранение ключа с использованием механизмов безопасности операционной системы мобильного устройства (TouchID/FaceID, Google Key Store).
Требования к паролю
passPolicy указывает вариант требований к сложности пароля при сохранении ключевой информации на мобильном устройстве. Доступны следующие варианты:
- «0» — минимум 6 символов, пароль не обязателен;
- «1» — минимум 6 символов, пароль обязателен;
- «2» — минимум 8 символов (обязательно использование A-Z и a-z) пароль обязателен;
- «3» — минимум 8 символов (обязательно использование A-Z, a-z и 0-9) пароль обязателен.
Скоринг и автоподпись
Скоринг
scoring_enabled — разрешение "скоринга" устройства и поведенческого анализа с помощью дополнительного антифрод-модуля Fraud Hunting Platform (бывш. Secure Bank) от F.A.C.C.T. (ранее Group IB). Лицензируется отдельно.
Во время использования приложения и, возможно (в зависимости от подключённой функциональности) интернет-банка ДБО производится оценка устройства и поведенческой модели использования и её соответствие типичным паттернам поведения этого пользователя.
Автоподписание
autosign_enabled — разрешение автоподписи транзакций на основе результата скоринга устройства и поведенческого анализа. Для автоподписи используется дополнительная асимметричная ключевая пара. Использование этого модуля лицензируется/оплачивается отдельно.
В приложении PС реализована функциональность автоматического подписания с помощью ключа автоподписи. При этом, решение на использование ЭП выработанной на ключе автоподписи принимает сервер PC на основании скоринга. Если уровень оценки не ниже заданного, то сервер разрешает использовать для подтверждения ЭП на ключе для автоподписания.
Отложенный ввод в действие ключевой информации
delayed — флаг отложенного ввода в действие ключа. При его установке ключ, используемый для подтверждения транзакций и проверки кодов аутентификации, не заменяется. Сгенерированный новый ключ помечается как отложенный. Его ввод в действие выполняется одним из следующих способов:
- путем вызова метода Ввод отложенного ключа в действие;
- путем вызова одного из методов: Сохранение отпечатка устройства, Регистрация открытого ключа, Регистрация устройства для отправки PUSH-уведомлений с кодом аутентификации, сформированным на отложенном ключе. Выполнять обновление ключевой информации с флагом отложенного ввода можно неограниченное количество раз. При этом сформированная ранее отложенная ключевая информация будет заменена новой отложенной ключевой информацией. При выполнении обновления без данного флага вся отложенная ключевая информация далее считается недействительной и не может быть введена в действие.
Если значение опционального флага не указано, принимается значение равное «false».
Восстановление ключа
remote_update_enabled — разрешает выполнять восстановление ключа с помощью кодового слова или другого механизма дополнительной аутентификации пользователя.
Серверная подпись
Флаг, указывающий на то, что пользователь подлежит регистрации в модуле серверной подписи, а не в мобильном устройстве. При этом компонент серверной подписи (PCSS) должен быть развернут и настроен. Описание вызовов API для взаимодействия с компонентом доступно в описании API PC.
Флаг не может быть использован одновременно с флагом включения проверки отпечатка устройства.
Использование NFC-токенов
nfc_policy — флаг, определяющий политику использования NFC-токенов на мобильном устройстве для хранения ключа ЭП и генерации ЭП с использованием хранящегося на карте ключа ЭП. Доступны следующие варианты:
- «0» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве запрещено. Для всех криптографических операций используется ключевая пара генерируемая на самом мобильном устройстве;
- «1» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве опционально. В криптографических операциях может быть использована как ключевая пара, генерируемая на мобильном устройстве, так и ключевой контейнер, хранящийся на NFC-карте;
- «2» – использование NFC-карты, хранащей закрытый ключ, на мобильном устройстве обязательно. Для всех криптографических операций используется ключевая пара, хранящаяся в контейнере на NFC-карте;
Если опциональное значение nfc_policy не установлено, принимается значение равное «0».
Разрешение отправки уведомлений через Telegram
telegram_enabled — флаг, разрешающий отправку уведомлений о наличии неподтверждённых транзакций через Telegram
Контроль количества попыток ввода кода активации и пароля
online_credentials — ограничивает количество некорректных попыток ввода кода активации и пароля к ключу пользователя. При превышении, определяемого сервером, количества неверных попыток ввода, пользовательский ключ блокируется.
Кодирование значений флагов в составе ключевой информации
В составе QR-кода, значения передаются в 7-ой строке данных (для версии сервера 3.x) или в параметре "key_flags" (для версии сервера 5 и выше), целым числом. Значения флагов вычисляются с помощью битовой маски.
KEYFLAG_WITH_FINGERPRINT = (1 << 0);
KEYFLAG_COLLECT_EVENTS = (1 << 1);
KEYFLAG_COLLECT_DEVICEINFO = (1 << 2);
KEYFLAG_COLLECT_SIMINFO = (1 << 3);
KEYFLAG_COLLECT_LOCATION = (1 << 4);
KEYFLAG_PASS_POLICY_POS = (1 << 5); // password policy encoded by 2 bits (4 values)
KEYFLAG_PASS_POLICY_POS = (1 << 6); // password policy encoded by 2 bits (4 values)
KEYFLAG_DENY_STORE_WITH_OS_PROTECTION = (1 << 7);
KEYFLAG_DENY_RENEW_PUBKEY = (1 << 8);
KEYFLAG_SCORING_ENABLED = (1 << 9);
KEYFLAG_AUTOSIGN_ENABLED = (1 << 10);
KEYFLAG_REMOTE_UPDATE_ENABLED = (1 << 11);
KEYFLAG_SERVERSIGNER = (1 << 12);
KEYFLAG_NFC_ENABLED_POS = (1 << 13); // NFC policy encoded by 2 bits (3 values is used)
KEYFLAG_NFC_ENABLED_POS = (1 << 14); // NFC policy encoded by 2 bits (3 values is used)
KEYFLAG_TELEGRAM_ENABLED = (1 << 15);
KEYFLAG_ONLINE_CREDENTIALS = (1 << 16);
События
Свойства записи о событии
Наименование свойства события | Описание |
---|---|
event_id | Идентификатор события в журнале аудита системы |
created_at | Время создания записи в журнале аудита системы |
user_id | Идентификатор пользователя |
transaction_id | Идентификатор транзакции |
session_id | Идентификатор сессии на мобильном устройстве |
device_event_id | Идентификатор события на мобильном устройстве |
device_time | Время события на мобильном устройстве |
auth_code | Код аутентификации запроса |
request_hash | Хэш-сумма запроса |
request_hmac | Код аутентификации тела запроса |
request_type | Тип запроса/события |
device_info | Информация об устройстве |
requester_ip_address | IP адрес источника запроса |
request_result | Результат выполнения запроса (0 - успех, другое |
operationid | Идентификатор операции |
c версии 5.3: | |
request_url | Адрес |
pc_version | Компонент PC, его версия и версия API |
system_id | Идентификатор прикладной системы |
connection_info | Данные о сетевом подключении, связанного с событием |
pc_instance_name | Название экземпляра PC. Опциональное значение, которое может быть задано через установку параметра pc_instance_name окружения Java сервера компонента PCS, например -Dpc_instance_name=pcs-node-1 |
c версии 5.4: | |
device_fingerprint | Отпечаток устройства (если он требуется, определяется с помощью соответствующего флага при выпуске ключа) |
key_index | Порядковый номер ключа для пользователя |
Типы запросов/событий
Событие | Описание |
---|---|
decline_transaction | Отмена транзакции |
autoconfirm_transaction | Автоподтверждение транзакции |
confirm_transaction | Подтверждение транзакции пользователем |
create_transaction | Создание транзакции |
get_autoconfirm_list | Получение списка транзакций для автоподтверждения |
get_transactions | Получение списка транзакций для подтверждения |
get_transaction_info | Получение информации о транзакции |
get_transaction_data | Получение данных транзакции |
get_transaction_binary_data | Получение бинарных данных транзакции |
attempt_scoring_details | Детали скоринга попытки автоподтверждения |
change_user | Изменение (обновление данных) пользователя |
create_user | Создание пользователя |
renew_key_challenge | Отправлен челлендж для подтверждения удалённого (по инициативе мобильного приложения) обновления ключевой информации |
renew_key_response | Получен ответ на челлендж для удалённого (по инициативе мобильного приложения) обновления ключевой информации |
export_user_key | Экспорт инициализационной ключевой информации |
update_user_key | Запрос на обновление ключа пользователя от прикладной системы |
remote_update_user_key | Запрос на обновление ключа пользователя от прикладной системы двумя частями (QR-код + код активации), может возникнуть только при получении запроса через SOAP-API |
delete_user | Удаление пользователя |
get_user_info | Получение информации о пользователе |
remote_update_set_template | Установка шаблона для удалённого восстановления ключа пользователя |
remote_update_get_available_template | Получение списка доступных шаблонов для удалённого восстановления ключа пользователя |
remote_update_get_requisites | Получение установленных параметров для удалённого восстановления ключевой информации |
get_scoring_settings | Получение параметров конфигурации скоринга |
register_system | Регистрация прикладной системы |
get_system_info | Получение информации о прикладной системе |
change_system | Изменение параметров прикладной системы |
remove_system | Удаление прикладной системы |
system_report | Получение функционального отчёта об использовании системы |
billing_close | Закрытие расчётного периода для постоплатной системы расчётов |
rks_events_data | Получение информации о событиях для указанного пользователя через АРМ РКС (или посредством API на эндпоинт РКС в составе API сервера PC Server) |
rks_transactions_data | Получение информации о транзакции через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
rks_check_confirmation | Проверка значения ЭП через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
rks_user_details | Получение информации о пользователе через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
key_deleted | Ключевая информация удалена с мобильного устройства |
root_detected | Обнаружен root/jailbreak на мобильном устройстве |
high_risk_apps_detected | Обнаружены потенциально вредоносные приложения |
password_incorrect | Введён некорректный пароль доступа к ключевой информации на мобильном устройстве |
c версии 5.2: | |
get_signed_pdf | Получение подписанного PDF |
reassemble_pdf | Добавление ране сформированной ЭП в оригинальный PDF файл |
create_operation | Создание операции |
update_operation | Изменение операции |
get_operation_info | Получение информации об операции |
get_operation_list | Получение списка операций |
get_operation_data_list | Получение данных операции |
operations_process | Обработка операций |
get_event_info | Получение подробной информации для указанного события |
create_certificate | Создание PKI сертификата пользователя Только в 5.2. С 5.3 изменено на create_certificate_request . |
get_certificate_status | Получение статуса сертификата пользователя |
revoke_certificate | Отзыв сертификата пользователя |
rks_check_cms | Проверка значения ЭП CMS через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
rks_check_pdf | Проверка значения ЭП PDF через АРМ РКС (или посредством API на эндпоинт РКС в составе API PC Server) |
c версии 5.3: | |
get_events | Получение событий с использованием фильтров при выполнении запроса |
clean_events | Очистка информации из записей о событиях, очищаются поля device_info , event_data , connection_info . |
password_correct | Событие ввода пароля |
password_changed | Событие изменения пароля |
create_certificate_request | Создание запроса на сертификат пользователя |
issue_certificate | Запрос на сертификат пользователя подписан. Выпуск сертификата |
gen_confirm_code | Генерация сервером кода подтверждения на симметричном ключе пользователя |
check_confirm_code | Проверка кода подтверждения выработанного на симметричном ключе пользователя для подтверждаемых без создания транзакции данных |
gen_common_confirm_code | Генерация сервером кода подтверждения на симметричном ключе сервера для подтверждаемых без создания транзакции данных |
check_common_confirm_code | Проверка кода подтверждения выработанного на симметричном ключе сервера для подтверждаемых без создания транзакции данных |
c версии 5.5: | |
get_credentials | Попытка получения ключа доступа к ключу на мобильном устройстве |
get_credentials_salt | Запрос соли для установки пароля к ключу пользователя |
set_credentials | Установк пароля к ключу пользователя на сервере |
c версии 6.0: | |
refresh_properties | Перечитывание и загрузка параметров конфигурации PCS из БД и отображение значений в теле ответа на запрос получения этих параметров |
load_and_refresh_properties | Установка новых параметров PCS |
Информация о мобильном устройстве
Сбор информации об устройстве – это возможность, которую может использовать организация, выпустившая ключ.
Флаги, разрешающие сбор информации, устанавливаются для ключа при его выпуске (эта возможность должна быть реализована в прикладной системе).
Состав информации
Собираемую информацию об устройстве можно разбить на две группы:
- Информация, для сбора которой не требуется предоставление дополнительного разрешения приложению;
- Информация, для сбора которой приложению требуется запросить дополнительные разрешения.
Для iOS и Android производится попытка собрать всю доступную информацию. Поля для собираемой информации для обеих платформ одинаковы. В зависимости от того, какая платформа какую информацию отдаёт, они либо заполняются, либо остаются пустыми.
В другом разрезе собираемую информацию можно группировать как:
- Информация, общая для платформ;
- Информация, специфичная для платформы (Android/iOS).
Информация не требующая дополнительных разрешений
При включении опции сбора информации собирается (при наличии технической возможности получения такой информации):
базовая об устройстве:
производитель, модель, версия ОС, часовой пояс, установленные значения языковых параметров устройства, а также сведения об аппаратных составляющих (марки процессора, дисплея и т.д.);
состояние памяти устройства:
установлена, либо нет карта памяти, её объём, объём ОЗУ и встроенной памяти устройства;
информация о приложении (собственно об экземпляре, отправляющем эту информацию):
Название, версия и идентификатор мобильного приложения (BundleID);
информация о Wi-Fi подключении:
название подключённой сети, IP и MAC адрес;
информация о физических сенсорах устройства:
вывод информации о доступных приложению данных физических сенсоров, таких как акселерометр, датчик освещённости и т.д.
Информация, требующая предоставление разрешения
При включении дополнительных двух опций можно включить сбор (при наличии технической возможности получения такой информации):
геоданных устройства (Android и iOS):
значение долготы и широты;
информации о телефоне и SIM-карте (iOS разрешение не запрашивает):
оператор сотовой связи, количество сим-карт, страна сим-карты
Пример
Android
{
"device_fingerprint": "0dffffa8ea589f717f2f0f1033adf4053a179c73a682d9f82edc81f98bbaa1bf",
"request_type": "get_transactions",
"pc_instance_name": "pcs-node-1",
"system_id": "f13e4375-e429-496c-ad1e-0fc3c3ecfb53",
"key_index": 1,
"session_id": "ab67a3e2-4503-4a46-8bc4-5016d16370d9",
"created_at": 1703499267298,
"request_url": "http:\/\/pcs:8080\/pc-api\/ext\/f13e4375-e429-496c-ad1e-0fc3c3ecfb53\/users\/devapi7postpay-c9b044e1-94fb-4539-a3b4-68c7b6d58ea3\/transactions\/get_list",
"requester_ip_address": "212.46.10.83, 192.168.88.52,192.168.208.12",
"request_result": 0,
"pc_version": {
"pc_version": "6.0.94",
"product": "PC Server",
"pc_api_version": 7
},
"device_event_id": "de8cba89-856c-45b7-bcb1-73e18661bedf",
"device_info": {
"app": {
"appName": "PayControl",
"packageName": "org.paycontrol.app",
"appVersionName": "6.0.375",
"appVersionCode": 375
},
"wifi": {
"localIp": "192.168.17.10",
"userAgent": "Mozilla\/5.0 (Linux; Android 12; SM-G970F Build\/SP1A.210812.016; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/120.0.6099.144 Mobile Safari\/537.36__Dalvik\/2.1.0 (Linux; U; Android 12; SM-G970F Build\/SP1A.210812.016)",
"SSID": "wifi-name"
},
"memory": {
"totalInternalMemorySize": "118053482496",
"totalRAM": "5542296"
},
"location": {
"latitude": "55.8816616",
"accuracy": "15.92",
"longitude": "37.7001385"
},
"osName": "Android",
"device": {
"product": "beyond0lteser",
"screenWidth": 1080,
"simulator": 0,
"screenHeight": 2119,
"timeZone": "Europe\/Moscow",
"locale": "en",
"manufacturer": "samsung",
"osVersion": "12",
"root": 0,
"name": "SGS10e",
"model": "SM-G970F",
"sdkVersion": 31,
"screenDensity": "3.0"
},
"Android": {
"memory": {
"totalExternalMemorySize": "118053482496",
"hasExternalSDCard": 1
},
"sim": {
"networkCountryIso": "ru",
"phoneType": "GSM",
"simCount": 2,
"simCountryIso": "ru",
"roaming": 0,
"simOperatorName": "Beeline",
"mmsUrl": "http:\/\/wap.samsungmobile.com\/uaprof\/SAMSUNGUAPROF.xml",
"mmsAgent": "SAMSUNG-ANDROID-MMS\/SM-G970F",
"networkOperatorName": "beeline"
},
"sensor": {
"minDelay": 5000,
"vendor": "STM",
"name": "LSM6DSO Acceleration Sensor",
"maxRange": 78.45320129394531,
"type": 1,
"version": 15932,
"resolution": 0.002394201699644327
},
"device": {
"scaledDensity": 3.3000001907348633,
"buildBrand": "samsung",
"buildTime": 1677717204000,
"buildUser": "dpi",
"radioVersion": "G970FXXSGHWB3,G970FXXSGHWB3",
"cpu": "BogoMIPS=52.00;CPU implementer=0x53;CPU architecture=8;CPU variant=0x1;CPU revision=0;Features=fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm dcpop asimddp;processor=7;CPU part=0x003",
"buildID": "SP1A.210812.016",
"defaultSms": "com.samsung.android.messaging",
"deviceID": "a40eff960948fb41",
"buildHost": "21DKG923",
"densityDpi": "480",
"buildVersionCodeName": "REL",
"defaultBrowser": "com.android.chrome",
"certificates": [],
"bootloader": "G970FXXSGHWC1",
"displayVersion": "SP1A.210812.016.G970FXXSGHWC1",
"fingerprint": "samsung\/beyond0lteser\/beyond0:12\/SP1A.210812.016\/G970FXXSGHWC1:user\/release-keys",
"sysAvailableFeatures": "lcZ7yCt+ea7Ot310SW99aq\/GI7U3jwYHP1d4F6Uc1i4=",
"sysSharedLibraryNames": "9CAXPbjcF9Xo5k4CqNbgnTrYIGS5L4JBrum2JMuO05U=",
"device": "beyond0",
"board": "exynos9820",
"hardware": "exynos9820",
"releaseBuildVersion": "12"
}
}
},
"event_id": 53069,
"updated_at": 1703499267323,
"connection_info": {
"dst": {
"port": "8080",
"ip": "192.168.208.3",
"mac": ""
},
"src": {
"port": "54580",
"ip": "192.168.208.6",
"mac": "02-42-C0-A8-D0-03"
}
},
"user_id": "devapi7postpay-c9b044e1-94fb-4539-a3b4-68c7b6d58ea3",
"request_hash": "f0d883cc27680e4996f54d0da797d00b349bcf21353578b394f06d614c1fb34e",
"device_time": 1703499266947,
"request_hmac": "4f6a5ba1b11adb9d3ba1e5502e15801513fd34148c0462cbbdb97f3e1c5d7c9d"
}
iOS
{
"device_fingerprint": "f17ea70cdc97c36b09cc83034ad7479d34b0d708a6e50443fda0faa1b97c32a6",
"transaction_id": "39a11d38-2ec5-4185-b671-e9e520a98679",
"request_type": "get_transaction_data",
"pc_instance_name": "pcs-node-1",
"system_id": "f13e4375-e429-496c-ad1e-0fc3c3ecfb53",
"key_index": 1,
"session_id": "1875568D-9030-451A-B3CB-A14B88BA2A02",
"created_at": 1703499524030,
"request_url": "http:\/\/pcs:8080\/pc-api\/ext\/f13e4375-e429-496c-ad1e-0fc3c3ecfb53\/users\/devapi7postpay-d3d1bd3b-234f-4e5c-a573-72b2584488d5\/transactions\/39a11d38-2ec5-4185-b671-e9e520a98679\/get_data",
"requester_ip_address": "212.46.10.83, 192.168.88.52,192.168.208.12",
"request_result": 0,
"pc_version": {
"pc_version": "6.0.94",
"product": "PC Server",
"pc_api_version": 7
},
"device_event_id": "C0E20926-F843-4CA4-A805-D9E83C7A44ED",
"device_info": {
"app": {
"appName": "PayControl",
"packageName": "org.paycontrol.app",
"appVersionName": "6.0.18",
"appVersionCode": 18
},
"wifi": {
"localIp": "192.168.17.34",
"userAgent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 15_7_9 like Mac OS X) AppleWebKit\/605.1.15 (KHTML, like Gecko) Mobile\/15E148",
"SSID": "wifi-name"
},
"memory": {
"totalInternalMemorySize": "244120",
"totalRAM": "2000"
},
"location": {
"latitude": "55.88147053944517",
"accuracy": "36.0",
"longitude": "37.70028162477736"
},
"osName": "iOS",
"iOS": {
"device": {
"systemFontSize": 14,
"familyNames": "0c6609032db33d5a40e60d9129bfce88538f9a8f1f3a76fa318fb52e30872f1b",
"smallSystemFontSize": 12,
"labelFontSize": 17,
"availableLocaleIdentifiers": "2014f7e175b2bdaaad2bd0c6f79ad658d8edeb9b5c7c18b17789810eae854e8e",
"systemFont": ".SFUI-Regular",
"preferredLanguages": "en-RU, ru-RU, en-GB, zh-Hant-TW, zh-Hant-HK",
"fontNamesForFamilyName": "c0c83c797dd4858358ade23c161cc289e75530afa75bfd7c0772bdc09cdb4fbc",
"userInterfaceIdiom": "phone",
"identifierForVendor": "75C57F5D-2261-4FC1-BC68-07790D3E2E39",
"buttonFontSize": 18
}
},
"device": {
"screenWidth": 375,
"product": "iPhone",
"simulator": 0,
"screenHeight": 667,
"timeZone": "Europe\/Moscow",
"locale": "en_RU",
"manufacturer": "Apple",
"osVersion": "15.7.9",
"root": 0,
"name": "iPhone7 (Pink)",
"screenDensity": "2.0",
"model": "iPhone9,3",
"sdkVersion": 15
}
},
"event_id": 53084,
"updated_at": 1703499524058,
"connection_info": {
"dst": {
"port": "8080",
"ip": "192.168.208.3",
"mac": ""
},
"src": {
"port": "44756",
"ip": "192.168.208.6",
"mac": "02-42-C0-A8-D0-03"
}
},
"user_id": "devapi7postpay-d3d1bd3b-234f-4e5c-a573-72b2584488d5",
"request_hash": "2d06b8e8e74935e03cd25bec58c8f6e904363cc3f7e7388040060cfcf8ebf775",
"device_time": 1703499523986,
"request_hmac": "8eec7e4b1cf032b4b08299ee4a8325535866e910d196bdaa987b4ba1bbb00c6b"
}
Коды ошибок сервисов
Код ошибки | Идентификатор ошибки | HTTP-код | Описание |
---|---|---|---|
0 | NORMAL | 200 | Ошибка отсутствует |
100 | JAVA_INTERNAL_ERROR | 500 | Внутренняя ошибка |
200 | SYSTEM_PROPERTY_ERROR | Ошибка в настройках ИС | |
201 | SYSTEM_ID_IS_NULL | ID системы не задан | |
202 | SYSTEM_ID_IS_WRONG | ID системы неверен | |
203 | SYSTEM_NOT_FOUND | Система не найдена | |
204 | SYSTEM_IS_DELETED | 410 | Система удалена |
205 | SYSTEM_NAME_IS_NULL | Имя системы не задано | |
206 | USER_ID_IS_NULL | ID пользователя не задан | |
207 | USER_ID_PREF_IS_NULL | Префикс ID пользователя не задан | |
208 | USER_NOT_FOUND | Пользователь не найден | |
209 | USER_IS_DELETED | 410 | Пользователь удален |
210 | DS_VERIFY_ERROR | ЭП не верна | |
211 | DS_STRUCT_ERROR | Структура ЭП не верна | |
212 | STORE_TYPE_IS_WRONG | Тип хранилища неверен | |
213 | KEY_CONTAINER_ALIAS_IS_NULL | Alias ключевого контейнера не задан | |
214 | KEY_CONTAINER_NOT_EXISTS | Ключевой контейнер не существует | |
215 | TRANSACTION_DATA_UID_ERROR | Неверные данные транзакции (User ID не совпадает) | |
216 | TRANSACTION_DATA_ERROR | Неверные данные транзакции | |
217 | TRANSACTION_DATA_IS_NULL | Данные транзакции не заданы | |
218 | REPORT_TPL_IS_NULL | Неверный шаблон отчета | |
219 | REQUEST_ERROR | Ошибка в запросе | |
220 | SYSTEM_ID_NOT_UNIQUE | ID системы не уникален | |
221 | REQUEST_SIGNATURE_NOT_VALID | Подпись запроса невалидна | |
222 | SYSTEM_NOT_VALID | Система не является доверенной | |
231 | TRANSACTION_IS_NULL | Транзакция не найдена | |
232 | TRANSACTION_CHECKED | Данные транзакции уже проверены | |
233 | ERROR_PARSE_REGISTER_SYSTEM_INFO | Невозможно распознать запрос на регистрацию системы | |
234 | INCORRECT_USER_TYPE | Некорректный тип пользователя | |
235 | COLLECTION_IS_EMPTY | Пустая коллекция | |
236 | NO_RESULT | Резльтатов нет | |
237 | PIN_IS_EMPTY | Pin-код не задан | |
238 | FPRINT_IS_EMPTY | Отпечаток пользователя не задан | |
239 | OTP_IS_NOT_VALID | Неверный OTP | |
240 | VALID_DATE_EXPIRED | Истек срок регистрации | |
241 | SYSTEM_TYPE_IS_WRONG | Неверный тип системы | |
242 | SPART_LENGTH_IS_WRONG | Неверно задана длина 2-й части ключевой информации | |
243 | DATA_TYPE_IS_WRONG | Неверно задан тип данных | |
244 | INVALID_HMAC | 401 | Код подтвержения неверен |
245 | KEY_INFO_NOT_FOUND | Нет активной ключевой информации | |
246 | WRONG_SYSTEM_TYPE | Неверный тип системы | |
247 | FPRINT_IS_NOT_EMPTY | Отпечаток уже установлен | |
248 | WRONG_AUTH_CODE | 401 | Неверный код аутентификации |
249 | CONFIRM_TYPE_IS_NULL | Не задан тип подтверждения | |
250 | STORE_TYPE_IS_NULL | Не задан тип хранилища | |
251 | DEVICE_TYPE_IS_NULL | Не задан тип устройства | |
252 | TRANSACTION_DATA_TYPE_IS_NULL | Не задан тип данных | |
253 | USER_ID_PREF_TOO_LONG | Префикс ID превышает допустимую длину | |
254 | CONFIRM_CODE_LENGTH_IS_WRONG | 401 | Неверно задана длина кода подтверждения |
255 | CONFIRM_CODE_IS_NULL | Код подтверждения не задан | |
256 | TRANSACTION_ID_IS_NULL | ID транзакции не задан | |
257 | STATUS_LIST_IS_EMPTY | Не задан список статусов | |
258 | DEVICE_ID_IS_NULL | ID устройства не задано | |
259 | DEVICE_TYPE_IS_INCORRECT | Тип устройства неправильный | |
261 | INVALID_OTP | Код подтвержения неверен | |
263 | INVALID_KDF | Неподдерживаемый формат параметра kdfFunc | |
264 | PIN_LENGTH_IS_WRONG | Неверно задана длина пин-кода | |
265 | PUSH_ID_IS_NULL | Идентификатор уведомления не задан | |
267 | TRANSACTION_STATUS_INVALID | Статус транзакции неверный | |
268 | AUTH_CODE_IS_NULL | Код аутентификации не задан | |
269 | STATUS_LIST_IS_INCORRECT | Ошибка в списке статусов | |
270 | DECLINE_REASON_IS_NULL | Причина отмены не передана | |
271 | TRANSACTION_IS_NOT_UNIQUE | Транзакция с таким id уже существует | |
272 | BILL_DATE_CORRUPTED | Дата закрытия биллингового периода сохранена неверно | |
273 | USER_BILL_DATE_CORRUPTED | Дата закрытия биллингового периода пользователя сохранена неверно | |
274 | TRANSACTION_IS_DELETED | 410 | Транзакция помечена как удаленная |
275 | BILL_REQUEST_ALREADY_PROCESSED | Биллинг на данную дату уже закрыт | |
276 | PUBKEY_IS_EMPTY | Открытый ключ отсутствует | |
277 | PUBKEY_IS_NOT_EMPTY | Открытый ключ уже установлен | |
278 | SIGNATURE_IS_INVALID | Подпись неверна | |
279 | SIGNATURE_IS_NULL | Подпись не задана | |
280 | SIGNATURE_AND_CONFIRM_CODE_ARE_NULL | Подпись или код подтверждения должны быть заданы | |
281 | TRANSACTION_EXPIRED | Вышло время жизни транзакции | |
282 | JSON_SCHEME_NOT_SUPPORTED | Версия JSON-запроса не поддерживается | |
283 | JSON_REQUEST_INCORRECT | JSON-запрос не соответствует схеме | |
284 | LICENSE_UPDATE_ERROR | Ошибка загрузки лицензии | |
285 | LICENSE_EXPIRED | Срок действия лицензии истёк | |
286 | LICENSE_USER_COUNT_EXCEEDED | Количество пользователей в лицензии достигнуто | |
287 | BILLING_TYPE_CORRUPTED | Тип лицензирования был изменен | |
288 | HTTP_AUTH_CODE_INVALID | 401 | Авторизация по HTTP-заголовку неуспешна |
289 | NOT_SUPPORTED | 404 | Метод не поддерживается |
290 | EXT_AUTH_TEMPLATE_NOT_FOUND | 401 | Шаблон для дополнительной аутентификации не найден |
291 | EXT_AUTH_FAILED | 401 | Дополнительная аутентификация неуспешна |
292 | EXT_AUTH_TYPE_NOT_SUPPORTED | Тип дополнительной аутентификации не поддерживается | |
293 | EXT_AUTH_NEEDED | Необходима внешняя аутентификация | |
294 | USER_IS_BLOCKED | 423 | Пользователь заблокирован |
295 | KEY_EXPIRED | Срок действия ключа истёк | |
296 | LICENSE_NOT_FOUND | Лицензия не найдена | |
297 | PUSH_NOT_FOUND | Идентификатор уведомления не найден | |
298 | SCORING_SETTINGS_IS_NULL | Данные для скоринга должны быть установлены | |
299 | AUTOSING_SIGNATURE_IS_INVALID | Подпись неверна | |
300 | SERVER_SCORING_SETTINGS_INCORRECT | Настройки скоринга сервера неверны | |
301 | SCORING_FAILED | Ошибка получения скоринга | |
302 | HIGH_SCORING_RISK_LEVEL | Уровень риска слишком высок | |
304 | AUTOSIGN_FAILED | Ошибка автоподписи | |
305 | AUTOSIGN_NOT_ALLOWED | Автоподпись запрещена | |
306 | ATTEMPT_ID_IS_NULL | ID попытки не задан | |
307 | FLEXIBLE_LICENSE_ERROR | Ошибка flexible лицензии | |
309 | LICENSE_ERROR | Ошибка лицензии | |
308 | UNSUPPORTED_BILLING_TYPE | Неподдерживаемый тип биллинга | |
310 | OPERATION_NOT_EXISTS | Операция не существует | |
311 | TRANSACTION_IS_NOT_IN_OPERATION | Транзакция не включена в операцию | |
312 | OPERATION_STATUS_INVALID | Статус операции невалидный | |
313 | CREATE_OPERATION_ERROR | Ошибка при создании операции | |
314 | REMOTE_UPDATE_ERROR | Ошибка обновления ключей по дополнительной аутентификации | |
315 | REMOTE_UPDATE_ERROR_BLOCK | Ошибка обновления ключей по дополнительной аутентификации, лимит попыток исчерпан, пользователь заблокирован | |
316 | REMOTE_UPDATE_DISABLED | Обновление ключа по дополнительной аутентификации отключено | |
317 | OPERATION_EXPIRED | Истекло время для подтверждения операции | |
318 | DN_IS_NULL | Объект Distinguished Name должен быть установлен | |
319 | CERT_REQUEST_PARAMS_IS_NULL | Объект Certificate Request должен быть установлен | |
320 | CERT_ISSUE_ERROR | Ошибка выпуска сертификата | |
321 | NO_CERT_REQUEST | Запрос на сертификат или сертификат отсутствует | |
322 | NO_CERT | Сертификат отсутствует | |
323 | NO_PKI_SETTINGS_DEFINED | Файл настроек PKI не задан | |
324 | CAN_NOT_USE_CERTIFICATE_CHAIN | Не удается построить цепочку сертификации | |
325 | CERT_STATUS_INVALID | Неверный статус сертификата | |
326 | CERT_REVOKE_ERROR | Ошибка отзыва сертификата | |
327 | CERT_DOES_NOT_MATCH | Сертификат не совпадает | |
328 | INCORRECT_TRANSACTION_TYPE | Некорректный тип транзакции | |
329 | INCORRECT_ACCESS_PERMISSIONS | Некорректные права доступа к файлу | |
330 | INCORRECT_PDF_DATA | Некорректный pdf-файл | |
331 | PDF_DATA_NOT_COMPLIES_CMS | Двоичные данные pdf не соответствуют CMS транзакции | |
333 | URL_SCHEME_NOT_DEFINED | URL-схема не задана | |
334 | PUBKEY_SIGNATURE_IS_EMPTY | При регистрации нового ключа отсутствует его подпись старым | |
335 | AUTOSIGN_PUBKEY_SIGNATURE_IS_EMPTY | При регистрации нового ключа автоподписи отсутствует его подпись старым | |
336 | KEY_INDEX_OBSOLETED | Ключ пользователя заменён новым (перевыпущен) | |
337 | KEY_INDEX_WRONG | Неверный номер ключа пользователя | |
338 | DEVICE_FINGERPRINT_MISMATCH | Отпечаток устройства не совпадает с сохранённым | |
339 | REQUEST_IS_LOCKED_BY_ANOTHER_REQUEST | Подобный запрос уже выполняется | |
340 | KEY_NOT_ACTIVATED | Ключ не активирован | |
341 | ACTIVATION_ATTEMPTS_EXCEEDED | Количество попыток активации превышено | |
342 | ACTIVATION_CODE_INCORRECT | Код активации неверный | |
343 | PASSWORD_ATTEMPTS_EXCEEDED | Количество попыток предоставления пароля превышено | |
344 | PASSWORD_INCORRECT | Неверный пароль | |
345 | PASSWORD_NOT_SET | Пароль не был задан | |
346 | CREDENTIALS_NOT_INITIALIZED | Пароль не был задан | |
347 | GOST_IMIT_DOESNT_MATCH | ГОСТ-имитовставка некорректна | |
348 | EVENTS_REMOVEMENT_IS_NOT_ALLOWED | 403 | Удаление записей о событиях не разрешено |
349 | TIME_SYNC_ERROR | 401 | Время между мобильным устройством и сервером значительно отличается |
350 | QR_GENERATION_ERROR | Невозможно сгенерировать QR — слишком большой объём данных | |
351 | CRYPT_TYPE_IS_NOT_DEFINED | Тип криптографии не задан | |
352 | FEATURE_IS_NOT_LICENSED | Опция не лицензирована |
Темы оформления мобильного приложения
Структура архива темы
Файл темы оформления должен соответстововать идентификатору прикладной системы + расширение .zip
.
Состав файла:
- theme.json — Описание темы
- image_light.png — Кастомная картинка для светлого режима приложения
- image_dark.png — Кастомная картинка для тёмного режима приложения
Структура файла theme.json
{
"colors": {
"accentColor": {
"light": "#006BFF",
"dark": "#2F98FF"
},
"textButton": {
"light": "#006BFF",
"dark": "#2F98FF"
},
"accentText": {
"light": "#006BFF",
"dark": "#2F98FF"
},
"declineButton": {
"light": "#CFD4DE",
"dark": "#3C4048"
},
"barButton": {
"light": "#A0AABD",
"dark": "#6D7586"
},
"error": {
"light": "#E53D00",
"dark": "#F95E25"
},
"success": {
"light": "#006BFF",
"dark": "#2F98FF"
}
},
"icon": {
"light": "icon_light.png",
"dark": "icon_dark.png"
},
"image": {
"light": "logo_light.png",
"dark": "logo_dark.png"
},
"about": "https://safe-tech.ru/about",
"feedback": "info@safe-tech.ru"
}
Цвета (Colors)
Цвета описываются в формате #RRGGBB для светлой и тёмной темы по-отдельности.
Name | Где встречается |
---|---|
accentColor | Цвет всех основных кнопок, подсветка полей |
textButton | Цвет текстовых кнопок. Например, ссылки в информации о ключе |
accentText | Цвет статусов. Например, «доступно 2 операции» |
declineButton | Кнопка «Отклонить» |
barButton | Цвет иконок в AppBar'е / NavigationBar'е |
success | Цвет успешных статусов. Например, фон круга в модальном окне с надписью «Готово». |
Иконки/логотипы
В теме могут содержаться логотип или иконка. Необходимо указать название картинки для светлой и тёмной темы. Может использоваться всего одна картинка, указав одно и тоже название для light
и dark
.
В первую очередь приложение ищет большой логотип по ключу image
. Если её нет, то далее приложение ищет иконку по ключу icon
. Если и её нет — то будет использоваться дефолтная иконка.
Т.е. если будут указаны оба ключа, то приоритет у image
.
Если логотип в приложении не отображается, сверьте название картинки в архиве с тем, что указано в ключе.
Логотип
Если необходимо использование логотипа, то необходимо указать ключ image
с названием картинок для светлой и тёмной тем.
Область, которую будет занимать логотип, имеет динамическую ширину. Картинка будет размещена по центру и сжата по высоте.
Рекомендуемый размер логотипа — не менее 792x396
, соотношение сторон 2:1
Иконка
Если необходимо использование небольшой иконки, то необходимо указать ключ icon
с названием картинок для светлой и тёмной тем.
Иконка будет размещена в квадратной области.
Рекомендуемое разрешение 80x80
, соотношение сторон 1:1
.
"О приложении" и "Обратная связь"
В тему можно добавить дополнительные ключи — about
и feedback
. Они будут отображены как текстовые ссылки в информации о ключе.
Name | Где встречается |
---|---|
about | Ссылка на адрес сайта |
feedback | Адрес эл. почты для обратной связи |
Публикация темы оформления на сервере PCE
- Убедитесь, что название файла темы имеет вид {systemid}.zip, где {systemid} - идентификатор системы, для которой размещается тема;
- Разместите не распаковывая файл темы на сервере PC External в папке (создав её при необходимости):
Linux
/opt/pc/pc_themes/v52
или по пути, указанному в application.yml, в параметре pc.external.themes-path, в поддиректории /v52
Пример:
pc:
external:
themes-path: /opt/pc/pc_themes/
Windows
по пути, указанному в application.yml, в параметре pc.external.themes-path, в поддиректории \v52
Пример:
pc:
external:
themes-path: C:\pc\pc_themes\
Docker
по пути, указанному в файле application.yml, в параметре pc.external.themes-path, либо в переменной окружения PC_EXTERNAL_THEMESPATH
, в поддиректории /v52
Пример:
pc:
external:
themes-path: /opt/pc/pc_themes/
После добавления файла темы на сервер, он должен стать доступным по адресу:
http{s}://{servername}/pc-client-api/themes/v52/{systemid}