Инициализация оплаты по QR-коду (C2B2)
Last updated
Last updated
Данный сценарий описывает инициализацию проведения оплаты за товар/услугу посредством сканирования QR-кода в POS-терминале или посредством статического QR-кода.
В рамках данного сценария клиенту предоставляется возможность QR-оплаты из приложения одного банка (банка отправителя денег) через POS-терминал или статический QR-код другого банка (банка бенефициара).
Важно! Если отсканированный QR-код выпущен самим Банком отправителя денег, то оплата производится внутри Банка отправителя денег без взаимодействия с Платформой. Т.е. если счет бенефициара, указанный в QR-коде, также обслуживается в данном банке, то производится внутрибанковская операция.
Схему успешного сценария процесса «Инициализация оплаты по QR-коду (C2B2)» отображает рисунок ниже.
Примечание: На схеме темно-зелеными квадратами отображены методы (endpoint), которые должны быть реализованы на стороне соответствующего участника для реализации данного сценария. Описание методов приведено в электронном формате в https://transfers-openapi.npck.kz/.
Методы API (endpoint), которые необходимо реализовать каждому участнику на своей стороне в рамках процесса «Инициализация оплаты по QR-коду (C2B2)», приведены в таблице ниже.
Процесс «Инициализация оплаты по QR-коду (C2B2)» построен на обмене сообщениями, основанными на стандарте ISO20022, которые логически связаны между собой.
Описание успешного сценария процесса «Инициализация оплаты по QR-коду (C2B2)»:
Генерация и считывание QR-кода для оплаты
POS-терминал направляет данные о платеже в Банк бенефициара
Для статического QR-кода данный шаг не применяется
Банк бенефициара формирует данные для QR-кода для оплаты
Отправитель денег в приложении Банка отправителя денег сканирует QR-код в POS-терминале или статический QR-код
Важно! Если отсканированный QR-код выпущен самим Банком отправителя денег, то оплата производится внутри Банка отправителя денег без взаимодействия с Платформой. Т.е. если счет бенефициара, указанный в QR-коде, также обслуживается в данном банке, то производится внутрибанковская операция.
Банк отправителя денег направляет Платформе запрос данных для оплаты (сообщение admi.009), по ссылке из QR-кода, подписав его своим ЭЦП
В сообщении передается:
в теге <Document:MsgId> – сгенерированный уникальный идентификатор нового сообщения
в теге <Document:SplmtryData:PlcAndNm> с ключом END_TO_END_ID – сгенерированный уникальный идентификатор, который будет выступать в качестве сквозного идентификатора для всей цепочки сообщений в рамках данной операции оплаты
4.1. Платформа, получив запрос, проводит его валидацию, в том числе:
проверяет подпись Банка отправителя денег
проверяет корректность заполнения полей
Платформа направляет в Банк бенефициара запрос данных для оплаты (сообщение admi.009), подписав его ЭЦП Платформы
В сообщении передается:
в теге <Document:MsgId> – сгенерированный уникальный идентификатор нового сообщения
в теге <Document:SplmtryData:PlcAndNm> с ключом END_TO_END_ID –
сквозной идентификатор из сообщения admi.009 Банка отправителя денег
5.1. Банк бенефициара, получив запрос, проводит его обработку, в том числе:
проверяет подпись Платформы
проверяет корректность заполнения полей
выполняет поиск данных по QR-коду, производит сверку контрольной суммы с данными из полученного сообщения admi.009
Банк бенефициара направляет данные для оплаты Платформе (сообщение admi.010), подписав его своим ЭЦП
В сообщении передается:
в теге <Document:MsgId> – сгенерированный уникальный идентификатор нового сообщения
в теге <Document:RptDtls:ReqRef> – сквозной идентификатор из тега <Document::SplmtryData:PlcAndNm> с ключом END_TO_END_ID исходного запроса (admi.009)
6.1. Платформа, получив ответ, проводит его валидацию, в том числе:
проверяет подпись Банка бенефициара
проверяет корректность заполнения полей
Платформа направляет данные для оплаты в Банк отправителя денег (сообщение admi.010), подписав его ЭЦП Платформы
В сообщении передается:
в теге <Document:MsgId> – сгенерированный уникальный идентификатор нового сообщения
в теге <Document:RptDtls:ReqRef> – сквозной идентификатор из тега <Document::SplmtryData:PlcAndNm> с ключом END_TO_END_ID исходного запроса (admi.009)
7.1. Банк отправителя денег, получив ответ, проводит его валидацию, в том числе:
проверяет подпись Платформы
проверяет корректность заполнения полей
Отправителю денег в приложении Банка отправителя денег отображается информация о платеже, он выбирает счет для оплаты и подтверждает проведение оплаты.
Транзакция по проведению платежа
Банк отправителя денег проводит проверку счета клиента на:
валидность статуса для его дебетования
отсутствие наложенного ПТП/ РПРО/ ареста и т.п.
достаточности средств для списания суммы операции
Банк отправителя денег блокирует сумму операции по счету клиента и формирует платежное поручение (pacs.008).
Банк отправителя денег направляет Платформе запрос на проведение оплаты (сообщение pacs.008), подписав его своим ЭЦП.
В сообщении передается:
в теге <Document::GrpHdr:MsgId> – сгенерированный уникальный идентификатор нового сообщения
в теге <Document::PmtId:EndToEndId> – сгенерированный уникальный сквозной идентификатор
в поле <Document::PmtId:TxId> – сгенерированный уникальный идентификатор новой транзакции
указывается IBAN для счета Отправителя денег
указывается IBAN для счета Бенефициара
11.1. Платформа, получив запрос, проводит его валидацию, в том числе:
проверяет подпись Банка отправителя денег
проверяет корректность заполнения полей
Если валидация запроса проходит успешно, Платформа направляет ответ с HTTP статусом 200.
Платформа обрабатывает запрос на проведение оплаты (сообщение pacs.008), в том числе:
выполняет проверку позиций участников и лимитов;
выполняет блокирование средств для проведения транзакции.
Платформа направляет в Банк бенефициара запрос на проведение оплаты (сообщение pacs.008), подписав его ЭЦП Платформы.
В сообщении передается:
в теге <Document::GrpHdr:MsgId> – сгенерированный уникальный идентификатор нового сообщения
в теге <Document::PmtId:EndToEndId> – сквозной идентификатор из тега <EndToEndId> сообщения pacs.008 Банка отправителя денег
в поле <Document::PmtId:TxId> – идентификатор транзакции из тега <TxId> из сообщения pacs.008 Банка отправителя денег
указывается IBAN для счета Отправителя денег из сообщения pacs.008 Банка отправителя денег
указывается IBAN для счета Бенефициара из сообщения pacs.008 Банка отправителя денег
13.1. Банк бенефициара, получив запрос, проводит его обработку, в том числе:
проверяет подпись Платформы;
проверяет корректность заполнения полей.
Если валидация запроса проходит успешно, Банк бенефициара направляет ответ с HTTP статусом 200.
Банк бенефициара направляет информацию о том, что qr-код считан на POS-терминал
Банк бенефициара проверяет счет бенефициара на возможность зачисления денег
Банк бенефициара направляет статус обработки запроса проведения оплаты Платформе (сообщение pacs.002), подписав его своим ЭЦП.
В сообщении передается:
<Document::OrgnlEndToEndId> – сквозной идентификатор из тега <EndToEndId> исходного запроса (pacs.008)
<Document::OrgnlTxId> – идентификатор транзакции из тега <TxId> исходного запроса (из pacs.008)
Статус транзакции PDNG (в обработке)
16.1. Платформа, получив запрос, проводит его валидацию, в том числе:
проверяет подпись Банка бенефициара;
проверяет корректность заполнения полей.
Если валидация запроса проходит успешно, Платформа направляет ответ с HTTP статусом 200.
Платформа направляет статус обработки запроса проведения оплаты в Банк отправителя денег (сообщение pacs.002), подписав его ЭЦП Платформы.
В сообщении передается:
в теге <Document::OrgnlEndToEndId> – сквозной идентификатор из тега <EndToEndId> исходного запроса (pacs.008)
в теге <Document::OrgnlTxId> – идентификатор транзакции из тега <TxId> исходного запроса (из pacs.008)
Статус транзакции PDNG (в обработке)
17.1. Банк отправителя денег, получив запрос, проводит его валидацию, в том числе:
проверяет подпись Платформы;
проверяет корректность заполнения полей.
Если валидация запроса проходит успешно, Банк отправителя денег направляет ответ с HTTP статусом 200.
Платформа успешно завершает транзакцию (commit transaction).
Платформа направляет в качестве уведомления об успешной транзакции в Банк бенефициара сообщение pacs.002 со статусом транзакции ACSC, подписав его ЭЦП Платформы.
19.1. Банк бенефициара, получив сообщение pacs.002 со статусом транзакции, проводит его валидацию, в том числе:
проверяет подпись Платформы;
проверяет корректность заполнения полей.
Если валидация запроса проходит успешно, Банк бенефициара направляет ответ с HTTP статусом 200.
Примечание: Если Платформа направляет в Банк бенефициара сообщение pacs.002 со статусом транзакции ACSC, и им уже был получен такой же запрос (повторно отправлен pacs.002), то дополнительных действий Банк бенефициара не производит (не производит повторное зачисление денег на счет бенефициара и т.д.), а лишь отправляет ответ с HTTP статусом 200
19.2. Банк бенефициара производит зачисление денег на счет бенефициара и направляет информацию об этом на POS-терминал.
Платформа направляет в качестве уведомления об успешной транзакции в Банк отправителя денег сообщение pacs.002 со статусом транзакции ACSC, подписав его ЭЦП Платформы.
20.1. Банк отправителя денег, получив сообщение pacs.002 со статусом транзакции, проводит его валидацию, в том числе:
проверяет подпись Платформы;
проверяет корректность заполнения полей.
Если валидация запроса проходит успешно, Банк отправителя денег направляет ответ с HTTP статусом 200.
Примечание: Если Платформа направляет в Банк отправителя денег сообщение pacs.002 со статусом транзакции ACSC, и им уже был получен такой же запрос (повторно отправлен pacs.002), то дополнительных действий Банк отправителя денег не производит (не производит повторное списание денег со счета отправителя денег и т.д.), а лишь отправляет ответ с HTTP статусом 200
20.2. Банк отправителя денег производит списание денег со счета отправителя денег и уведомляет его о завершении операции.
Метод API (endpoint) | Банк отправителя денег | Банк бенефициара |
---|---|---|
Запрос данных по QR-коду для оплаты
(POST /v1/transfers/iso20022/admi.009.001.02)
+
Данные для оплаты
(POST /v1/transfers/iso20022/admi.010.001.02)
+
Запрос на перевод денег
(POST /v1/transfers/iso20022/pacs.008.001.11)
+
Статус обработки запроса перевода денег
(POST /v1/transfers/iso20022/pacs.002.001.13)
+
+