Справочное руководство PC

Справочное руководство включает в себя сведения о возможных допустимых параметрах конфигурации 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)
  1. Зайдите в ваш Apple Developer Account
  2. Нажмите "Certificates"
  3. Нажмите "Keys"
  4. Нажмите the "+" button
  5. Дайте имя ключу
  6. Нажмите "Enable" в "Apple Push Notifications Service (APNs)"
  7. Нажмите "Continue"
  8. Нажмите "Register"
  9. Нажмите "Download", p8-файл будет загружен

Key ID будет предоставлен в процессе создания ключа.

Team ID, это идентификатор вашей команды в программе Apple Developer.

Firebase (Android, iOS)

PC Pusher использует FCM API для отправки push-уведомлений.

Чтобы получить учетные данные, пожалуйста, выполните следующие действия:

  1. Откройте консоль Firebase https://console.firebase.google.com/
  2. Откройте страницу вашего проекта
  3. Откройте Project settings для приложения или создайте новое приложение
  4. Перейдите на вкладку Cloud Messaging
  5. Убедитесь, что Firebase Cloud Messaging API (V1) включен для вашего приложения
  6. Нажмите на ссылку "Manage Service Accounts", откроется Google Cloud Console
  7. Нажмите на запись своей учетной записи службы (должно быть что-то вроде firebase-adminsdk-AAAAAA@AAAAAAAA.iam.gserviceaccount.com).
  8. Перейдите на вкладку Keys
  9. Нажмите ADD KEY и выберите опцию JSON
  10. Сохраните JSON-файл, предоставленный консолью, на свой компьютер
  11. Откройте этот файл в текстовом редакторе, скопируйте его содержимое в раздел 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}