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'