...
Информация в личном кабинете банковского приложения появляется по факту прохождения платежа, то есть, даже если кассовая система по каким-то причинам не получит данные об успешной QR-оплате от банковского сервиса, платеж будет зачислен и отображен в личном кабинете банка в любом случае.
Запись реквизитов QR-оплаты производится через запятую в поле qrRequisites конвертера Экспорт XML. Эти данные можно использовать для сверки между зарегистрированными оплатами СБП в торговой сети и оплатами в предоставляемой банком выписке.
...
- Кассир формирует чек.
- Кассир переходит в режим оплаты.
- Кассир уточняет у покупателя способ оплаты.
- Покупатель сообщает, что будет оплачивать покупку с использованием QR-кода.
- Кассир выбирает вид оплаты по QR-коду и, при необходимости, изменяет сумму оплаты.
- Касса отправляет запрос в Универсальный интегратор.
- Универсальный интегратор отправляет запрос на создание заказа в процессинг банка.
- Если процессинг банка вернул положительный ответ, Универсальный интегратор возвращает этот ответ на кассу.
- Покупатель считывает QR-код с наклейки мобильным приложением банка.
- Касса выводит кассиру диалоговое окно с просьбой подтвердить, что покупатель успешно сканировал QR-код и выполнил оплату.
- Кассир подтверждает сканирование QR-кода и оплату.
- Касса отправляет запрос в Универсальный интегратор.
- Универсальный интегратор отправляет запрос на получение статуса заказа в процессинг банка.
- Процессинг банка возвращает ответ в Универсальный интегратор.
- Универсальный интегратор возвращает ответ на кассу.
- Касса получает ответ о статусе проведения платежа: если получено подтверждение ответа, касса добавляет QR-оплату в чек.
- Касса закрывает чек.
При получении отрицательного ответа от любой из систем или в случае невозможности выполнить QR-оплату на стороне покупателя, платеж отменяется и кассир предлагает клиенту выбрать другой способ оплаты чека.
Якорь linkcheck linkcheck
Проверка платёжной ссылки СБП
| linkcheck | |
| linkcheck |
...
Для осуществления QR-оплат, некоторые банки используют многоразовую платёжную ссылку СБП.
Считав сгенерированный QR-код, можно проверить соответствие считанной ссылки и ссылки в настройках Универсального интегратора, через который осуществляется взаимодействие с УКМ 5.
На кассе УКМ 5 проверка такой ссылки происходит следующим образом:
| Клавиатурная касса | Touch-касса |
|---|---|
| 1. Проверка платежной ссылки осуществляется через меню отчетов кассы: | |
2. В меню отчетов необходимо выбрать опцию Проверка статического QR-кода: | |
| 3. Для проверки QR-кода, его необходимо считать сканером: | |
4. Как только QR-код будет считан сканером, появится сообщение о результатах проверки: | |
либо: | либо: |
5. Если проверку прервать нажатием кнопки Отмена, то касса отобразит соответствующее оповещение: | |
| Якорь | ||||
|---|---|---|---|---|
|
...
Как правило, каждая платежная ссылка, содержащаяся в QR-коде, привязываются к определенному юр. лицу, магазину и кассе путем механического ввода данных об этой ссылке оператором на кассе. Некоторые банки решают проблему промышленного тиражирования кассовых платёжных ссылок в крупных торговых сетях проще: подготовкой наклеек с QR-кодом, содержащих "пустую" кассовую ссылку, ещё не соотнесенную с конкретным клиентом (юр.лицом/магазином/кассой). Сначала такие наклейки размещаются на кассах в торговом зале, а затем с помощью отчета Проверка статического QR-кода через Универсальный интегратор осуществляется запрос, который привязывает платежную ссылку, содержащуюся в каждом конкретном QR-коде, к кассе, на которой она размещена, а также к конкретному юр.лицу и магазину.
...
Установка и настройка Универсального интегратора
Технические требования
- двухъядерный процессор 2 ГГц;
- системная память 4 GiB RAM;
- 25 Гб свободного пространства на жестком диске.
В самом магазине сервер рекомендуется располагать как можно ближе к кассам, во избежание проблем со связью.
Как проверить версию
|
Дистрибутив
Актуальный образ выложен на FTP с последней версией УКМ 4.
Для стабильной работы потребуется последняя актуальная версия интегратора.
Инсталляция и обновление
Инсталлятор
При установке дистрибутива, сначала нужно выбрать раздел Installation on powerful cash registers:
Затем необходимо выбрать пункт UKM4 Integrator (64 bit):
...
Если после разворачивания виртуальная машина получит сетевое имя, то данное имя надо прописать как 127.0.0.1 в /etc/hosts.
Примечание. Сетевое имя вручную менять нельзя!
В качестве базы данных используется MariaDB.
Обновление
Файл qrpay-update.sh необходимо поместить на сервер Универсального интегратора и дать ему права на исполнение:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
chmod +x ./qrpay-update-amd64.sh |
Затем нужно выполнить установку:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
sudo systemctl stop qrpayd.service sudo ./qrpay-update-amd64.sh sudo systemctl start qrpayd.service |
Логины/пароли
- Пользователь системы: qrpay/xxxxxx.
- Пользователь MariaDB: qrpay@localhost/xxxxxx.
- Пользователи RabbitMQ:
- admin/admin для администрирования;
- ukm/xxxxxx для доступа с кассы.
...
Пояснения к паролям RabbitMQ
<ip>:15672
...
- Пользователь admin
...
- c паролем admin в процессе работы системы не требуется, его можно удалить или заменить пароль на любой устраивающий.
- Терминалы подключаются с помощью пользователя ukm с паролем xxxxxx, но его можно поменять на любой другой, либо создать нового пользователя
...
Настройка сети
Для настройки сети, необходимо поменять конфигурационный файл netplan и перезагрузиться.
...
- :
Блок кода language scala theme RDark
...
/etc/netplan/netplan.yaml
rabbitmqctl add_user {пользователь} {пароль} rabbitmqctl set_permissions -p / {пользователь} ".*" ".*" ".*" Но требуется прописать этого пользователя с паролем в настройках магазина УКМ 4, можно для каждого магазина прописать своего пользователя.
- Демон qrpay подключается с помощью специальной учетной записи, только с того же компьютера.
Веб от RabbitMQ
<ip>:15672
Rabbit логин/пароль: admin/admin
Настройка сети
Для настройки сети, необходимо поменять конфигурационный файл netplan и перезагрузиться.
Актуальный конфигурационный файл расположен по следующему адресу:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
/etc/netplan/netplan.yaml
|
По умолчанию, в нем стоит значение dhcp:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
network:
|
По умолчанию, в нем стоит значение dhcp:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
network:
version: 2
ethernets:
enpdhcp:
match:
name: enp*
dhcp-identifier: mac
dhcp4: true |
...
Выполненные настройки необходимо сохранить.Якорь
4. Следует 4. Следует добавить в конфигурационный файл payment.conf (services\payment\payment.conf) приведенную ниже строку, а затем сохранить изменения:
...
При оплате по QR-коду можно передавать в Универсальный интегратор значение поля Код ЦФО.
Дополнительные настройки для киосков и касс самообслуживания
В дополнение к перечисленным выше настройкам, обязательным для любых касс, для касс самообслуживания УКМ 5 выполняется специфичная настройка, отвечающая за отображение на экране анимации при оплате по QR-коду.
Настройка выполняется в конфигурационном файле sale.conf (applications\sale\sale.conf):
В раздел bl данного файла нужно добавить следующий фрагмент, после чего сохранить файл:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
kiosk2: {
negativeSoundEffects = false #приоритет 1
voiceSoundEffects = true #приоритет 2
positiveEffect = true
positiveAnimationTimer=[500, 1000, 500]
extendedRecognition = true # Расширенное распознавание, доступно при наличие лицензии киоск2
isAnimatedIcons = true
emptyReceiptSlideShow = [scanBarCode, vision, QRPay]
useVideoSelfie = true
addItemMultiplier = 1.5
} |
Якорь linkset linkset
Проверка многоразовой платёжной ссылки СБП
| linkset | |
| linkset |
Функционал проверки платежной ссылки СБП (для банков Райффайзен, Газпром и Русский Стандарт) требует требует следующих настроек:
1. В конфигурационном файле reports.conf (services\reports\reports.conf) необходимо разместить следующую строку:
| Блок кода | ||||
|---|---|---|---|---|
| ||||
# ,{ include file("conf/services/reports/qr_checker.conf")} # Проверка статического QR-кода |
2. В разделе services\reports нужно разместить конфигурационный файл qr_checker.conf. Он имеет несколько разный вид, в зависимости от конкретного банка: параметры modulePay, moduleCancel и subsystem в данном файле следует выставить идентичными значениям этих же параметров в настройках QR-оплаты:
conf")} # Проверка статического QR-кода |
2. В разделе services\reports нужно разместить конфигурационный файл qr_checker.conf. Он имеет несколько разный вид, в зависимости от конкретного банка: параметры modulePay, moduleCancel и subsystem в данном файле следует выставить идентичными значениям этих же параметров в настройках QR-оплаты. Ниже приведено содержимое данного файла в зависимости от банка:
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
"reports.qr_checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".
# В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
name = "Проверка статического QR-кода" # Название отчёта в меню "Отчёты"
description = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
url = "amqp://ukm:xxxxxx@192.168.25.93"
modulePay = "servplus.qrgazprom_variable.payment"
moduleCancel = "servplus.qrgazprom_variable.cancel"
subsystem = "qrgazprom_variable"
amqp = "amq.topic"
amqpTimeout = 10 second
}
}
} |
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
"reports.qr_checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".
# В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
name = "Проверка статического QR-кода" # Название отчёта в меню "Отчёты"
description = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
url = "amqp://ukm:xxxxxx@192.168.25.93"
modulePay = "servplus.qrgazpromqrrsb_variable.payment"
moduleCancel = "servplus.qrgazpromqrrsb_variable.cancel"
subsystem = "qrgazpromqrrsb_variable"
amqp = "amq.topic"
amqpTimeout = 10 second
}
}
} |
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
"reports.qr_checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".
# В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
name = "Проверка статического QR-кода" # Название отчёта в меню "Отчёты"
description = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
url = "amqp://ukm:xxxxxx@192.168.25.93113"
modulePay = "servplus.qrrsbqrraiffd_variable.payment"
moduleCancel = "servplus.qrrsbqrraiffd_variable.cancel"
subsystem = "qrrsbqrraiffd_variable"
amqp = "amq.topic"
amqpTimeout = 10 second
= 50 second
}
}
} |
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
"reports.qr_checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".
# В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
name = "Проверка статического QR-кода" # Название отчёта в меню "Отчёты"
description = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
url = "amqp://ukm:xxxxxx@192.168.2524.113154"
modulePay = "servplus.qrraiffdqralpha_variable.payment"
moduleCancel = "servplus.qrraiffdqralpha_variable.cancel"
subsystem = "qrraiffdqralpha_variable"
amqp = "amq.topic"
amqpTimeout = 5010 second
}
}
} |
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
"reports.qr_checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".
# В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
name = "Проверка статического QR-кодаstatic Хлынов" # Название отчёта в меню "Отчёты"
description = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
url = "amqp://ukm:xxxxxx@192.168.24.154"
modulePay = "servplus.qralpha_variableqrbankhlynov.payment"
moduleCancel = "servplus.qralpha_variableqrbankhlynov.cancel"
subsystem = "qralpha_variableqrbankhlynov"
amqp = "amq.topic"
amqpTimeout = 1050 second
}
}
} |
| Блок кода | ||||||
|---|---|---|---|---|---|---|
| ||||||
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
"reports.qr_checker": {
params : {
num = 4 # Последовательность отображения отчетов в Приложении "Отчеты".
# В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
name = "Проверка статического QR-static Хлыновкода" # Название отчёта в меню "Отчёты"
description = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
url = "amqp://ukm:xxxxxx@192.168.24.154246"
modulePay = "servplus.qrbankhlynovqrsberbank_variable.payment"
moduleCancel = "servplus.qrbankhlynovqrsberbank_variable.cancel"
subsystem = "qrbankhlynovqrsberbank_variable"
amqp = "amq.topic"
amqpTimeout = 5010 second
}
}
} |
Все выполненные настройки необходимо сохранить.













