Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Отображение дочерних

Описание

Якорь
integr
integr
Ритейлеры, обслуживающиеся Системой быстрых платежей, могут предлагать своим покупателям оплатить чеки через QR-код. Взаимодействие банка и кассы УКМ 5 происходит через специальный сервер – Универсальный интегратор. Универсальный интегратор передает сведения о счете, выставленном кассой, в банковскую систему, а она, в свою очередь, взаимодействует с Системой быстрых платежей и фиксирует сведения о транзакции, статус которой курируется Универсальным интегратором. В связи с тем, что считывать QR-код приходится устройством покупателя (например, камерой мобильного телефона) с изображения на экране, чаще всего этот вид оплаты предлагается на киосках и кассах самообслуживания.

На текущий момент, QR-оплата через СБП реализована благодаря сервисусервисам, предоставленномупредоставленным АО "Райффайзенбанк", АО "Газпромбанк" и АО "Банк Русский Стандарт", также доступны QR-оплаты через СБП, осуществляемые по протоколу Inpas, однако оплачивать чеки по QR-коду могут покупатели-клиенты любого банка. Функционал поддерживает следующие операции:

  • оплата через QR-код (в том числе, динамический);
  • возврат товара, оплаченного через QR-код, (и, соответственно, возврат QR-оплаты).

Якорь
pay
pay
Оплата

На практике, оплата через QR-код выглядит следующим образом (показано на примере интеграции с Райффайзенбанком):

Покупатель выбирает способ оплаты чека через QR-код:

...

Кассовая система (УКМ 5) получает и отображает на киоске QRотображает QR-код, сгенерированный на стороне банка:

Image RemovedImage Added

Покупатель считывает QR-код камерой или из приложения банка на своем устройстве:

Image Removed

. Для этого необходимо нажать кнопку Сканировать QR:

Image Added

Откроется окно сканирования:

Image RemovedImage Added

Приложение распознает QR-код и отображает окно с предложением оплатить сумму чека:

 Image RemovedImage Added

Покупатель нажимает Оплатить. По факту оплаты, покупатель получает сообщение об успешно выполненной транзакции:

Image RemovedImage Added

Теперь, на экране приложения нужно подтвердить завершение транзакции, нажав кнопку Закрыть.

После завершения оплаты в приложении, кассе необходимо сообщить кассовой системе о проведенной транзакции, нажав на кнопку QR-код считан:Image Removed УКМ 5 отправит запрос к Универсальному интегратору для выяснения статуса чека: оплачен или нет:

Универсальный интегратор с регулярной (настраиваемой) частотой опрашивает банковский сервис АО "Райффайзенбанк" о статусе QR-кода, пока не получит информацию об изменении статуса QR-кода или о том, что оплата по данному QR-коду была успешно произведенаустановленное в настройках время тайм-аута истекло, но ответа получено не было.

Получив положительный ответ (чек оплачен), кассовая система завершит работу с чеком автоматически, в штатном режиме.

Далее, Универсальный интегратор отправит в банковскую систему сведения об изменении статуса транзакции на Оплачено, а По факту произведенной проводки, банк зафиксирует сведения об этой и всех прочих транзакциях, которые можно будет просмотреть в личном кабинете банка, а Универсальный интегратор отправит в банковскую систему сведения об изменении статуса транзакции на Оплачено:

Image RemovedImage Added

Информация в личном кабинете банковского приложения появляется по факту прохождения платежа, то есть, даже если кассовая система по каким-то причинам не получит данные об успешной QR-оплате от банковского сервиса АО "Райффайзенбанк", платеж будет зачислен и отображен в личном кабинете банка в любом случае.

Запись реквизитов QR-оплаты производится через запятую в поле qrRequisites конвертера Экспорт XML. Эти данные можно использовать для сверки между зарегистрированными оплатами СБП в торговой сети и оплатами в предоставляемой банком выписке.

Якорь
return
return
Возврат

Возврат оплаты через QR-код, как правило, осуществляется при оформлении возврата по чеку.

