Перейти к основному содержимому

Оплата SberPay по QR-коду

Сценарий описывает прием платежа через SberPay по QR-коду. Для оплаты не требуется вводить данные карты.

Визуализация QR-кода и его передача плательщику производится на вашей стороне.

Имеется возможность проводить платежи с автоподтверждением платежа. При подключении уточните у менеджера, какая схема работы вам необходима.

Гайдлайны и SDK можно найти здесь.

На оплату методом SberPay после подтверждения платежа дается 20 минут. Если в течение 20 минут вы не передадите Банку подтверждение в методе confirm_request, оплата не будет произведена, и сессия автоматически завершится в статусе canceled.

Сценарий оплаты

  1. Вы создаете платежную сессию отдельно от платежа методом session/create или одновременно с платежом c помощью метода session/init/payment с набором необходимых параметров, в том числе с обязательным параметром channel = web_mobile и ссылкой для перехода плательщика в параметре return_url;

    Если вы создали сессию отдельно от платежа, отправьте запрос session/start/payment;

  2. Получаете от Банка 131 вебхук ready_to_confirm — он означает, что Банк готов провести платеж и ждет вашего подтверждения;
  3. Подтверждаете платеж запросом confirm_request или отмените платеж, отправив запрос cancel_request;

    Опционально: вы можете вызвать методы отправки дополнительных уведомлений, СМС или PUSH, используя метод sberpay/push. Выбор для отправки СМС или PUSH производится на стороне провайдера (Сбер).

  4. Получаете вебхук action_required с URL в параметре redirect.url, создаете QR-код из URL и передаете его плательщику;
  5. Ждете, когда плательщик либо подтвердит, либо отменит оплату. Сбер отправляет плательщика в ваше приложение или на сайт по диплинку или URL, который был передан в параметре return_url.
  6. Получаете от Банка 131 вебхук payment_finished с результатом проведения платежа или периодически опрашиваете статус транзакции (не чаще, чем 1 раз в 5 секунд);

    Если плательщик откажется от оплаты, то об этом станет известно только по истечении 20 минут — как только закончится срок жизни заказа на оплату методом SberPay.

  7. Сообщаете пользователю статус платежа.

Пример запроса на оплату через QR-код

curl --location 'https://proxy.bank131.ru/api/v1/session/init/payment' \
--header 'X-PARTNER-SIGN: key' \
--header 'X-PARTNER-PROJECT: your_project_name' \
--header 'Content-Type: application/json' \
--data '{
"payment_details": {
"type": "internet_banking",
"internet_banking": {
"type": "sber_pay",
"sber_pay": {
"phone": "71234567890",
"channel": "web_mobile"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "web_mobile",
"customer": {
"reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
},
"payment_options": {


"return_url": "https://t.me/bank131"
}
}'

Пример ответа на запрос на оплату через QR-код

{
"status": "ok",
"session": {
"id": "12345",
"status": "in_progress",
"created_at": "2023-09-29T05:42:10.549869Z",
"updated_at": "2023-09-29T05:42:10.948457Z",
"acquiring_payments": [
{
"id": "131",
"status": "in_progress",
"created_at": "2023-09-29T05:42:10.973559Z",
"customer": {
"reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
},
"payment_details": {
"type": "internet_banking",
"internet_banking": {
"type": "sber_pay",
"sber_pay": {
"phone": "71234567890",
"channel": "web_mobile"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"amounts": {
"gross": {
"amount": 1000,
"currency": "RUB"
}
},
"metadata": "order123",
"payment_options": {
"return_url": "https://t.me/bank131",
"recurrent": false
}
}
]
}
}