Песочница Универсальный QR-код
Подключение тестового API
После оформления подписки необходимо обратиться в техподдержку для подключения тестового API по адресу support@ecom.sberbank.ru с запросом:
Прошу на ФПА добавить в настройки aud APIGW для clientID [укажите clientId вашего приложения] для использования "заглушек".
Для тестирования API SberPay QR реализованы базовые сценарии оплаты по QR-коду Продавца с использованием "заглушек".
"Заглушки" поддерживают ограниченную логику, которой достаточно для ознакомления с процессом работы с заказом (создание, отмена, возврат, получение реестра).
На каждый запрос создается уникальный rquid.
Бизнес-процесс работы с заказом
-
Формирование заказа
Продавец формирует заказ (с уникальным номеромorder_number) и вызывает методCREATEдля создания заказа в Банке.- При успешном создании заказа Банк возвращает в ответе статус
CREATED(параметрorder_state) и номер заказа в Банке (order_id). - При невозможности создать заказ возвращается статус
DECLINED.
- При успешном создании заказа Банк возвращает в ответе статус
-
Отмена неоплаченного заказа
Если покупатель отказался от оплаты, неоплаченный заказ может быть отменен вызовом метода/revocation.
При успешной отмене заказ переводится в статусREVOKED. -
Переход в статус PAID
После оплаты заказа покупателем заказ переходит в статусPAID. Продавец узнает об этом, вызывая методSTATUS.
Заглушка реализует автоматический перевод в статусPAIDчерез минуту после оформления заказа. Новый статус отобразится после вызова операцииSTATUS. -
Отмена оплаченного заказа (REVERSE)
В течение 24-х часов оплаченный заказ может быть отменен методомCANCELс типом операцииREVERSE. -
Возврат денежных средств (REFUND)
Возврат по оплаченному заказу производится вызовом методаCANCELс типом операцииREFUNDв любое время после оплаты.
На тестовом стенде срок хранения данных ограничен, рекомендуется проводить тестирование возвратов в течение 24-х часов после создания заказа.
Таблица сервисов
| № | Описание сервиса | Процесс | URL | Инициатор | Потребитель | Синхронный |
|---|---|---|---|---|---|---|
| 1 | Создание заказа | QR-код Продавца / QR-код СБП | /oauth:https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth/creation: https://mc.api.sberbank.ru:443/prod/qr/order/stub/v3/creationscope: https://api.sberbank.ru/qr/order.create | Клиент | Сбербанк | Да |
| 2 | Запрос статуса заказа | QR-код Продавца / QR-код СБП | /oauth:https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth/status: https://mc.api.sberbank.ru:443/prod/qr/order/stub/v3/statusscope: https://api.sberbank.ru/qr/order.status | Клиент | Сбербанк | Да |
| 3 | Отмена сформированного заказа (до проведения финансовой операции) | QR-код Продавца / QR-код СБП | /oauth:https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth/revocation: https://mc.api.sberbank.ru:443/prod/qr/order/stub/v3/revocationscope: https://api.sberbank.ru/qr/order.revoke | Клиент | Сбербанк | Да |
| 4 | Отмена/возврат финансовой операции | QR-код Продавца / QR-код СБП | /oauth:https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth/cancel: https://mc.api.sberbank.ru:443/prod/qr/order/stub/v3/cancelscope: https://api.sberbank.ru/qr/order.cancel | Клиент | Сбербанк | Да |
| 5 | Запрос Реестра операций | QR-код Продавца / QR-код СБП | /oauth:https://mc.api.sberbank.ru:443/prod/tokens/v3/oauth/registry: https://mc.api.sberbank.ru:443/prod/qr/order/stub/v3/registryscope: auth://qr/order.registry | Клиент | Сбербанк | Да |
Позитивные сценарии
Сценарий 1 (оплата заказа, отмена оплаченного заказа)
-
Выполнить запрос
/creation, получить успешный ответ сorder_state=CREATED. Заказ создан.
Заказ автоматически переводится в статус PAID через минуту после создания. -
Выполнить запрос
/statusв течение минуты после создания, получить успешный ответ сorder_state=CREATED(заказ еще не оплачен, передавать товар клиенту нельзя). -
Выполнить запрос
/statusчерез минуту, получить успешный ответ сorder_state=PAID.
Заказ оплачен клиентом в его мобильном приложении. Кейс срабатывает, если найден ранее созданный заказ со статусомCREATED.
При переводе заказа в статусPAIDсоздается набор параметров авторизацииorder_operation_params(для статусаCREATEDпараметры не создаются). -
Выполнить запрос отмены оплаченного заказа
/cancel(заказ в статусеPAID):- с
operation_type=REVERSE, получить успешный ответ сorder_state=REVERSED; - с
operation_type=REFUND/null, получить успешный ответ сorder_state=REFUNDED.
- с
-
Выполнить запрос
/status, получить успешный ответ с текущимorder_state=REFUNDED/REVERSED(в зависимости от типа отмены) и с текущим наборомorder_operation_params. -
Выполнить запрос
/registry:- с
registryType=REGISTRY, получить успешный ответ с перечнем операций за период; - с
registryType=QUANTITY, получить успешный ответ с агрегированными данными по операциям за период.
- с
Сценарий 2 (отмена неоплаченного заказа)
-
Выполнить запрос
/creation, получить успешный ответ сorder_state=CREATED. Заказ создан. -
Выполнить запрос
/statusв течение минуты, получить успешный ответ сorder_state=CREATED. -
Выполнить запрос
/revocation, получить успешный ответ сorder_state=REVOKED.
Неоплаченный заказ отменен (например, если клиент отказался от оплаты).
Альтернативные сценарии
/creation— создание заказа/revocation— отмена сформированного заказа (до проведения финансовой операции)/status— запрос статуса заказа/cancel— отмена/возврат финансовой операции
/creation — создание заказа
Моделируется т аймаут (отсутствие ответа на запрос создания заказа), т.е. ситуация, когда торговая точка не знает, создан заказ или нет.
| № п/п | Условие | Результат | Пример запроса | Пример ответа |
|---|---|---|---|---|
| 1 | amount=6002 | Таймаут, заказ не создается | { "rq_tm": "2024-06-17T09:26:57Z", "operation_date_time": "2024-06-17T09:27:31Z", "sbp_operation_params": { "sbp_cancel_operation_id": "629bc42ddb0a4629827abc3d3a87bbe2", "sbp_merchant_name": "Ромашка_SBP" }, "operation_type": "REFUND", "operation_currency": "643", "tid": "20151881", "rrn": "832123399686", "auth_code": "501957", "order_status": "REFUNDED", "operation_sum": 1100, "id_qr": "1000100051", "error_description": "", "error_code": "990000", "operation_id": "96bf589d9940420a87d02d5bb837666d", "rq_uid": "e1a0bd56da294ddba5ea5760625dc23b", "order_id": "acce59772765431f8be55849588946e2" } | HTTP / 1.1 504 Gateway TimeoutServer: nginx / 1.20.1Date: Thu, 03 Feb 2022 14:14:06 GMTContent-Length: 0Connection: keep-aliveX-Rate-Limit-Limit: 20X-Rate-Limit-Remaining: 19X-Rate-Limit-Reset: 1643897637404 |
| 2 | Любая сумма, неравная 6002 | Повторный запрос с тем же order_number, но другой суммой. Получите успешный ответ с order_state=CREATED | { "rq_uid": "4b7eed9b632c40d898994626e7c7194f", "rq_tm": "2022-02-03T17:08:05Z", "member_id": "000001", "order_number": "8833917575134", "order_create_date": "2022-02-03T17:08:05Z", "order_params_type": [ { "position_name": "Water Still", "position_count": 1, "position_sum": 6003, "position_description": "Water Still" } ], "id_qr": "1000100051", "order_sum": 6003, "currency": "643", "description": "Water Still" } | { "rq_tm": "2022-02-03T17:08:05Z", "error_description": "Операция выполнена успешно", "order_number": "8833917575134", "order_form_url": "http://sberbank.ru/qr/?dynamicQR=a7b3a2b2395341b68bdfbf2424c1b300", "error_code": "000000", "rq_uid": "4b7eed9b632c40d898994626e7c7194f", "order_id": "a7b3a2b2395341b68bdfbf2424c1b300", "order_state": "CREATED" } |
/revocation — отмена сформированного заказа (до проведения финансовой операции)
| № п/п | Условие | Результат | Пример запроса | Пример ответа |
|---|---|---|---|---|
| 1 | Отмена несуществующего заказа. Заказ с order_id не найден в Банке. | Ошибка: • error_code=090000• error_description=Оригинальный заказ для отмены/возврата не найден | { "rq_uid": "add59867466f45ef8f431388a376b774", "rq_tm": "2005-08-15T15:52:01Z", "order_id": "a7b3a2b2395341b68bdfbf2424c1b301" } | { "rq_tm": "2005-08-15T15:52:01Z", "error_description": "Оригинальный заказ для отмены/возврата не найден", "error_code": "090000", "rq_uid": "add59867466f45ef8f431388a376b774" } |
| 2 | Статус заказа не позволяет провести его нефинансовую отмену. order_state не равен CREATED. | Ошибка: • error_code=080000• error_description=Нарушена последовательность запросов | { "rq_uid": "ef4e25c7f2194dc29f4bf657e7efe9ea", "rq_tm": "2005-08-15T15:52:01Z", "order_id": "37f894f034f6466580a79c8f36c0bc84" } | { "rq_tm": "2005-08-15T15:52:01Z", "error_description": "Нарушена последовательность запросов", "error_code": "080000", "rq_uid": "ef4e25c7f2194dc29f4bf657e7efe9ea" } |
/status — запрос статуса заказа
| № п/п | Условие | Результат | Пример запроса | Пример ответа |
|---|---|---|---|---|
| 1 | Нарушена связка номеров заказа партнера и Банка. order_id и/или partner_order_number не равны текущим значениям. | Ошибка: • error_code=100000• error_description=Указанный заказ не найден | { "rq_uid": "5b1905404f5540878587d4118129bd8f", "rq_tm": "2022-02-03T16:04:85Z", "order_id": "37f894f034f6466580a79c8f36c0bc84", "tid": "", "partner_order_number": "820336013834" } | { "rq_tm": "2022-02-03T16:04:85Z", "error_description": "Указанный заказ не найден", "mid": "101000012345", "error_code": "100000", "rq_uid": "5b1905404f5540878587d4118129bd8f" } |
| 2 | Торговая точка не получила ответ на запрос CREATE с номером заказа в Банке. Есть возможность узнать статус заказа по его номеру в торговой точке. order_id в этом случае не передавать. | Успешный ответ | { "rq_uid": "e3240d7e16b5484e99411c17b80867b1", "rq_tm": "2022-02-04T14:57:89Z", "tid": "21214354", "partner_order_number": "8203636013834" } | { "rq_tm": "2022-02-03T15:15:23Z", "mid": "101000012345", "tid": "21214354", "id_qr": "1000100051", "order_operation_params": [ { "operation_date_time": "2022-02-03T15:57:47Z", "response_code": "00", "operation_sum": 1111, "operation_type": "PAY", "response_desc": "Успешная обработка", "operation_id": "cf8f78a1-1e75-414e-95fc-8ce56932e5d9-0d1c07e8-abe9", "operation_currency": "643", "rrn": "962001894699", "auth_code": "86651307" } ], "error_code": "000000", "rq_uid": "1c80621a143f4cc48a7135a380cfed16", "order_id": "37f894f034f6466580a79c8f36c0bc84", "order_state": "PAID" } |
| 3 | Торговая точка выполняет запрос статуса после запроса на возврат СБП, для получения финального статуса по возврату (переход в финальный статус через 30 секунд) | "response_code": "99" (промежуточный статус в процессе возврата), если возврат СБП был совершен менее 30 секунд назад,"response_code": "00" (финальный статус, успех) – если 30 секунд назад и более | { "rq_uid": "e1a0bd56da294ddba5ea5760625dc23b", "rq_tm": "2024-06-17T09:26:57Z", "operation_id": "96bf589d9940420a87d02d5bb837666d", "operation_type": "REFUND", "order_id": " acce59772765431f8be55849588946e2", "id_qr": "1000100051", "cancel_operation_sum": 1100, "operation_currency": "643", "auth_code": "501957", "tid": "20151881" } | { "rq_tm": "2024-06-17T09:26:57Z", "operation_date_time": "2024-06-17T09:27:31Z", "sbp_operation_params": { "sbp_cancel_operation_id": "629bc42ddb0a4629827abc3d3a87bbe2", "sbp_merchant_name": "Ромашка_SBP" }, "operation_type": "REFUND", "operation_currency": "643", "tid": "20151881", "rrn": "832123399686", "auth_code": "501957", "order_status": "REFUNDED", "operation_sum": 1100, "id_qr": "1000100051", "error_description": "", "error_code": "990000", "operation_id": "96bf589d9940420a87d02d5bb837666d", "rq_uid": "e1a0bd56da294ddba5ea5760625dc23b", "order_id": "acce59772765431f8be55849588946e2" } |
/cancel — отмена/возврат финансовой операции
| № п/п | Условие | Результат | Пример запроса | Пример ответа |
|---|---|---|---|---|
| 1 | Попытка отмены несуществующего заказа. order_id не найден. | Ошибка: • error_code=090000• error_description=Оригинальный заказ для отмены/возврата не найден | { "rq_uid": "3f4f4fa411cd4da98499c45218ff9df3", "rq_tm": "2005-08-15T15:52:01Z", "operation_id": "000001", "order_id": "37f894f034f6466580a79c8f36c0bc81", "id_qr": "1000100051", "cancel_operation_sum": 100, "operation_currency": "643", "auth_code": "123", "tid": "21214354" } | { "rq_tm": "2005-08-15T15:52:01Z", "error_description": "Оригинальный заказ для отмены/возврата не найден", "error_code": "010000", "rq_uid": "3f4f4fa411cd4da98499c45218ff9df3", "order_id": "37f894f034f6466580a79c8f36c0bc81" } |
| 2 | Указан неверный тип операции. operation_type = PAY (допустимы только REFUND и REVERSE, null). | Ошибка валидации на шлюзе. Запрос не дойдет до поставщика сервиса. | { "rq_uid": "d7f8b5c37f444f0c91f4ef58c21c0352", "rq_tm": "2005-08-15T15:52:01Z", "operation_id": "000001", "order_id": "37f894f034f6466580a79c8f36c0bc84", "id_qr": "1000100051", "cancel_operation_sum": 100, "operation_currency": "643", "auth_code": "123", "tid": "21214354" } | { "httpCode": "400", "httpMessage": "Bad Request", "moreInformation": "Body of the request is not valid according to json schema" } |
| 3 | Не найдена транзакция оплаты, связанная с заказом. operation_id не найден в связке с заказом. | Ошибка: • error_code=050000• error_description=Некорректный формат запроса или данные не найдены | { "rq_uid": "ac01cA1CEae1D1111dABf1fD1Bb0acAd", "rq_tm": "2005-08-15T15:52:01Z", "operation_id": "6b368fbc-367f-40cd-b329-3b632597a403-07a262e4-024e", "order_id": "310670c0e6144475bb36b64ce7724a09", "operation_type": "REFUND", "id_qr": "1000100051", "cancel_operation_sum": 321, "operation_currency": "643", "auth_code": "123", "tid": "21214354" } | { "rq_tm": "2005-08-15T15:52:01Z", "error_description": "Некорректный формат запроса или данные не найдены", "error_code": "050000", "rq_uid": "ac01cA1CEae1D1111dABf1fD1Bb0acAd", "order_id": "310670c0e6144475bb36b64ce7724a09" } |
| 4 | Торговая точка выполняет возврат по заказу СБП, в ответ получает нефинальный статус ("error_code"= "990000"), что означает запрос в процессе обработки. | "error_code": "990000" в теле ответа | { "rq_uid": "fce97d55bcc34ff1bbf0c9a9bdf8276f", "rq_tm": "2024-06-17T09:25:19Z", "order_id": "acce59772765431f8be55849588946e2", "tid": "20151881", "partner_order_number": "325852686457" } | Промежуточный ответ:{ "rq_tm": "2024-06-17T09:25:19Z", "sbp_operation_params": { "sbp_operation_id": "92122336135248957226072191328692", "sbp_masked_payer_id": "*********9167" }, "mid": "101000012345", "tid": "20151881", "id_qr": "10000001", "order_operation_params": [ { "operation_date_time": "2024-06-17T09:26:57Z", "response_code": "00", "operation_sum": 1100, "operation_type": "PAY", "response_desc": "Тестовое описание", "operation_id": "d87080a7a63847d88d9c89f0a73f5cdf", "operation_currency": "643", "client_name": "Тест Тестович Т.", "rrn": "361144694147", "auth_code": "858811" }, { "operation_date_time": "2024-06-17T09:27:31Z", "response_code": "99", "operation_sum": 1100, "operation_type": "REFUND", "response_desc": "Операция выполнена успешно", "operation_id": "96bf589d9940420a87d02d5bb837666d", "operation_currency": "643", "rrn": "832123399686", "auth_code": "501957" } ], "error_code": "000000", "rq_uid": "fce97d55bcc34ff1bbf0c9a9bdf8276f", "order_id": "acce59772765431f8be55849588946e2", "order_state": "REFUNDED" }Финальный ответ: { "rq_tm": "2024-06-17T09:25:19Z", "sbp_operation_params": { "sbp_operation_id": "92122336135248957226072191328692", "sbp_masked_payer_id": "*********9167" }, "mid": "101000012345", "tid": "20151881", "id_qr": "10000001", "order_operation_params": [ { "operation_date_time": "2024-06-17T09:26:57Z", "response_code": "00", "operation_sum": 1100, "operation_type": "PAY", "response_desc": "Тестовое описание", "operation_id": "d87080a7a63847d88d9c89f0a73f5cdf", "operation_currency": "643", "client_name": "Тест Тестович Т.", "rrn": "361144694147", "auth_code": "858811" }, { "operation_date_time": "2024-06-17T09:27:31Z", "response_code": "00", "operation_sum": 1100, "operation_type": "REFUND", "response_desc": "Операция выполнена успешно", "operation_id": "96bf589d9940420a87d02d5bb837666d", "operation_currency": "643", "rrn": "832123399686", "auth_code": "501957" } ], "error_code": "000000", "rq_uid": "fce97d55bcc34ff1bbf0c9a9bdf8276f", "order_id": "acce59772765431f8be55849588946e2", "order_state": "REFUNDED" } |
Коллекция Postman
Для проверки работы сервисов в ручном режиме можно использовать подготовленную коллекцию:
SandBox SberPay.QR.postman_collection.json
Краткая инструкция по использованию коллекции сервисов Песочница Универсальный QR-код в Postman
1. Загрузка коллекции
Импорт коллекции в Postman:
- Перейти в настройки Postman (File → Import).
- В открывшемся окне "Import" нажать на кнопку "Upload Files" и выбрать сохраненный файл коллекции
"Mock коллекция SberAPI сертификат Минцифра.postman_collection.json"и нажать "Открыть". - Для загрузки коллекции нажать "Import", для выхода — "Cancel".
2. Добавление сертификата
Для использования коллекции нужно применить сертификат, полученный на портале для Песочницы:
- Перейти в настройки Postman (File → Settings).
- В окне «Settings» перейти на вкладку «Certificates».
- Нажать на кнопку «Add Certificate».
- В открывшемся окне заполнить поля:
- Host –
mc.api.sberbank.ru:443 - PFX file – добавить сертификат, выпущенный на портале
- Passphrase – ввести пароль от сертификата
- Host –
- После заполнения нажать «Add».
3. Авторизационные данные
Для авторизации запросов используется тип "Basic Auth":
- Во вкладке Authorization выбрать тип: Type = «Basic Auth».
- В поле «Username» вводится
client_id. - В поле «Password» —
client_secret.
4. Переменные коллекции
Используются в базовых сценариях для выполнения запросов без дополнительных манипуляций. При желании переменные можно изменить на валидные значения полей (валидность можно проверить в таблицах параметров запросов и ответов).
| VARIABLE / Переменная | Краткое пояснение | Где применяется |
|---|---|---|
creation_token | Токен создается в сервисе Access Token Creation, необходим для доступа к сервису Create. Срок жизни токена 60с. | Create - Authorization |
status_token | Токен создается в сервисе Access Token Status, необходим для доступа к сервису Status. Срок жизни токена 60с. | Status - Authorization |
order_id | Идентификатор заказа | Create - тело ответа (сохраняется в память); Status, Revocation, Cancel – тело запроса (подставляется из памяти) |
order_number | Номер заказа в CRM Клиента | Create, Status |
revocation_token | Токен создается в сервисе Access Token Revocation, необходим для доступа Create. Срок жизни токена 60с. | Revocation - Authorization |
cancel_token | Токен создается в сервисе Access Token Cancel, необходим для доступа к сервису Cancel. Срок жизни токена 60с. | Cancel - Authorization |
registry_token | Токен создается в сервисе Access Token RegistryQR, необходим для доступа к сервису RegistryQr. Срок жизни токена 60с. | Registry - Authorization |
auth_code | Код авторизации – любое валидное значение; в коллекции по умолчанию "12345" | Cancel |
rquid | Уникальный идентификатор запроса | Во всех сервисах |
member_id | Идентификатор клиента | Create |
sbp_member_id | Идентификатор клиента в СБП. Для Сбербанка: константа: 100000000111 | Create СБП QR |
id_qr | Идентификатор устройства, на котором сформирован заказ | Create QR, Cancel |
tid | Уникальный идентификатор терминала | Create СБП, Status, Cancel |
order_sum | Сумма заказа в копейках; в коллекции настроена как рандомное число от 0 до 1000 | Create |
today | Переменная для генерации текущей даты; в registry применяется для предоставления реестра операций за день. При желании можно изменить на любое валидное значение даты и времени. | REGISTRY |
tm | Переменная для генерации текущей даты и времени | Во всех сервисах |
position_sum | Сумма конкретной позиции заказа в копейках; в коллекции настроена как рандомное число от 0 до 1000 | Create |
operation_id | Идентификатор операции (оплаты/возврата) | Status – тело ответа (отдельно по каждой операции); подставляется в тело запроса Cancel – например, для возврата или отмены оплаченного заказа |