Інтеграція платіжного шлюзу СберPay у мобільний додаток
Ми часто стикаємося з ситуацією, коли після інтеграції СберPay користувач підтверджує оплату в СберБанк Онлайн, але додаток не отримує callback — деплінк не спрацьовує, або додаток СберБанк не встановлено. Без fallback-механізму платіж зависає, а статус перевіряється лише через сервер. У цій статті — перевірені рішення для iOS та Android з деплінками, fallback та асинхронною перевіркою.
Пряма інтеграція через Сбербанк Еквайринг дає в 3 рази більше контролю над статусами платежів порівняно з агрегаторами, але вимагає ретельного налаштування. Через агрегатори СберPay підключається в 2 рази швидше, якщо SDK уже в проекті. Додатково, економія на комісіях при прямій інтеграції може сягати 30%, а частка успішних платежів — 98% при коректній обробці deeplink та fallback.
Який спосіб інтеграції обрати: агрегатор чи прямий еквайринг?
| Критерій | Через агрегатор (ЮKassa, CloudPayments) | Напряму через Сбербанк Еквайринг |
|---|---|---|
| Швидкість підключення | 1–2 дні (вже є SDK) | 3–5 днів (реєстрація мерчанта, тестове середовище) |
| Управління статусами | Частково на стороні агрегатора | Повний контроль через REST API |
| Вимоги до сервера | Мінімальні (токени) | Серверна реєстрація замовлень, перевірка статусів |
| Deeplink-обробка | Вбудована в SDK | Потрібно реалізовувати самостійно |
| Складність інтеграції | Низька | Середня (пряма робота з API) |
Через агрегатор. Якщо у вас уже є ЮKassa, CloudPayments або Robokassa — СберPay можна включити як додатковий paymentMethodType без окремої інтеграції. ЮKassa, наприклад, підтримує sberbank як тип методу оплати, і SDK сам відкриває диплінк у СберБанк Онлайн.
Через Сбербанк Еквайринг напряму. Потрібна окрема реєстрація мерчанта в Сбербанку, підключення до тестового середовища 3dsec.sberbank.ru та пряма робота з REST API.
Чому не можна покладатися тільки на deeplink-повернення?
Deeplink-повернення — ненадійне джерело істини. Користувач може закрити додаток до редиректу, скасувати платіж у самому СберБанк Онлайн, або станеться збій мережі в момент повернення. Тому ми завжди реалізуємо серверну перевірку статусу через getOrderStatusExtended з періодичним поллінгом (наприклад, кожні 5 секунд до 30 секунд). На основі отриманого статусу (0 — зареєстровано, 1 — оплачено, 2 — скасовано) оновлюємо UI додатку.
Що робити, якщо додаток СберБанк не встановлено?
При прямій інтеграції потрібно обов'язково реалізувати fallback. Якщо resolveActivity (Android) або canOpenURL (iOS) повертає false — відкриваємо formUrl у браузері. Браузерний flow веде на веб-версію СберPay, де користувач може авторизуватися через Сбер ID.
// Android — fallback через браузер val sberPayUri = Uri.parse(formUrl) val intent = Intent(Intent.ACTION_VIEW, sberPayUri) if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } else { openInBrowser(formUrl) // fallback } // iOS — fallback через SFSafariViewController if let url = URL(string: formUrl), UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url) } else { presentSafari(url: formUrl) } Як правильно обробити повернення з СберБанк Онлайн?
Після підтвердження платежу в СберБанк Онлайн система редиректить на returnUrl, який ви вказали при реєстрації замовлення. В iOS потрібен Universal Link або URL Scheme, в Android — Intent Filter з правильним scheme та host.
<!-- AndroidManifest.xml --> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="yourapp" android:host="payment" android:pathPrefix="/result" /> </intent-filter> Приклад обробки на Swift
func handlePaymentCallback(url: URL) { guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return } if let orderId = components.queryItems?.first(where: { $0.name == "orderId" })?.value { checkOrderStatus(orderId: orderId) } } Після повернення перевіряємо статус замовлення на сервері:
GET https://securepayments.sberbank.ru/payment/rest/getOrderStatusExtended.do ?orderId=uuid-order-id&userName=...&password=... | Параметр | Тип | Опис |
|---|---|---|
| orderId | string | UUID замовлення, повернений при реєстрації |
| userName | string | Логін мерчанта в системі Сбербанку |
| password | string | Пароль мерчанта |
Ключовий момент: не довіряйте тільки deeplink-поверненню. Статус платежу потрібно завжди перевіряти через серверний запит getOrderStatusExtended.
Типові помилки при інтеграції
- Відсутність fallback при відсутності СберБанк — користувач бачить чорний екран. Завжди перевіряємо
resolveActivity/canOpenURL. - Неправильне налаштування
returnUrl— схема має збігатися з зареєстрованою в маніфесті. - Пропуск серверної перевірки статусу — платіж може вважатися неуспішним, хоча гроші списано.
- Ігнорування вимог App Store Review Guidelines (Section 5.1) щодо обробки платежів.
Ми маємо 5+ років досвіду інтеграції платіжних шлюзів і гарантуємо коректну роботу деплінків та fallback-механізмів. Наші інженери сертифіковані за платформою Сбербанку. Зв'яжіться з нами для отримання консультації з технічних питань або замовте інтеграцію СберPay.
Процес роботи над інтеграцією
- Аналітика та вибір схеми — оцінка поточного платіжного стеку, підбір агрегатора або прямої інтеграції.
- Проектування — розробка послідовності запитів, схеми деплінків, fallback-сценаріїв.
- Реалізація — написання серверної частини (реєстрація замовлення, перевірка статусу) та клієнтської (відкриття деплінка, обробка повернення).
- Тестування — перевірка на тестовому контурі (
3dsec.sberbank.ru), емуляція помилок (відсутність СберБанк, збій мережі). - Деплой — публікація в App Store та Google Play з коректними схемами URL та Universal Links.
Строки орієнтовно
від 2 до 5 днів залежно від обраної схеми та готовності серверної частини. Вартість розраховується індивідуально — зв'яжіться з нами, оцінимо проект за один робочий день.
Що входить у роботу
- Підготовка технічної документації з описом флоу платежів та обробки помилок.
- Налаштування доступів до тестового та бойового контурів Сбербанку.
- Навчання вашої команди основам підтримки та діагностики.
- Гарантійна підтримка 30 днів після запуску.







