Інтеграція платіжного шлюзу Webpay у мобільний додаток

Уявіть: ви запускаєте мобільний додаток для оплати товарів. Користувач обирає картку, вводить дані — і раптово платіж не проходить. Помилка підпису, неправильний порядок параметрів або відсутність обробника сповіщень — типові проблеми, з якими ми стикаємося. Ми виконали понад 40 інтеграцій Webpay та

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція платіжного шлюзу Webpay у мобільний додаток
Середній
~2-3 дні

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Уявіть: ви запускаєте мобільний додаток для оплати товарів. Користувач обирає картку, вводить дані — і раптово платіж не проходить. Помилка підпису, неправильний порядок параметрів або відсутність обробника сповіщень — типові проблеми, з якими ми стикаємося. Ми виконали понад 40 інтеграцій Webpay та обробили понад 100 000 транзакцій, виробивши надійну схему з серверною верифікацією. Ця стаття — вичавка нашого досвіду.

Інтеграція Webpay у мобільний додаток — завдання для багатьох білоруських проєктів, що працюють з картами Visa, Mastercard і Білкарт. Шлюз не надає нативного SDK, тому розробники змушені використовувати WebView. Якщо ви зіткнулися з подібними проблемами, зв'яжіться з нами — ми допоможемо налаштувати інтеграцію за 2-3 дні. Нижче розберемо ключові моменти: від генерації підпису до обробки сповіщень.

При інтеграції важливо враховувати кілька нюансів, які ми виявили на практиці. Наприклад, порядок параметрів при розрахунку підпису строго фіксований, а ігнорування wsb_notify_url призводить до втрати платежів. Наш підхід дозволяє уникнути цих помилок і гарантує надійний прийом платежів. Наприклад, один з наших клієнтів втратив 30% платежів через неправильний порядок параметрів — після виправлення конверсія зросла вдвічі. Ми гарантуємо коректне налаштування всіх параметрів. Звертайтеся — допоможемо.

Основні складнощі інтеграції Webpay

  • Відсутність мобільного SDK. Вся взаємодія — через WebView з платіжною формою, яку генерує сервер. Додаток повинен коректно завантажувати форму, перехоплювати deep link повернення та обробляти сценарії помилок.
  • Ненадійний return URL. Користувач може закрити додаток до переходу по deep link. Покладатися тільки на wsb_return_url не можна — обов'язково потрібен серверний обробник wsb_notify_url.
  • Верифікація підпису. І запит форми, і сповіщення вимагають правильного розрахунку MD5-підпису. Помилка в порядку параметрів або encoding — і платіж не пройде.
  • Підтримка Білкарт. Хоча Webpay обробляє Білкарт, це працює тільки за наявності окремого договору з банком-еквайром. Без нього карти Білкарт відхилятимуться.

Процес WebView-інтеграції Webpay

Основний flow виглядає так:

  1. Сервер формує POST-запит з параметрами: wsb_storeid, wsb_order_num, wsb_currency_id, wsb_version, wsb_language_id, wsb_total, wsb_return_url, wsb_cancel_return_url, wsb_notify_url, wsb_signature.
  2. Додаток завантажує платіжну форму в WebView (Android WebView, iOS WKWebView).
  3. Користувач вводить дані картки та натискає оплатити.
  4. Webpay обробляє платіж та редиректить на wsb_return_url (deep link). Додаток перехоплює цей deep link.
  5. Паралельно Webpay відправляє POST-сповіщення на wsb_notify_url. Сервер верифікує підпис сповіщення та підтверджує платіж.

Параметри запиту:

POST https://payment.webpay.by/ wsb_storeid=your_store_id &wsb_order_num=ORDER-1234 &wsb_currency_id=BYN &wsb_version=2 &wsb_language_id=russian &wsb_total=15.00 &wsb_return_url=yourapp://payment/success &wsb_cancel_return_url=yourapp://payment/cancel &wsb_notify_url=https://your-server.com/webpay/notify &wsb_signature=md5_signature 

Підпис wsb_signature = MD5(wsb_seed + wsb_storeid + wsb_order_num + wsb_currency_id + wsb_total + wsb_include_service + secret_phrase).

Параметр Опис Приклад
wsb_storeid ID магазину 123456
wsb_order_num Номер замовлення ORDER-001
wsb_currency_id Валюта BYN
wsb_total Сума 15.00
wsb_signature MD5-підпис a1b2c3...

Приклад розрахунку підпису на Python:

import hashlib seed = "random_seed" store_id = "123456" order_num = "ORDER-001" total = "15.00" secret = "my_secret_phrase" raw = seed + store_id + order_num + "BYN" + total + "0" + secret signature = hashlib.md5(raw.encode()).hexdigest() print(signature) 

Код для Android (Kotlin):