Примечание. Полный или частичный возврат товаров, приобретенных покупателем на киоске, может осуществить только ассистент (кассир, обладающий достаточными правами).

Для оформления возврата, необходимо выйти из интерфейса продажи на киоске на Рабочий стол:

...

Универсальный интегратор отправит в банковскую систему запрос на возврат, а банковский сервис АО "Райффайзенбанк" проводит соответствующую транзакцию, сведения о которой отображаются в личном кабинете банка: 

Image RemovedImage Added

После этого, банковская система передает через Универсальный интегратор на кассу сведения о том, что статус запроса на возврат изменился на Возвращено.

QR-оплата на кассе

Функционал QR-оплаты через СБП также доступен для использования на обыкновенных кассах УКМ 5 и в процессе выглядит следующим образом:

Клавиатурная кассаTouch-касса
1. На подытоге, кассир выбирает способ оплаты чека через QR-код:

Image Added

Image Added

2. В зависимости от настроек, кассовая программа выводит QR-код на экран дисплея покупателя:

Image Added

Image Added

либо на чековую ленту:

Image Added

либо одновременно на чековую ленту и на дисплей покупателя.

3. В ожидании пока покупатель считает QR-код, касса демонстрирует следующее сообщение:

Image Added

Image Added

4. Как только покупатель считает QR-код на своем устройстве и произведет оплату, чек завершится штатным образом:

Image Added

Image Added

Image Added

Image Added

Якорь
paybylink
paybylink
Оплата по кассовой платежной ссылке

Настройки

Для настройки оплаты QR-кодом на киоске УКМ 5 необходимо:

Некоторыми из наших клиентов справедливо подмечено, что оплата с помощью СБП по динамическим QR-кодам иногда может затрудняться проблемами с демонстрацией этого QR-кода покупателю, так как не на каждой кассе есть возможность вывести QR-код на экран, а в печатном виде он может иметь дефекты.

Проблему корректного отображения QR-кодов можно решить с помощью кассовой платёжной ссылки СБП. Такой QR-код присваивается непосредственно кассе, и для совершения оплаты касса активизирует его с нужной суммой. После проведения оплаты данный QR-код блокируется до следующей оплаты.

Так как сам QR-код не изменяется, то его изображение можно распечатать и разместить на кассе в виде наклейки или NFC-метки. Вдобавок к этому, по просьбе к команде техподдержки продукта, можно также настроить вывод такого QR-кода на экран покупателя, чековую ленту или экран киоска, при условии их наличия в магазине. 

Некоторые банки имеют общий процессинговый центр для обработки платежей по динамическим QR-кодам и по кассовым платёжным ссылкам СБП. Получить кассовые платёжные ссылки для каждой кассы торговой сети может только юридическое лицо в клиентском приложении банка.

На практике, сценарий оплаты по кассовой ссылке СБП выглядит следующим образом:

  1. Кассир формирует чек.
  2. Кассир переходит в режим оплаты.
  3. Кассир уточняет у покупателя способ оплаты.
  4. Покупатель сообщает, что будет оплачивать покупку с использованием QR-кода.
  5. Кассир выбирает вид оплаты по QR-коду и, при необходимости, изменяет сумму оплаты.
  6. Касса отправляет запрос в Универсальный интегратор.
  7. Универсальный интегратор отправляет запрос на создание заказа в процессинг банка.
  8. Если процессинг банка вернул положительный ответ, Универсальный интегратор возвращает этот ответ на кассу.
  9. Покупатель считывает QR-код с наклейки мобильным приложением банка.
  10. Касса выводит кассиру диалоговое окно с просьбой подтвердить, что покупатель успешно сканировал QR-код и выполнил оплату.
  11. Кассир подтверждает сканирование QR-кода и оплату.
  12. Касса отправляет запрос в Универсальный интегратор.
  13. Универсальный интегратор отправляет запрос на получение статуса заказа в процессинг банка.
  14. Процессинг банка возвращает ответ в Универсальный интегратор.
  15. Универсальный интегратор возвращает ответ на кассу.
  16. Касса получает ответ о статусе проведения платежа: если получено подтверждение ответа, касса добавляет QR-оплату в чек.
  17. Касса закрывает чек.

