Описание

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

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

Оплата

На практике, оплата через QR-код выглядит следующим образом:

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

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

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

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

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

 

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

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

После завершения оплаты в приложении, УКМ 5 отправит запрос к Универсальному интегратору для выяснения статуса чека: оплачен или нет:

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

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

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

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

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

Возврат

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

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

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


Система запросит повышение прав:

Ассистенту необходимо ввести свой код:

Затем вводится пароль:

По факту успешной регистрации ассистента, происходит выход в меню рабочего стола киоска, где необходимо выбрать опцию Возврат по чеку

Откроется окно поиска чека по номеру кассы, смены и непосредственно платежного документа. Указав координаты интересующего чека, нужно нажать Ввод:

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

Вернуть все товары из исходного чека можно с помощью кнопки Вернуть чек целиком.

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

Система автоматически предложит QR-оплату как один из способов возврата денежных средств, или как единственный способ – в случае, если чек продажи полностью был оплачен через QR-код:

После нажатия кнопки возврата платежа, УКМ 5 осуществит запрос к Универсальному интегратору, передав ему сведения об измененном статусе транзакции:

Далее, чек будет штатным образом завершен. Вернуться в режим продажи на киоске можно через выбор соответствующей опции на рабочем столе:

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

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

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

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

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

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

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

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

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

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

Оплата по кассовой платежной ссылке

Некоторыми из наших клиентов справедливо подмечено, что оплата с помощью СБП по динамическим 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-оплату на стороне покупателя, платеж отменяется и кассир предлагает клиенту выбрать другой способ оплаты чека.

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

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

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

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

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

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

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

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

либо:

либо:

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

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

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

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

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

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

Настройки

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

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

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

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

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

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

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

Дистрибутив

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

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

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

ukm_integrator 111 master, 77dcbba

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

/usr/local/qrpay/qrpayd --version

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

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

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

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

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

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

chmod +x ./qrpay-update.sh

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

sudo systemctl stop qrpayd.service
sudo ./qrpay-update.sh
sudo systemctl start qrpayd.service

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

Веб от 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

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

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

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

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

{ include file("conf/services/universal_integrator.conf") }

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

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

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

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

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

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

3. Нужно также проверить, присутствует ли файл payment_qrpay_ui.conf в разделе services\payment.

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

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

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

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

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

{ include file("conf/services/payment/payment_qrpay_ui.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
}

Проверка многоразовой платёжной ссылки СБП

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

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

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

2. В разделе services\reports нужно разместить конфигурационный файл qr_checker.conf. Он имеет несколько разный вид, в зависимости от конкретного банка: параметры modulePaymoduleCancel и 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.qrrsb_variable.payment"
      moduleCancel  = "servplus.qrrsb_variable.cancel"
      subsystem     = "qrrsb_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.113"
      modulePay     = "servplus.qrraiffd_variable.payment"
      moduleCancel  = "servplus.qrraiffd_variable.cancel"
      subsystem     = "qrraiffd_variable"
	  amqp          = "amq.topic"
	  amqpTimeout   = 50 second
	}
  }
}

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