Сценарий: СБП
Запрос идентичен сценарию банковской карты — в обоих протоколах. Способ оплаты выбирается параметрами к адресу оплаты из ответа (AuthorizationUrl в XML, authorization. в JSON), а не полем запроса: без параметров открывается форма карты, ?useSbp=true — СБП, ?payType=Sber&deviceType=Desktop и ?payType=Sber&deviceType=Mobile — SberPay. Один счёт открывается любым способом, пока не оплачен.
SberPay и СБП мок не различает — оба сводятся к QR-флоу, отличается только экран, выбранный по deviceType.
- CreateInvoice — так же, как для карты.
- Перенаправить пользователя на адрес оплаты с параметром
?useSbp=true. - Клиент оплачивает — сценарий зависит от устройства (ниже) → коллбек с
BillingChannel=BankRtp.
Поле payment_method в теле запроса — deprecated и будет снято в 3.0.0. Переданное значение не меняет состав ответа: песочница отдаёт тот же адрес оплаты, только с уже дописанными параметрами. Значение вне перечня sbp / sberpay_desktop / sberpay_mobile по-прежнему отвергается 422 INVALID_PAYMENT_METHOD с перечислением допустимых — опечатка не выглядит как «СБП не работает».
Два сценария оплаты
Страница СБП сама определяет устройство по User-Agent и показывает то, что работает в боевом СБП.
| Устройство | Что видит клиент |
|---|---|
| Десктоп | Универсальный QR-код. Клиент сканирует его телефоном — камерой или в приложении банка — и подтверждает оплату там. Банк на сайте не выбирается: выбор происходит в приложении |
| Телефон | Кнопка «Оплатить через СБП» и список банков. QR сканировать нечем — тем же устройством это невозможно, — поэтому клиент выбирает банк и переходит в его приложение по диплинку |
Посмотреть оба сценария с одной машины: добавьте к адресу страницы СБП ?view=qr или ?view=banks — параметр переопределяет автоопределение устройства. Язык страницы определяется отдельно, по заголовку браузера — см. «Сценарий: банковская карта».
Отличия от сценария карты
JSON API v3
{
"customer": {
"type": "undefined_bank_card",
"source": "my_source",
"country": "RU",
"merchant_customer_id": "user_123"
},
"order": {
"merchant_order_id": "ORDER-001",
"price": { "amount": "99.00", "currency": "RUB", "vat_included": true }
}
}
// Ответ тот же; СБП открывается по authorization.url + "?useSbp=true"