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

Прием платежей через SberPay

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

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

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

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

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

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

  2. Дождитесь от Банка 131 вебхука ready_to_confirm — он означает, что Банк готов провести платеж и ждет вашего подтверждения.
  3. Подтвердите платеж запросом session/confirm или отмените платеж, отправив запрос session/cancel.

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

  4. Для канала оплаты channel = app или channel = mobile_web получите вебхук action_required для перенаправления плательщика в приложение Сбера по URL из параметра redirect.url.

    Для канала оплаты channel = web вебхук action_required не приходит, пункты 5 и 6 сценария можно пропустить.

  5. Для устройств на iOS перенаправьте плательщика по диплинку из параметра redirect.url в одно из приложений Сбера (СберБанк Онлайн или СБОЛ) для оплаты. Для выбора приложения используйте следующий алгоритм (см. пример кода):
    1. Открытие ссылки btripsexpenses://sbolpay/....
    2. Ожидание 50мс.
    3. Обновление страницы (этот шаг нужен для автоматического скрытия алерта с ошибкой, если ссылку не удалось открыть).
    4. Редирект на свою же страницу с обновленными параметрами запроса.
    5. Открытие ссылки ios-app-smartonline://sbolpay/....
    6. Ожидание 50мс.
    7. Обновление страницы (этот шаг нужен для автоматического скрытия алерта с ошибкой, если ссылку не удалось открыть).
    8. Редирект на свою же страницу с обновленными параметрами запроса.
    9. Открытие ссылки sberpay://....
    10. Ожидание 50мс.
    11. Обновление страницы (этот шаг нужен для автоматического скрытия алерта с ошибкой, если ссылку не удалось открыть).
    12. Редирект на свою же страницу с обновленными параметрами запроса.
    13. Открытие ссылки sbolpay://....
    14. Ожидание 50мс.
    15. Обновление страницы.
    16. Переход по ссылке на лендинг Сбер.
  6. Дождитесь, когда плательщик либо подтвердит, либо отменит оплату. Сбер отправляет плательщика в ваше приложение или на сайт по диплинку или URL, который был передан в параметре return_url.
  7. Дождитесь от Банка 131 вебхука payment_finished с результатом проведения платежа или периодически опрашивайте статус транзакции (не чаще чем 1 раз в 5 секунд).

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

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

Канал оплаты

В зависимости от канала обращения плательщика (мобильное приложение app, мобильный браузер mobile_web или десктопный браузер web), предусмотрены различные наборы параметров, которые необходимо передавать в запросах. Значение, определяющее канал оплаты, передаётся в запросах session/create или session/init/payment в параметре payment_details.internet_banking.sber_pay.channel.

app — оплата из мобильного приложения

  1. Параметр phone не является обязательным. При его наличии отправка PUSH-уведомления или СМС не происходит.
  2. Не рекомендуется использовать вызов sberpay/push - в этом случае успешная оплата не будет гарантирована.
  3. В вебхуке action_required передается значение параметра redirect.url, на которое нужно перенаправить плательщика.
  4. При отправке на значение в redirect.url необходимо организовать перебор диплинков - пример кода.
  5. Если получен параметр return_url, то на этот URL произойдет переход из приложения Сбера.