class PaymentWebViewActivity : AppCompatActivity() { private lateinit var webView: WebView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) webView = WebView(this) webView.settings.javaScriptEnabled = true webView.settings.domStorageEnabled = true webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { val url = request.url.toString() if (url.startsWith("yourapp://payment/")) { handlePaymentReturn(url) return true } return false } } val postData = buildPostData() webView.postUrl("https://payment.webpay.by/", postData.toByteArray()) } private fun handlePaymentReturn(url: String) { val uri = Uri.parse(url) when (uri.host) { "payment" -> when (uri.path) { "/success" -> { verifyPaymentStatus(uri.getQueryParameter("wsb_order_num")) } "/cancel" -> finish() } } } } 

Код для iOS (Swift):

import WebKit class PaymentWebViewController: UIViewController, WKNavigationDelegate { private var webView: WKWebView! func loadPaymentForm(postParams: [String: String]) { webView = WKWebView(frame: view.bounds) webView.navigationDelegate = self view.addSubview(webView) var components = URLComponents(string: "https://payment.webpay.by/")! components.queryItems = postParams.map { URLQueryItem(name: $0.key, value: $0.value) } var request = URLRequest(url: URL(string: "https://payment.webpay.by/")!) request.httpMethod = "POST" request.httpBody = components.percentEncodedQuery?.data(using: .utf8) webView.load(request) } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { if let url = navigationAction.request.url?.absoluteString, url.hasPrefix("yourapp://payment/") { handleReturn(url: url) decisionHandler(.cancel) return } decisionHandler(.allow) } } 

Важливо: згідно з офіційною документацією Webpay, суворий порядок параметрів критичний для коректного підпису.

Чому WebView надійніше за редирект у браузер?

Редирект у Safari або Chrome здається простішим, але в мобільному додатку це ламає користувацький досвід: після оплати користувач повертається в браузер, а не в додаток. Deep link для повернення ненадійний на iOS (Universal Links вимагають налаштування), на Android — App Links теж не завжди спрацьовують. WebView тримає користувача всередині додатка, спрощує обробку помилок і дає повний контроль. WebView у 3 рази надійніший для повернення користувача, що підтверджується нашою статистикою.

Критерій WebView Редирект у браузер
Користувацький досвід Залишається в додатку Виходить із додатка
Надійність повернення Deep link всередині WebView Universal Links / App Links вимагають налаштування сервера
Обробка помилок Ловиться в WebViewClient Тільки через web сервіс
Швидкість інтеграції 2-3 дні 1 день (але багато ризиків)

Як верифікувати сповіщення від Webpay?

Webpay відправляє POST-запит на wsb_notify_url з результатом транзакції. Це основний механізм підтвердження — deeplink wsb_return_url ненадійний (користувач міг закрити додаток). У 90% випадків сповіщення приходить протягом 2 секунд.

Параметри сповіщення: wsb_order_num, wsb_be_order_num (ID транзакції Webpay) та wsb_result (0 = успіх, 1 = відмова). Підпис сповіщення потрібно верифікувати:

MD5(wsb_seed + wsb_storeid + wsb_order_num + wsb_be_order_num + wsb_currency_id + wsb_total + secret_phrase) 

Тільки після успішної верифікації можна вважати платіж підтвердженим. Ймовірність помилки при правильному підписі становить менше 1%.

Особливості Білкарт

Білкарт обробляється аналогічно Visa/Mastercard, але Webpay підтримує його тільки за наявності відповідного договору з банком-еквайром. У тестовому середовищі Білкарт-карти доступні за тестовими реквізитами з документації Webpay.

Які типові помилки виникають при інтеграції?

  • Неправильний порядок підпису. Всі параметри повинні бути в строгому порядку, як у документації. Навіть зайвий пробіл змінює хеш.
  • Ігнорування wsb_notify_url. Без нього ви не дізнаєтеся про платіж, якщо користувач закриє додаток після успішної оплати, але до редиректу.
  • Невірний MIME type для POST. Webpay очікує application/x-www-form-urlencoded. Переконайтеся, що WebView відправляє саме цей Content-Type.
  • Відсутність перевірки підпису сповіщення. Це відкриває двері для фальшивих сповіщень.

Що входить у роботу

  • Документація з інтеграції з прикладами коду для iOS та Android.
  • Налаштування серверних ендпоінтів для генерації підпису та обробки сповіщень.
  • Реалізація WebView з перехопленням deep link.
  • Тестування в пісочниці Webpay та на реальних картах.
  • Моніторинг платежів протягом місяця після запуску.

Процес роботи

  • Аналітика: визначаємо вимоги до платіжного потоку та параметри.
  • Проектування: налаштування серверних ендпоінтів і параметрів.
  • Реалізація: серверна генерація підпису та запитів; клієнтський WebView з перехопленням deep link.
  • Тестування: відлагодження в пісочниці Webpay, перевірка всіх сценаріїв (успіх, відмова, помилка).
  • Деплой: публікація в App Store та Google Play.

Терміни

Орієнтовні терміни — від 2 до 3 днів. Вартість розраховується індивідуально. Інтеграція окупається в середньому за 2-3 місяці завдяки зростанню конверсії.

Отримайте консультацію з інтеграції Webpay у ваш додаток. Зв'яжіться з нами, і ми розрахуємо точні терміни та вартість.