При получении отрицательного ответа от любой из систем или в случае невозможности выполнить QR-оплату на стороне покупателя, платеж отменяется и кассир предлагает клиенту выбрать другой способ оплаты чека.

Якорь
linkcheck
linkcheck
Проверка платёжной ссылки СБП (только для банков Райффайзен, Газпром, Русский Стандарт)

Для осуществления QR-оплат, некоторые банки используют многоразовую платёжную ссылку СБП.

Считав сгенерированный QR-код, можно проверить соответствие считанной ссылки и ссылки в настройках Универсального интегратора, через который осуществляется взаимодействие с УКМ 5.

На кассе УКМ 5 проверка такой ссылки происходит следующим образом:

Клавиатурная кассаTouch-касса
1. Проверка платежной ссылки осуществляется через меню отчетов кассы:

Image Added

Image Added

2. В меню отчетов необходимо выбрать опцию Проверка статического QR-кода:

Image Added

Image Added

3. Для проверки QR-кода, его необходимо считать сканером:

Image Added

Image Added

4. Как только QR-код будет считан сканером, появится сообщение о результатах проверки: 

Image Added

либо:

Image Added

Image Added

либо:

Image Added

5. Если проверку прервать нажатием кнопки Отмена, то касса отобразит соответствующее оповещение:

Image Added

Якорь
binding
binding
Привязка платежной ссылки к юр.лицу/магазину/кассе (только для банков Райффайзен и Газпром)

Как правило, каждая платежная ссылка, содержащаяся в QR-коде, привязываются к определенному юр. лицу, магазину и кассе путем механического ввода данных об этой ссылке оператором на кассе. Райффайзенбанк решает проблемы промышленного тиражирования кассовых платёжных ссылок в крупных торговых сетях проще: подготовкой наклеек с QR-кодом, содержащих "пустую" кассовую ссылку, ещё не соотнесенную с конкретным клиентом (юр.лицом/магазином/кассой). Сначала такие наклейки размещаются на кассах в торговом зале, а затем с помощью отчета Проверка статического QR-кода через Универсальный интегратор осуществляется запрос, который привязывает платежную ссылку, содержащуюся в каждом конкретном QR-коде, к кассе, на которой она размещена, а также к конкретному юр.лицу и магазину.

При этом, может сложиться ситуация, когда в рамках одного магазина одновременно имеются как уже привязанные платежные ссылки, так и "пустые". В таком случае, отчет Проверка статического QR-кода будет работать следующим образом:

1. Если платежная ссылка уже привязана к кассе, то произойдет описанная выше штатная процедура проверки платежной ссылки СБП.

2. Если платежная ссылка еще не закреплена за определенной кассой, Универсальный интегратор выполнит запрос на привязку ссылки и сохранит результат данного запроса в таблице конфигурации. На кассу вернется сообщение о том, что кассовая ссылка успешно привязана. 

Настройки

Для организации оплаты по QR-коду, необходимо выполнить несколько групп настроек.

Предварительные условия

Корректная работа функционала требует специфических настроек (данных для внесения в базу данных Универсального интегратора) на стороне банковской системы, в рамках интеграции с которой используется функция QR-оплаты. За этими настройками (ключами и сертификатами) необходимо обратиться к представителям соответствующего банка. За примером заполнения базы данных тестовыми данными нужно обратиться к команде техподдержки продукта.

Если данное условие выполнено, то необходимо перейти к установке и настройке специального сервера – Универсальный интегратор, через который обрабатываются все QR-платежи в УКМ 5. Затем выполняются настройки на кассовом сервере УКМ 5.

Установка и настройка Универсального интегратора

Технические требования

  • двухъядерный процессор 2 ГГц;
  • системная память 4 GiB RAM;
  • 25 Гб свободного пространства на жестком диске.