Пример запроса
curl -X
https://proxy.bank131.ru/api/v1/session/init/payment \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_details": {
"type": "internet_banking",
"internet_banking": {
"type": "sber_pay",
"sber_pay": {
"phone": "71234567890",
"channel": "app"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "app",
"customer": {
"reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
},
"payment_options": {
"return_url": "https://t.me/bank131"
}
}'
Пример ответа
{
"status": "ok",
"session": {
"id": "ps_12345",
"status": "in_progress",
"created_at": "2023-09-29T05:42:10.549869Z",
"updated_at": "2023-09-29T05:42:10.948457Z",
"acquiring_payments": [
{
"id": "pm_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": "app"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "order123",
"payment_options": {
"return_url": "https://t.me/bank131",
"recurrent": false
}
}
]
}
}

mobile_web — оплата из мобильного браузера

  1. Параметр phone не является обязательным. При его наличии отправка PUSH-уведомления или СМС не происходит.
  2. Для отправки PUSH-уведомления или СМС необходимо вызвать метод sberpay/push.
  3. В вебхуке action_required передается значение параметра redirect.url, на которое нужно перенаправить плательщика.
  4. При отправке на значение в redirect.url необходимо организовать перебор диплинков - пример кода.
  5. Если получен параметр return_url, то на этот URL произойдет переход из приложения Сбера.
Пример запроса
curl -X POST \
https://proxy.bank131.ru/api/v1/session/init/payment \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_details": {
"type": "internet_banking",
"internet_banking": {
"type": "sber_pay",
"sber_pay": {
"phone": "71234567890",
"channel": "mobile_web"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "mobile_web",
"customer": {
"reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
},
"payment_options": {
"return_url": "https://t.me/bank131"
}
}'
Пример ответа
{
"status": "ok",
"session": {
"id": "ps_12345",
"status": "in_progress",
"created_at": "2023-09-29T05:42:10.549869Z",
"updated_at": "2023-09-29T05:42:10.948457Z",
"acquiring_payments": [
{
"id": "pm_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": "mobile_web"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "order123",
"payment_options": {
"return_url": "https://t.me/bank131",
"recurrent": false
}
}
]
}
}

web — оплата из десктопного браузера

  1. Для оплаты через канал web при создании платежа параметр phone является обязательным, на него поступит PUSH-уведомление или СМС для оплаты. Без параметра phone платеж не будет создан.
  2. Вебхук action_required не присылается Банком.
  3. Параметр return_url игнорируется, возврат плательщика по полученному return_url не производится.
Пример запроса
curl -X POST \
https://proxy.bank131.ru/api/v1/session/init/payment' \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"payment_details": {
"type": "internet_banking",
"internet_banking": {
"type": "sber_pay",
"sber_pay": {
"phone": "71234567890",
"channel": "web"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "web",
"customer": {
"reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
},
"payment_options": {
"return_url": "https://131.ru"
}
}'
Пример ответа
{
"status": "ok",
"session": {
"id": "ps_12345",
"status": "in_progress",
"created_at": "2023-09-29T05:42:10.549869Z",
"updated_at": "2023-09-29T05:42:10.948457Z",
"acquiring_payments": [
{
"id": "pm_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"
}
}
},
"amount_details": {
"amount": 1000,
"currency": "RUB"
},
"metadata": "order123",
"payment_options": {
"return_url": "https://t.me/bank131",
"recurrent": false
}
}
]
}
}

Выбор приложения Сбер для устройств на iOS

Пример кода для применения логики выбора
const openBtripsexpenses = () => {
window.location.href =
"btripsexpenses://sbolpay/invoicing/v2?bankInvoiceId=1961101c8c524c7fa15a9f101e965c58&orderNumber=d76d899c-6ffb-7116-ae89-afc802a92bb01";
};

const openIosAppSmartonline = () => {
window.location.href =
"ios-app-smartonline://sbolpay/invoicing/v2?bankInvoiceId=1961101c8c524c7fa15a9f101e965c58&orderNumber=d76d899c-6ffb-7116-ae89-afc802a92bb0";
};

const openSberpay = () => {
window.location.href =
"sberpay://invoicing/v2?bankInvoiceId=1961101c8c524c7fa15a9f101e965c58&orderNumber=d76d899c-6ffb-7116-ae89-afc802a92bb0";
};

const openSbolpay = () => {
window.location.href =
"sbolpay://invoicing/v2?bankInvoiceId=1961101c8c524c7fa15a9f101e965c58&orderNumber=d76d899c-6ffb-7116-ae89-afc802a92bb0";
};

const openLandingpage = () => {
window.location.href =
"https://www.sberbank.ru/ru/person/payments/online_sberpay";
};

const clearMessage = () => {
window.location.href =
"./same_page.html";
};

if (platform == "android") {
setTimeout(openSberpay, 100);
clearMessage();
setTimeout(openLandingpage, 800);
} else if (platform == "iPhone") {
setTimeout(openIosAppSmartonline, 50);
clearMessage();
setTimeout(openBtripsexpenses, 50);
clearMessage();
setTimeout(openSberpay, 50);
clearMessage();
setTimeout(openSbolpay, 50);
clearMessage();
setTimeout(openLandingpage, 800);
}