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

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

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

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

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

Сценарий оплаты зависит от канала платежа клиента: мобильное приложение (app), мобильный браузер (mobile_web) или десктопный браузер (web).

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

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

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

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

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

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

  7. Сообщите пользователю статус платежа.
Пример запроса
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": "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
}
}]
}
}

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

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

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

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

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

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

const openAppSmart = () => {
window.location.href = "ios-app-smartonline://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(openOnlineiosApp, 50);
clearMessage();
setTimeout(openStartOnline, 50);
clearMessage();
setTimeout(openAppOnline, 50);
clearMessage();
setTimeout(openBuget, 50);
clearMessage();
setTimeout(openBtripExp, 50);
clearMessage()
setTimeout(openAppSmart, 50);
clearMessage();
setTimeout(openLandingpage, 800);
}

Рекуррентные платежи

Рекуррентные платежи CIT через SberPay не поддерживаются.

Чтобы проводить рекуррентные платежи MIT через SberPay:

  1. Получите рекуррентный токен, передав в запросе recurrent=true (в объекте payment_options). Если платеж пройдет успешно, в вебхуке payment_finished в параметре recurrent.token вернется токен.

    Пример запроса
    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": "app"
    }
    }
    },
    "amount_details": {
    "amount": 1000,
    "currency": "RUB"
    },
    "metadata": "app",
    "customer": {
    "reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
    },
    "payment_options": {
    "return_url": "https://t.me/bank131",
    "recurrent": "true"
    }
    }'
  2. При проведении последующих платежей передавайте рекуррентный токен.

    Пример запроса
    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": "recurrent",
    "recurrent": {
    "token": "e9876f32bcd947f79c324cf2da5726304a894f6ae2037de7705fdb3e0a134d39"
    }
    },
    "amount_details": {
    "amount": 1000,
    "currency": "RUB"
    },
    "metadata": "app",
    "customer": {
    "reference": "user-ebf7-4815-af0a-b1f77e6de7e7"
    }
    }'