В самом магазине сервер рекомендуется располагать как можно ближе к кассам, во избежание проблем со связью.

Дистрибутив

Актуальный образ выложен на FTP с последней версией УКМ 4.

Для стабильной работы потребуется последняя актуальная версия интегратора.

Актуальная версия

Блок кода
languagepy
themeRDark
ukm_integrator 111 master, 77dcbba

Как проверить версию

Блок кода
/usr/local/qrpay/qrpayd --version

Инсталляция и обновление

  • Инсталлятор

При установке дистрибутива необходимо выбрать из списка доступных программ Universal integrator:

Image Added

Если виртуальная машина после разворачивания получит сетевое имя, то данное имя надо прописать как 127.0.0.1 в /etc/hosts.

Примечание. Сетевое имя вручную менять нельзя! При этом сбрасываются настройки у RabbitMQ и ничего не работает! При установке Универсального интегратора конфигурационные файлы вспомогательного ПО Универсального интегратора привязываются к hostname, который будет присвоен при инсталляции, и последующая его смена не изменит этих настроек, что приведёт к неработоспособности Универсального интегратора.

В качестве базы данных используется MariaDB.

  • Обновление

Файл qrpay-update.sh необходимо поместить на сервер Универсального интегратора и дать ему права на исполнение:

Блок кода
languagepy
themeRDark
chmod +x ./qrpay-update.sh

Затем нужно выполнить установку:

Блок кода
languagepy
themeRDark
sudo systemctl stop qrpayd.service
sudo ./qrpay-update.sh
sudo systemctl start qrpayd.service

Логины/пароли

  • Пользователь системы: qrpay/xxxxxx.
  • Пользователь MariaDB: qrpay@localhost/xxxxxx.
  • Пользователи RabbitMQ:
    • admin/admin для администрирования;
    • ukm/xxxxxx для доступа с кассы.

Веб от RabbitMQ

<ip>:15672

Rabbit логин/пароль: admin/admin

Как снимать логи

Нужно подставить дату, за которую требуется получить лог. Полученный файл и есть лог, его и нужно прислать:

Блок кода
journalctl --since "2022-12-24 00:00:00" --until "2022-12-24 23:59:59" -a -u qrpayd.service > /home/ukmclient/qrpayd.log

Индивидуальные настройки Универсального интегратора для банков

Отображение дочерних

Якорь
serverset
serverset
Настройки на кассовом сервере УКМ 5

1. Перейти на кассовом сервере по адресу: Магазин – Типы касс, выбрать тип кассы и нажать кнопку Настройки:

...

В разделе subsystems конфигурационного файла mintukm.conf (applications/\mintukm.conf) нужно добавить следующую строку и сохранить изменения:

Блок кода
languagescala
themeRDark
{ include file("conf/services/universal_integrator.conf") }

2. Необходимо убедиться в наличии файла universal_integrator.conf в разделе services иерархического древа:Image Removed

Image Added

Якорь
qrwhere
qrwhere
Примечание. В зависимости от намерения использовать функционал на киосках/кассах самообслуживания или обычных кассах, следует установить подходящее значение для параметра showQRcode в данном конфигурационном файле:

0 – QR-код будет выведен на экран (рекомендовано для киоска/кассы самообслуживания);

1 – QR-код будет выведен на чековую ленту;

2 – QR-код одновременно отобразится на экране (рекомендовано для киоска/кассы самообслуживания) и распечатается на чековой ленте;

3 – QR-код будет отображен на дисплее покупателя (рекомендовано для обычных касс в комплекте с дисплеем покупателя).

Якорь
genset
genset
3. Нужно также проверить, присутствует ли файл payment_qrpay_raiffdui.conf в разделе services/payment:Image Removed\payment.

В данном файле следует прописать в качестве значения параметра modulePay то значение, которое указано для конкретного банка, QR-оплату которого вы настраиваете. То же самое касается параметров moduleCancel и subsystem. Например, на скриншоте ниже выполнены настройки для Райффайзенбанка (оплата по динамическому QR):

