openapi: 3.0.0
info:
title: API интеграции Системы Быстрых Платежей (СБП)
version: '1.0'
contact:
email: ecom@raiffeisen.ru
name: Support e-mail
x-logo:
url: images/raifflogo.png
backgroundColor: '#FFFFFF'
altText: Raiff logo
description: |-
Свои предложения и идеи о документации можно оставить в репозитории по адресу: https://github.com/Raiffeisen-DGTL/ecom-API/blob/master/sbp.yml
# Подключение к СБП
Для приема СБП-платежей оставьте заявку на [сайте.](https://www.raiffeisen.ru/corporate/management/sbp/)
Райффайзенбанк выполнит регистрацию.
После завершения процесса вы будете оповещены на электронную почту.
## Участники СБП
### Покупатель
* выбирает в ПО партнёра услуги/товары и пункт «Оплата через СБП» (опционально)
* сканирует QR-код, предоставленный партнёром, и подтверждает платеж в приложении своего банка
* получает результат платежа и оплаченную услуги/товары
### Партнёр
* запрашивает формирование QR-кода для выбранных товаров/услуг (корзины)
* отображает QR-код клиенту для сканирования и произведения оплаты
* обрабатывает уведомления о результатах СБП-операций
* запрашивает данные по платежу (опционально)
* обеспечивает выдачу товаров/услуг покупателю по факту платежа
### Райффайзенбанк
* предоставляет интерфейс для запроса QR-кода со стороны партнёра
* обеспечивает перевод денежных средств на счет партнёра по факту расчетов в СБП
* определяет формат уведомления о факте СБП-платежа
* предоставляет интерфейс для получения данных по платежу
## Поддержка 54-ФЗ
По закону от 22.05.2003 № 54–ФЗ "О применении контрольно-кассовой техники при осуществлении расчетов в Российской Федерации"
при оплате товаров, работ или услуг необходимо формировать фискальный чек и отправлять его в налоговую с помощью кассы.
Райффайзенбанк предоставляет возможность фискализировать чеки через [API](https://e-commerce.raiffeisen.ru/api/doc/fiscal.html) банка.
# Общие схемы работы
## Схема работы с формой
B случае если прием платежей планируется на сайте или в мобильном приложение рекомендуем использовать [протокол с отображением QR на нашей форме.](https://e-commerce.raiffeisen.ru/api/doc/ecom.html)
## Схема работы по прямому протоколу СБП
Если прием платежей реализуется в физических точках или по каким либо причинам вам не подходит решение с нашей формой , можете использовать протокол описанный ниже.
На рисунке изображена схема информационного обмена c партнёром при реализации платежа по QR-коду.
## Схема работы с подписками
Вы можете предлагать клиенту привязать оплату по СБП к программе лояльности или к аккаунту в вашем сервисе. Для этого вы можете сгенерировать QR и отобразить его клиенту, либо перенаправить его на специальную ссылку, которая есть в ответе на запрос генерации QR на подписку.
После по уникальному идентификатору подписки вы можете обращаться за безакцептным списание средств с клиента за ваши товары и услуги.
## Схема работа по подпискам с оплатой
Так же есть схема когда одним запросом получается QR на получение оплаты и заведения подписки.
В данном случае клиент проводит оплату и после ему отображается окно с предложением подключения подписки.
Клиент может провести оплату, но отказаться от подписки. Так же клиент может провести оплату с приложения банка, который не подклбчен к сервису подписок.
# Готовые решения
Для более быстрой интеграции вы можете вопоспользоваться нашими SDK:
* [Java](https://github.com/Raiffeisen-DGTL/sbp-sdk-java)
Так же список готовых решений вы можете посмотреть [тут.](https://e-commerce.raiffeisen.ru/api/doc/solutions.html)
# Описание API
Bзаимодействие осуществляется по протоколу HTTP с использованием методов GET/POST (в описании каждого запроса явно указан требуемый метод и адрес).
POST-запросы используют JSON-аргументы, GET-запросы работают со строками запросов.
API всегда возвращает ответ в формате JSON, независимо от типа запроса.
Ответ любого метода содержит код сообщения (code). Если в процессе обработки любого запроса произойдет логическая ошибка, API вернет дополнительно описание ошибки (message).
## Авторизация
Запросы связанные с получением данных по платежу и управлением платежами авторизуются посредством секретного ключа API (sercretKey). Параметр авторизации указывается в заголовке Authorization, значение которого формируется как "Bearer secretKey".
Для получения тестовых данных для интеграции необходимо обратиться по адресу: ecom@raiffeisen.ru
Посмотреть боевой sbpMerchantId и сгенерировать ключи можно в [личном кабинете](https://www.rbo.raiffeisen.ru/acquiring/mcp#/) во вкладке "Прием платежей"

# Мобильная версия и приложение
При работе в мобильной версии сайта или приложении необходимо перенаправлять клиента по url из параметра payload.
У клиента откроется мобильное приложение банка или список выбора банка.
# Тестирование
Для полного цикла тестирования оплаты Райффайзенбанк предоставляет возможность использования демо-приложения для сканирования QRC от имени покупателя по адресу:
https://pay.raif.ru/pay/rfuture/
Указанный адрес можно открыть в браузере любого устройства, где есть камера. Никакого дополнительного софта/плагинов устанавливать не нужно. Далее нажать на значок СБП (при необходимости разрешить браузеру доступ к камере) и поднести к ней изображение QR-кода.
Если камера не открылась, проверьте что в адресе указан проткол https.
### Пример экранов демо-приложения

servers:
- url: 'https://e-commerce.raiffeisen.ru/api'
description: Production
- url: 'https://test.ecom.raiffeisen.ru/api'
description: Sandbox
tags:
- name: qr-controller
x-displayName: Работа с QR-кодом
description: |
Для реализации взаимодействия с партнёром Райффайзенбанк предоставляет API из следующих запросов:
* регистрация QR-кода,
* получение данных по зарегистрированному ранее QR-коду,
* получение данных по платежу,
* возврат денежных средств - может быть выполнен в любое время после проведения оплаты на полную сумму платежа или частичную. Однако сумма частичных запросов на возврат не должна превышать общую сумму заказа.
* получение информации по возврату.
[Схема взаимодействия.](#section/общие-схемы-работы/схема-работы-с-формой)
- name: qr-subscription
x-displayName: Подписки
description: |
Для включения функционала подписок необходима дополнительная настройка со стороны банка.
Выполняется при обращении в тех. поддержку.
Для реализации возможны два сценария:
* отдельно подписка с последующими платежами
[Схема взаимодействия.](#section/общие-схемы-работы/схема-работы-с-подписками)
* подписка с оплатой
[Схема взаимодействия.](#section/общие-схемы-работы/схема-работа-по-подпискам-с-оплатой)
- name: Callback
x-displayName: Уведомления
description: |
Для информирования ТСП о проведенных платежах могут использоваться HTTP-уведомления на адрес, указанный в его настройках.
Боевой адрес можно указать в [личном кабинете](https://www.rbo.raiffeisen.ru/acquiring/mcp#/) во вкладке "Прием платежей"

Так же адрес для тестовой и боевой среды можно указать с помощью [метода в API](#operation/post-settings-v1-callback).
Для партнёра уведомление представляет собой входящий POST-запрос, который использует JSON-структуру.
Уведомление считается принятым, если получатель ответил на запрос кодом HTTP 200.
Ответы с любыми другими HTTP-кодами будут считаться невалидными.
Повторные попытки отправки будут проводиться в течение суток с нарастающим интервалом.
Для проверки подлинности уведомления к данным добавляется подпись в заголовке X-Api-Signature-SHA256, полученная на основе общего секретного ключа и контрольной строки (amount|sbpMerchantId|order|paymentStatus|transactionDate) с помощью HMAC-SHA-256.
Уведомления отправляются с IP 193.28.44.23
- name: Registry
x-displayName: Реестр
description: |
Для подключения отправки реестров необходимо написать на ecom@raiffeisen.ru
Реестры по платежам отправляются на ежедневной основе.
В случае отсуствия операций за день, реестр на следующий день не отправляется.
Формат реестра:
Наименование колонки | Значение
--------|------------------
Мерчант | Идентификатор в системе СБП
Дата операции МСК | Дата и время проведения операции
Тип | Тип операции
id заказа | Id заказа в системе партнера (order)
id возврата | Id возврата в системе партнера (refundId)
Комментарий | Комментарий к заказу
Способ оплаты | Instant Payment QR
Данные оплаты | QR id
id клиента | Маскированный код плательщика
Сумма | Сумма транзакции
Комиссия | Комиссия по транзакции
Дополнительные поля | Дополнительная информация (Пока не используется)
Пример реестра
- name: Statement
x-displayName: Выписка
description: |
Выписку может выгрузить в банк-клиенте в следующих форматах:
* PDF
* 1C txt
* XML
В назначение платежа есть системиный префикс: номер проводки , тип операции , идентификатор мерчанта НСПК.
В примерах выписки указаны стандартные назначение платежа, вы можете его изменить, для этого необходимо при генерации QR и возвратах передавать параметр paymentDetails с вашими данными, при этом ваше значение будет идти после системного префикса.
- name: Errors
x-displayName: Справочник ошибок
description: |
Ответ любого метода содержит код сообщения (code). Если в процессе обработки любого запроса произойдет логическая ошибка, API вернет описание ошибки (message).
Описание основных ошибок:
code | message
------------|------
ERROR.ACCOUNT_IS_NOT_REGISTERED | Указан неверный счет. Проверьте его или удалите. Параметр является необязательным
ERROR.INVALID_REQUEST | Не передан обязательный параметр
ERROR.QR_EXPIRATION_DATE_NOT_VALID | Неверная дата истечения QR-кода
ERROR.MERCHANT_NOT_REGISTERED | Партнер с ID MA0000000552 не зарегистрирован
ERROR.ORDER_NUMBER_ALREADY_REGISTERED | QR-код с номером заказа ***, партнера MA0000000552 и успешными платежами уже зарегистрирован
ERROR.INVALID_REQUEST | Передана некорректная сумма платежа
ERROR.SBP_MERCHANT_ID_IS_MISSING | SbpMerchantId партнера не указан
ERROR.DYNAMIC_QR_WITHOUT_AMOUNT | Не передана сумма для динамического QR-кода
ERROR.INVALID_ORDER | В номере заказа поддерживаются A-z09_-.
ERROR.NOT_FOUND | QR-код не найден у данного партнера
ERROR.REFUND_INSUFFICIENT_FUNDS | Сумма возврата больше суммы остатка по платежу
ERROR.INVALID_REQUEST | Сумма возврата не может быть меньше 1 копейки
ERROR.REFUND_NOT_FOUND | Возврат с refundId *** не найден
- name: 02.06.2021
x-displayName: 02.06.2021
description: |
* Добавили [новый метод отмены QR-кода](#operation/delete-sbp-v2-qrs-qrId)
* Появилась [новая версия запроса на получения данных по QR-коду](#operation/get-sbp-v2-qrs-qrId)
- name: 06.07.2021
x-displayName: 06.07.2021
description: |
* Реализовали [сервис подписок](#tag/qr-subscription)
- name: 09.09.2021
x-displayName: 09.09.2021
description: |
* Исправлена длина параметра paymentDetails при операциях возвратах
x-tagGroups:
- name: API
tags:
- qr-controller
- qr-subscription
- Callback
- name: Сверка
tags:
- Registry
- Statement
- name: Справочник
tags:
- Errors
- name: История изменений
tags:
- 02.06.2021
- 06.07.2021
- 09.09.2021
paths:
/settings/v1/callback:
post:
summary: Настройка url для callback
operationId: post-settings-v1-callback
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/callbackSettings'
examples:
'200':
value:
callbackUrl: 'https://yoururl.ru'
tags:
- Callback
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/callbackSettings'
examples:
Payload:
value:
callbackUrl: 'https://yoururl.ru'
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
description: Для подписи уведомлений будет использоваться ключ из заголовка авторизации.
/sbp/v1/qr/register:
post:
summary: Регистрация QR
operationId: post-sbp-v1-qr-register
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/qrStatus'
examples:
QRDynamic subscription:
value:
code: SUCCESS
qrId: AD1F2CD7212E48FA919AB52EF0AEFB33
payload: 'https://qr.nspk.ru/AD1F2CD7212E48FA919AB52EF0AEFB33?type=02&bank=10000001&sum=111000&cur=RUB&crc=C08B'
qrUrl: 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AD1F2CD7212E48FA919AB52EF0AEFB33/image'
subscriptionId: '120059'
QRDynamic/QRStatic:
value:
code: SUCCESS
qrId: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75'
qrUrl: 'https://e-commerce.raiffeisen.ru/api/sbp/v1/qr/AD100004BAL7227F9BNP6KNE007J9B3K/image'
description: |-
Регистрация QR кода выполяется без авторизации, что позволяет сгенерировать его на сайте или приложении. Данный метод позволяет генерировать как статический QR кода , так и динамечкие QR кода. Так же с помощью данного метода вы можете сгенерировать QR код для оплаты с подпиской.
Тестовые QR можно оплатить только нашим [тестовым приложением.](#section/тестирование)
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/reqPayQR'
examples:
QRDynamic:
value:
account: 40700000000000000000
additionalInfo: Доп информация
amount: 1110
currency: RUB
order: 1-22-333
paymentDetails: Назначение платежа
qrType: QRDynamic
qrExpirationDate: '2023-07-22T09:14:38+03:00'
sbpMerchantId: MA0000000552
QRDynamic subscription:
value:
account: 40700000000000000000
additionalInfo: Доп информация
amount: 1110
currency: RUB
order: 1-22-333
paymentDetails: Назначение платежа
qrType: QRDynamic
qrExpirationDate: '2023-07-22T09:14:38+03:00'
sbpMerchantId: MA0000000552
subscription:
id: '120059'
subscriptionPurpose: Подписка на услуги
QRStatic:
value:
order: 1-22-333
qrType: QRStatic
sbpMerchantId: MA0000000552
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
tags:
- qr-controller
x-codeSamples:
- lang: cURL
source: |
curl --location --request POST 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/register' \
--header 'Content-Type: application/json' \
--data-raw '{
"account": 40700000000000000000,
"additionalInfo": "Доп информация",
"amount": 1110,
"currency": "RUB",
"order": "1-22-333",
"paymentDetails": "Назначение платежа",
"qrType": "QRDynamic",
"qrExpirationDate": "2023-07-22T09:14:38+03:00",
"sbpMerchantId": "MA0000000552"
}'
- lang: Java
source: |
String order = QRUtils.generateOrderNumber();
QRDynamic qrCode = new QRDynamic(order, new BigDecimal(100));
qrCode.setAccount("40700000000000000000");
qrCode.setAdditionalInfo("Доп информация");
qrCode.setPaymentDetails("Назначение платежа");
qrCode.setQrExpirationDate("2023-07-22T09:14:38.107227+03:00");
QRUrl response = client.registerQR(qrCode);
'/sbp/v2/qrs/{qrId}':
parameters:
- schema:
type: string
name: qrId
in: path
required: true
description: Уникальный идентификатор QR
delete:
summary: Отмена QR-кода
operationId: delete-sbp-v2-qrs-qrId
responses:
'200':
description: OK
tags:
- qr-controller
description: 'Метод позволяет оменить ранее созданный QR , до момента его оплаты'
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
x-codeSamples:
- lang: cURL
source: |
curl --location --request DELETE 'https://test.ecom.raiffeisen.ru/api/sbp/v2/qrs/ADAC306DDBF443CA94EBE3FA85CA4872' \
--header 'Authorization: Bearer eyJ0eXA***'
get:
summary: Получение данных по зарегистрированному ранее QR-коду
operationId: get-sbp-v2-qrs-qrId
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/qrInfov2'
examples:
'200':
value:
qrId: AD100004BAL7227F9BNP6KNE007J9B3K
qrStatus: NEW
qrExpirationDate: '2023-07-22T09:14:38+03:00'
payload: 'https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75'
qrUrl: 'https://e-commerce.raiffeisen.ru/api/sbp/v1/qr/AD100004BAL7227F9BNP6KNE007J9B3K/image'
description: Метод позволяет получить данные по зарегистрированному ранее QR-коду
tags:
- qr-controller
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
x-codeSamples:
- lang: cURL
source: |
curl --location --request GET 'https://test.ecom.raiffeisen.ru/api/sbp/v2/qrs/ADAC306DDBF443CA94EBE3FA85CA4872' \
--header 'Authorization: Bearer eyJ0eXA***'
'/sbp/v1/qr/{qrId}/info':
parameters:
- schema:
type: string
name: qrId
in: path
required: true
description: Уникальный идентификатор QR
get:
summary: Получение данных по зарегистрированному ранее QR-коду
tags:
- qr-controller
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/qrStatus'
examples:
'200':
value:
code: SUCCESS
qrId: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75'
qrUrl: 'https://e-commerce.raiffeisen.ru/api/sbp/v1/qr/AD100004BAL7227F9BNP6KNE007J9B3K/image'
operationId: get-sbp-v1-qr-qrId-info
deprecated: true
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
x-codeSamples:
- lang: cURL
source: |
curl --location --request GET 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS6E5A7F9E3A4E648C536EC930AECDF6/info' \
--header 'Authorization: Bearer eyJ0eXA***'
- lang: Java
source: |
String qrIdString = "...";
QRId id = new QRId(qrIdString);
QRUrl response = client.getQRInfo(id);
description: Метод позволяет получить данные по зарегистрированному ранее QR-коду
'/sbp/v1/qr/{qrId}/payment-info':
parameters:
- schema:
type: string
name: qrId
in: path
required: true
description: Уникальный идентификатор QR
get:
summary: Получение информации по платежу
tags:
- qr-controller
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/paymentInfo'
examples:
'200':
value:
additionalInfo: Доп информация
paymentPurpose: Назначение платежа
amount: 12399
code: SUCCESS
createDate: '2020-01-31T09:14:38.107227+03:00'
currency: RUB
merchantId: 123
order: 282a60f8-dd75-4286-bde0-af321dd081b3
paymentStatus: SUCCESS
qrId: AD100051KNSNR64I98CRUJUASC9M72QT
sbpMerchantId: MA0000000552
transactionDate: '2019-07-11T17:45:13.109227+03:00'
transactionId: 23
qrExpirationDate: '2020-01-15T13:00:40+03:00'
operationId: get-sbp-v1-qr-qrId-payment-info
description: Метод позволяет получить данные по платежу по QR
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
description: '[secretKey](#section/API/авторизация)'
name: 'Authorization:'
required: true
x-codeSamples:
- lang: cURL
source: |
curl --location --request GET 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS6E5A7F9E3A4E648C536EC930AECDF6/payment-info' \
--header 'Authorization: Bearer eyJ0eXA***'
- lang: Java
source: |
String qrIdString = "...";
QRId id = new QRId(qrIdString);
PaymentInfo response = client.getPaymentInfo(id);
/sbp/v1/refund:
post:
summary: Оформление возврата по платежу
operationId: post-sbp-v1-refund
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/responeRefund'
examples:
'200':
value:
code: SUCCESS
amount: 150
refundStatus: IN_PROGRESS
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/refundQR'
examples:
QRDynamic:
value:
amount: 150
order: test_order_007
paymentDetails: Test
refundId: test_refundId_007
QRStatic:
value:
amount: 150
order: test_order_007
paymentDetails: Test
refundId: test_refundId_007
transactionId: 41
tags:
- qr-controller
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
x-codeSamples:
- lang: cURL
source: |
curl --location --request POST 'https://test.ecom.raiffeisen.ru/api/sbp/v1/refund' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJ0eXA***' \
--data-raw '{
"amount": 150,
"order": "test_order_007",
"paymentDetails": "Test",
"refundId": "test_refundId_007",
"transactionId": 41
}'
- lang: Java
source: |
BigDecimal moneyAmount = new BigDecimal(150);
String orderInfo = "...";
String refundId = "...";
long transactionId = ...;
RefundInfo refundInfo = new RefundInfo(moneyAmount, orderInfo, refundId);
RefundStatus response = client.refundPayment(refundInfo);
description: Метод позволяет осуществлять полный и частичный возврат по QR
'/sbp/v1/refund/{refundId}':
parameters:
- schema:
type: string
name: refundId
in: path
required: true
description: Уникальный идентификатор запроса на возврат в системе партнера
get:
summary: Получение информации по возврату
tags:
- qr-controller
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/responeRefund'
examples:
'200':
value:
code: SUCCESS
amount: 150
refundStatus: COMPLETED
operationId: get-sbp-v1-refund-refundId
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
x-codeSamples:
- lang: cURL
source: |
curl --location --request GET 'https://test.ecom.raiffeisen.ru/api/sbp/v1/refund/111112222200046' \
--header 'Authorization: Bearer eyJ0eXA***'
- lang: Java
source: |
String refundIdString = "...";
RefundId refundId = new RefundId(refundIdString);
RefundStatus response = client.getRefundInfo(refundId);
description: Получение информации по возврату
/sbp/v1/subscriptions:
post:
summary: Создание QR для подписки
operationId: post-sbp-v1-subscriptions
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/subscriptionRespones'
examples:
'200':
value:
id: '120059'
createDate: '2020-01-31T09:14:38.107227+03:00'
status: INACTIVE
qr:
id: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://sub.nspk.ru/AS3D33FC7B034DEEA8A365142E1DE737?type=03&bank=10000001&crc=C08B'
url: 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS3D33FC7B034DEEA8A365142E1DE737/image'
description: 'Метод позволяет зарегистрировать QR для последующей привязки счета клиента в выбранном банке. Для мобильного интерфейса используется диплинк, который возвращается в qr.payload. Создание подписки выполняется без авторизации, что позволяет использовать метод на сайте и в мобильном приложении.'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/createSubscription'
examples:
Payload:
value:
id: '120059'
subscriptionPurpose: Подписка на услуги
sbpMerchantId: MA0000000552
tags:
- qr-subscription
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
'/sbp/v1/subscriptions/{subscriptionId}':
parameters:
- schema:
type: string
name: subscriptionId
in: path
required: true
description: Идентификатор подписки.
get:
summary: Получение информации по подписке
tags:
- qr-subscription
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/subscriptionStatus'
examples:
'200':
value:
id: '120059'
bank: someBank
createDate: '2020-01-31T09:14:38.107227+03:00'
status: INACTIVE
qr:
id: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://sub.nspk.ru/AS3D33FC7B034DEEA8A365142E1DE737?type=03&bank=10000001&crc=C08B'
url: 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS3D33FC7B034DEEA8A365142E1DE737/image'
operationId: get-sbp-v1-subscriptions-subscriptionId
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
description: Метод позволяет получить данные по ранее созданной подписки
'/sbp/v1/subscriptions/{subscriptionId}/orders':
parameters:
- schema:
type: string
name: subscriptionId
in: path
required: true
description: Идентификатор подписки.
post:
summary: Запрос на совершение платежа по подписке
operationId: post-sbp-v1-subscriptions-subscriptionId-orders
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/paymentStatus'
examples:
'200':
value:
additionalInfo: Доп информация
paymentDetails: Назначение платежа
amount: 12399
currency: RUB
order: 282a60f8-dd75-4286-bde0-af321dd081b3
paymentStatus: SUCCESS
qrId: AD100051KNSNR64I98CRUJUASC9M72QT
sbpMerchantId: MA0000000552
description: Метод позволяет создать заказ и инициировать списание со счета клиента в рамках созданной подписки. При успешном списании будет направлено стандартное уведомление об оплате.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/createPayment'
examples:
Payload:
value:
account: 40700000000000000000
additionalInfo: Доп информация
amount: 1110
currency: RUB
order: 1-22-333
paymentDetails: Назначение платежа
tags:
- qr-subscription
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
'/sbp/v1/subscriptions/{subscriptionId}/orders/{order}':
parameters:
- schema:
type: string
name: subscriptionId
in: path
required: true
description: Идентификатор подписки
- schema:
type: string
name: order
in: path
required: true
description: Уникальный идентификатор заказа в системе партнёра.
get:
summary: Проверка статуса платежа по подписке
tags:
- qr-subscription
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/paymentStatus'
examples:
'200':
value:
additionalInfo: Доп информация
paymentDetails: Назначение платежа
amount: 12399
currency: RUB
order: 282a60f8-dd75-4286-bde0-af321dd081b3
paymentStatus: SUCCESS
qrId: AD100051KNSNR64I98CRUJUASC9M72QT
sbpMerchantId: MA0000000552
operationId: get-sbp-v1-subscriptions-subscriptionId-orders-id
description: Метод позволяет получить данные по платежу сделанному по подписки
parameters:
- schema:
type: string
in: header
name: 'Content-type:'
description: application/json
required: true
- schema:
type: string
in: header
name: 'Authorization:'
description: '[secretKey](#section/API/авторизация)'
required: true
components:
schemas:
paymentInfo:
description: ''
type: object
x-examples:
example-1:
additionalInfo: Доп информация
paymentPurpose: Назначение платежа
amount: 12399
code: SUCCESS
createDate: '2020-01-31T09:14:38.107227+03:00'
currency: RUB
merchantId: 123
order: 282a60f8-dd75-4286-bde0-af321dd081b3
paymentStatus: SUCCESS
qrId: AD100051KNSNR64I98CRUJUASC9M72QT
sbpMerchantId: MA0000000552
transactionDate: '2019-07-11T17:45:13.109227+03:00'
transactionId: 23
qrExpirationDate: '2020-01-15T13:00:40+03:00'
title: paymentRespone
properties:
additionalInfo:
type: string
minLength: 1
description: 'Дополнительная информация, заполняемая по желанию партнёра при генерации QR-кода. Может быть доступна для пользователя в зависимости от банка.'
paymentPurpose:
type: string
minLength: 1
description: Назначение платежа.
amount:
type: number
description: Сумма платежа
code:
type: string
minLength: 1
description: Код сообщения
createDate:
type: string
minLength: 1
description: Время формирования заявки
currency:
type: string
minLength: 1
enum:
- RUB
description: Валюта платежа
merchantId:
type: number
description: 'Уникальный идентификатор партнёра, выданный банком'
order:
type: string
minLength: 1
description: Уникальный идентификатор заказа в системе партнёра.
paymentStatus:
type: string
minLength: 1
enum:
- SUCCESS
- DECLINED
- NO_INFO
- IN_PROGRESS
description: Статус платежа
qrId:
type: string
minLength: 1
description: 'Уникальный идентификатор QRC, выданный СБП при запросе генерации QR'
sbpMerchantId:
type: string
minLength: 1
description: 'Уникальный идентификатор партнёра, выданный СБП'
transactionDate:
type: string
minLength: 1
description: Дата и время проведения платежа
transactionId:
type: integer
description: Идентификатор операции платежа в Райффайзенбанке
qrExpirationDate:
type: string
minLength: 1
description: Время истечения срока жизни QR
format: 'YYYY-MM-DD ТHH24:MM:SS±HH:MM'
required:
- amount
- code
- createDate
- currency
- merchantId
- order
- paymentStatus
- qrId
- sbpMerchantId
- qrExpirationDate
reqPayQR:
title: ''
type: object
discriminator:
propertyName: qrType
mapping:
QRDynamic: '#/components/schemas/QRDynamic'
QRStatic: '#/components/schemas/QRStatic'
QRDynamic:
description: 'Динамический QR код создается под каждую продажу. Такой QR можно оплатить только один раз, сумма зашивается сразу в QR.'
allOf:
- $ref: '#/components/schemas/reqPayQR'
- type: object
properties:
account:
type: number
description: 'Счет для зачисления. Параметр используется, если необходимо разносить платежи на разные счета. '
maximum: 20
additionalInfo:
type: string
description: 'Дополнительная информация, заполняемая по желанию партнёра при генерации QR-кода. Может быть доступна для пользователя в зависимости от банка.'
maxLength: 140
amount:
type: number
description: 'Сумма в рублях. '
currency:
type: string
description: Валюта платежа.
enum:
- RUB
maxLength: 3
minLength: 3
order:
type: string
description: Уникальный идентификатор заказа в системе партнёра.
pattern: '^[A-z0-9-_.]'
maxLength: 40
minLength: 1
paymentDetails:
type: string
description: Назначение платежа. Необязательно для заполнения.
maxLength: 185
qrType:
type: string
enum:
- QRDynamic
description: 'Тип QR-кода.
Динамический QR код создается под каждую продажу. Такой QR можно оплатить только один раз, сумма зашивается сразу в QR.'
qrExpirationDate:
type: string
minLength: 1
description: 'Опциональный параметр для указания срока действия QR-кода. При заполнении не может быть меньше текущей даты и времени. После истечения срока действия QR-кода оплату по нему провести нельзя. Если срок действия не указан, QR будет действителен 3 суток. ISO 8601'
format: 'YYYY-MM-DD ТHH24:MM:SS±HH:MM'
sbpMerchantId:
type: string
description: Идентификатор зарегистрированного партнёра в СБП
maxLength: 12
subscription:
type: object
description: Используется для оплаты с последующей подпиской
properties:
id:
type: string
minLength: 1
description: Идентификатор подписки
subscriptionPurpose:
type: string
minLength: 1
description: Описание подписки которое увидит клиент в приложении банка. Обязателен для подписки
required:
- amount
- currency
- order
- qrType
- sbpMerchantId
QRStatic:
description: 'Статический QR-код может быть оплачен несколько раз. Если будет зарегистрирован статический QR-код без суммы - клиент самостоятельно укажет сумму в мобильном приложении. Подходит для размещения на кассе и благотворительных фондов. '
allOf:
- $ref: '#/components/schemas/reqPayQR'
- type: object
properties:
account:
type: number
description: 'Счет для зачисления. Параметр используется, если необходимо разносить платежи на разные счета. '
maximum: 20
additionalInfo:
type: string
description: 'Дополнительная информация, заполняемая по желанию партнёра при генерации QR-кода. Может быть доступна для пользователя в зависимости от банка.'
maxLength: 140
amount:
type: number
description: Сумма в рублях.
currency:
type: string
description: 'Валюта платежа. Обязательно для заполнения, если заполнена сумма.'
maxLength: 3
minLength: 3
enum:
- RUB
order:
type: string
minLength: 1
description: Уникальный идентификатор заказа в системе партнёра
maxLength: 40
pattern: '^[A-z0-9-_.]'
paymentDetails:
type: string
description: Назначение платежа. Необязательно для заполнения.
maxLength: 185
qrType:
description: 'Тип QR-кода
Статический QR-код может быть оплачен несколько раз. Если будет зарегистрирован статический QR-код без суммы - клиент самостоятельно укажет сумму в мобильном приложении. Подходит для размещения на кассе и благотворительных фондов. '
type: string
qrExpirationDate:
type: string
description: Опциональный параметр для указания срока действия QR-кода. При заполнении не может быть меньше текущей даты и времени. После истечения срока действия QR-кода оплату по нему провести нельзя. ISO 8601
format: 'YYYY-MM-DD ТHH24:MM:SS±HH:MM'
sbpMerchantId:
type: string
description: Идентификатор зарегистрированного партнёра в СБП
maxLength: 12
required:
- order
- sbpMerchantId
qrStatus:
description: ''
type: object
x-examples:
example-1:
code: SUCCESS
qrId: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75'
qrUrl: 'https://e-commerce.raiffeisen.ru/api/sbp/v1/qr/AD100004BAL7227F9BNP6KNE007J9B3K/image'
properties:
code:
type: string
description: Код сообщения
maxLength: 140
qrId:
type: string
description: Идентификатор зарегистрированного QRС в СБП
maxLength: 32
payload:
type: string
description: 'Данные для самостоятельной генерации изображения зарегистрированного QR-кода в СБП. При открытии с мобильного устройства, запускает банковское приложение клиента или список выбора банка.'
qrUrl:
type: string
description: URL с изображением зарегистрированного QR-кода в СБП
subscriptionId:
type: string
description: Идентификатор подписки
required:
- code
- qrId
- payload
- qrUrl
refundQR:
title: Возврат QR
type: object
properties:
amount:
type: number
description: Сумма возврата в рублях
order:
type: string
description: Уникальный идентификатор заказа в системе партнёра
maxLength: 40
paymentDetails:
type: string
description: Назначение платежа
maxLength: 140
refundId:
type: string
description: Уникальный идентификатор запроса на возврат в системе партнера
maxLength: 40
transactionId:
type: number
description: 'Идентификатор операции платежа в Райффайзенбанке, обязателен только для QRStatic'
required:
- amount
- order
- refundId
subscriptionStatus:
description: ''
type: object
x-examples:
example-1:
id: '120059'
bank: someBank
createDate: '2020-01-31T09:14:38.107227+03:00'
status: INACTIVE
qr:
id: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://sub.nspk.ru/AS3D33FC7B034DEEA8A365142E1DE737?type=03&bank=10000001&crc=C08B'
url: 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS3D33FC7B034DEEA8A365142E1DE737/image'
properties:
id:
type: string
description: Идентификатор подписки.
bank:
type: string
description: Идентификатор банка в котором осуществленна подписка.
createDate:
type: string
description: Время формирования заявки
status:
type: string
description: Статус подписки
enum:
- INACTIVE
- SUBSCRIBED
- UNSUBSCRIBED
qr:
type: object
required:
- id
- payload
- url
description: Данные по QR-подписки
properties:
id:
type: string
description: Уникальный идентификатор QR кода
payload:
type: string
description: 'Данные для самостоятельной генерации изображения зарегистрированного QR-кода в СБП. При открытии с мобильного устройства, запускает банковское приложение клиента или список выбора банка.'
url:
type: string
description: URL с изображением зарегистрированного QR-кода в СБП
required:
- id
- createDate
- status
- qr
paymentStatus:
description: ''
type: object
x-examples:
example-1:
additionalInfo: Доп информация
paymentDetails: Назначение платежа
amount: 12399
currency: RUB
order: 282a60f8-dd75-4286-bde0-af321dd081b3
paymentStatus: SUCCESS
qrId: AD100051KNSNR64I98CRUJUASC9M72QT
sbpMerchantId: MA0000000552
properties:
additionalInfo:
type: string
description: 'Дополнительная информация, заполняемая по желанию партнёра при генерации QR-кода. Может быть доступна для пользователя в зависимости от банка.'
paymentDetails:
type: string
description: Назначение платежа.
amount:
type: number
description: Сумма платежа
currency:
type: string
description: Валюта платежа
enum:
- RUB
order:
type: string
description: Уникальный идентификатор заказа в системе партнёра.
paymentStatus:
type: string
enum:
- SUCCESS
- DECLINED
- IN_PROGRESS
description: Статус платежа
qrId:
type: string
description: 'Уникальный идентификатор QRC, выданный СБП при запросе генерации QRC'
sbpMerchantId:
type: string
description: 'Уникальный идентификатор партнёра, выданный СБП'
required:
- amount
- currency
- order
- paymentStatus
- qrId
- sbpMerchantId
subscriptionRespones:
description: ''
type: object
x-examples:
example-1:
id: '120059'
createDate: '2020-01-31T09:14:38.107227+03:00'
status: INACTIVE
qr:
id: AD100004BAL7227F9BNP6KNE007J9B3K
payload: 'https://sub.nspk.ru/AS3D33FC7B034DEEA8A365142E1DE737?type=03&bank=10000001&crc=C08B'
url: 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS3D33FC7B034DEEA8A365142E1DE737/image'
properties:
id:
type: string
description: Идентификатор подписки.
createDate:
type: string
description: Время формирования заявки
status:
type: string
description: Статус подписки
enum:
- INACTIVE
- SUBSCRIBED
- UNSUBSCRIBED
qr:
type: object
required:
- id
- payload
- url
description: Данные по QR-подписки
properties:
id:
type: string
description: Уникальный идентификатор QR кода
payload:
type: string
description: 'Данные для самостоятельной генерации изображения зарегистрированного QR-кода в СБП. При открытии с мобильного устройства, запускает банковское приложение клиента или список выбора банка.'
url:
type: string
description: URL с изображением зарегистрированного QR-кода в СБП
required:
- id
- createDate
- status
- qr
subscriptionNotification:
title: subscriptionNotification
type: object
properties:
event:
type: string
description: Тип уведомления.
example: subscription
subscription:
type: object
properties:
id:
type: string
description: Идентификатор подписки.
example: '120059'
bank:
type: string
description: Идентификатор банка в котором осуществленна подписка.
example: someBank
createDate:
type: string
format: date-time
description: Время формирования заявки
example: '2020-01-31T09:14:38.107227+03:00'
status:
example: SUBSCRIBED
qr:
type: object
properties:
id:
type: string
description: Уникальный идентификатор QR кода
example: AD100004BAL7227F9BNP6KNE007J9B3K
payload:
type: string
description: 'Данные для самостоятельной генерации изображения зарегистрированного QR-кода в СБП. При открытии с мобильного устройства, запускает банковское приложение клиента или список выбора банка.'
example: 'https://sub.nspk.ru/AS3D33FC7B034DEEA8A365142E1DE737?type=03&bank=10000001&crc=C08B'
url:
type: string
description: URL с изображением зарегистрированного QR-кода в СБП
example: 'https://test.ecom.raiffeisen.ru/api/sbp/v1/qr/AS3D33FC7B034DEEA8A365142E1DE737/image'
description: Уведомления о подписке
paymentNotification:
title: paymentNotification
type: object
properties:
transactionId:
type: number
description: Идентификатор операции платежа в Райффайзенбанке
example: 41
qrId:
type: string
description: 'Уникальный идентификатор QR-кода, выданный СБП при запросе генерации QR-кода'
maxLength: 32
example: AS100032PQ7739G58NCQ457RA2OG82JP
sbpMerchantId:
type: string
description: Идентификатор зарегистрированного ТСП в СБП
maxLength: 12
example: MA0000000279
merchantId:
type: number
description: Идентификатор ТСП в Райффайзенбанке
example: 1780672001
amount:
type: number
description: Сумма в рублях
example: 10
currency:
type: string
description: Валюта платежа
maxLength: 3
example: RUB
transactionDate:
type: string
format: 'YYYY-MM-DD ТHH24:MM:SS±HH:MM'
description: Дата и время проведения платежа
example: '2020-01-15T16:01:49.043924+03:00'
paymentStatus:
type: string
description: Статус проведения платежа
example: SUCCESS
additionalInfo:
type: string
description: 'Дополнительная информация, заполняемая по желанию ТСП при генерации QR-кода. Может быть доступна для пользователя в зависимости от банка.'
maxLength: 140
example: Some info
order:
type: string
description: Уникальный идентификатор заказа
maxLength: 40
example: testOrder
createDate:
type: string
format: 'YYYY-MM-DD ТHH24:MM:SS±HH:MM'
description: Время формирования заявки
example: '2020-01-15T13:00:40+03:00'
description: Уведомления о платеже
callbackSettings:
description: ''
type: object
properties:
callbackUrl:
type: string
minLength: 1
required:
- callbackUrl
x-examples:
Payload:
callbackUrl: 'https://yoururl.ru'
value:
callbackUrl: 'https://yoururl.ru'
title: callbackSettings
qrInfov2:
description: ''
type: object
x-examples:
'200':
qrId: AD100004BAL7227F9BNP6KNE007J9B3K
qrStatus: NEW
qrExpirationDate: '2023-07-22T09:14:38+03:00'
payload: 'https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75'
qrUrl: 'https://e-commerce.raiffeisen.ru/api/sbp/v1/qr/AD100004BAL7227F9BNP6KNE007J9B3K/image'
value:
qrId: AD100004BAL7227F9BNP6KNE007J9B3K
qrStatus: NEW
qrExpirationDate: '2023-07-22T09:14:38+03:00'
payload: 'https://qr.nspk.ru/AD100004BAL7227F9BNP6KNE007J9B3K?type=02&bank=100000000007&sum=1&cur=RUB&crc=AB75'
qrUrl: 'https://e-commerce.raiffeisen.ru/api/sbp/v1/qr/AD100004BAL7227F9BNP6KNE007J9B3K/image'
title: qrInfov2
properties:
qrId:
type: string
description: Идентификатор зарегистрированного QRС в СБП
qrStatus:
type: string
description: Код состояния QR кода
enum:
- NEW
- IN_PROGRESS
- CANCELLED
- EXPIRED
- PAID
qrExpirationDate:
type: string
description: 'Опциональный параметр для указания срока действия QR-кода. При заполнении не может быть меньше текущей даты и времени. После истечения срока действия QR-кода оплату по нему провести нельзя. Если Тип QR = QRDynamic и поле не заполнено, срок действия будет 3 суток. ISO 8601'
payload:
type: string
description: 'Данные для самостоятельной генерации изображения зарегистрированного QR-кода в СБП. При открытии с мобильного устройства, запускает банковское приложение клиента или список выбора банка.'
qrUrl:
type: string
description: URL с изображением зарегистрированного QR-кода в СБП
required:
- qrId
- qrStatus
- qrExpirationDate
- payload
- qrUrl
responeRefund:
description: ''
type: object
x-examples:
Payload:
code: SUCCESS
amount: 150
refundStatus: IN_PROGRESS
value:
code: SUCCESS
amount: 150
refundStatus: IN_PROGRESS
title: responeRefund
properties:
code:
type: string
description: Код состояния http запроса
amount:
type: number
description: Сумма возврата в рублях
refundStatus:
type: string
description: Код состояния запроса на возврат
enum:
- IN_PROGRESS
- COMPLETED
- DECLINED
required:
- code
- amount
- refundStatus
createSubscription:
description: ''
type: object
x-examples:
Payload:
id: '120059'
subscriptionPurpose: Подписка на услуги
sbpMerchantId: MA0000000552
value:
id: '120059'
subscriptionPurpose: Подписка на услуги
sbpMerchantId: MA0000000552
title: createSubscription
properties:
id:
type: string
description: Идентификатор подписки.
subscriptionPurpose:
type: string
description: Описание подписки которое увидит клиент в приложении банка.
maxLength: 185
sbpMerchantId:
type: string
description: Идентификатор зарегистрированного партнёра в СБП
required:
- subscriptionPurpose
- sbpMerchantId
createPayment:
description: ''
type: object
x-examples:
Payload:
account: 40700000000000000000
additionalInfo: Доп информация
amount: 1110
currency: RUB
order: 1-22-333
paymentDetails: Назначение платежа
value:
account: 40700000000000000000
additionalInfo: Доп информация
amount: 1110
currency: RUB
order: 1-22-333
paymentDetails: Назначение платежа
properties:
account:
type: number
description: 'Счет для зачисления. Параметр используется, если необходимо разносить платежи на разные счета. Не используется в тестовой среде.'
additionalInfo:
type: string
description: 'Дополнительная информация, заполняемая по желанию партнёра. Может быть доступна для пользователя в зависимости от банка.'
maxLength: 140
amount:
type: number
description: Сумма в рублях.
currency:
type: string
description: Валюта платежа.
enum:
- RUB
order:
type: string
description: Уникальный идентификатор заказа в системе партнёра.
maxLength: 40
paymentDetails:
type: string
description: Назначение платежа. Необязательно для заполнения.
maxLength: 185
required:
- amount
- currency
- order
title: createPayment
x-webhooks:
newPay:
post:
summary: Уведомление о платеже
operationId: сallbackPay
tags:
- Callback
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/paymentNotification'
newSubscriprion:
post:
summary: Уведомление о подписке
operationId: сallbackSubscription
tags:
- Callback
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/subscriptionNotification'