Image Added

Примечание. При желании настроить QR-оплату с помощью кассовой платежной ссылки нужно выбирать значения всех параметров с припиской _variable.

Выполненные настройки необходимо сохранить.

Якорь
custqr
custqr
Примечание. В случае настройки функционала QR Сбербанк SberPay (customer), помимо выбора значений параметров modulePaymoduleCancel и subsystem, также необходимо установить параметр scanQRCode = true, после чего сохранить файл:

Image Added

4. Следует добавить в конфигурационный файл payment.conf (services/\payment/\payment.conf) приведенную ниже строку, а затем сохранить изменения:

Блок кода
languagescala
themeRDark
{ include file("conf/services/payment/payment_qrpay_raiffdui.conf") }

При оплате по QR-коду можно передавать в Универсальный интегратор значение поля Код ЦФО.

Дополнительные настройки для киосков и касс самообслуживания

В дополнение к перечисленным выше настройкам, обязательным для любых касс, для касс самообслуживания УКМ 5 выполняется специфичная настройка, отвечающая за отображение на экране анимации при оплате по QR-коду.

Настройка выполняется в конфигурационном файле sale.conf (applications\sale\sale.conf):

Image Added

В раздел bl данного файла нужно добавить следующий фрагмент, после чего сохранить файл:

Блок кода
languagescala
themeRDark
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
Проверка многоразовой платёжной ссылки СБП

Функционал проверки платежной ссылки СБП (для банков Райффайзен, Газпром и Русский Стандарт) требует следующих настроек:

1. В конфигурационном файле reports.conf (services\reports\reports.conf) необходимо разместить следующую строку:

Блок кода
languagescala
themeRDark
#   ,{ include file("conf/services/reports/qr_checker.conf")}       # Проверка статического QR-кода

2. В разделе services\reports нужно разместить конфигурационный файл qr_checker.conf. Он имеет несколько разный вид, в зависимости от конкретного банка: параметры modulePaymoduleCancel и subsystem в данном файле следует выставить идентичными значениям этих же параметров в настройках QR-оплаты:

Блок кода
languagescala
themeRDark
titleГазпромбанк
# 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
    }
  }
}
Блок кода
languagescala
themeRDark
titleБанк Русский Стандарт
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
  "reports.qr_checker": {
    params : {
      num           = 4                 # Последовательность отображения отчетов в Приложении "Отчеты".
                                                # В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
      name          = "Проверка статического QR-кода"   # Название отчёта в меню "Отчёты"
      description   = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
      url           = "amqp://ukm:xxxxxx@192.168.25.93"
      modulePay     = "servplus.qrrsb_variable.payment"
      moduleCancel  = "servplus.qrrsb_variable.cancel"
      subsystem     = "qrrsb_variable"
      amqp          = "amq.topic"
      amqpTimeout   = 10 second
    }
  }
}
Блок кода
languagepy
themeRDark
titleРайффайзенбанк
# QR-оплаты. Операция "Проверка статического QR-кода"
# Настраивать так же, как и QR-оплату
#
{
  "reports.qr_checker": {
    params : {
      num           = 4							        # Последовательность отображения отчетов в Приложении "Отчеты".
										        # В начале меню со списком отчётов отображаются отчёты с меньшими значениями параметра "num".
      name          = "Проверка статического QR-кода"	# Название отчёта в меню "Отчёты"
      description   = "Проверка соответствия наклеенного на кассе QR-кода с тем, что для этой кассы настроен" # Краткое описание отчёта в этом же меню.
	  url           = "amqp://ukm:xxxxxx@192.168.25.113"
      modulePay     = "servplus.qrraiffd_variable.payment"
      moduleCancel  = "servplus.qrraiffd_variable.cancel"
      subsystem     = "qrraiffd_variable"
	  amqp          = "amq.topic"
	  amqpTimeout   = 50 second
	}
  }
}

Все выполненные настройки необходимо сохранить.