Интеграция платежного шлюза Webpay в мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция платежного шлюза Webpay в мобильное приложение
Средний
~2-3 дня
Часто задаваемые вопросы

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

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция платежного шлюза Webpay в мобильное приложение

Webpay — белорусский платёжный шлюз, один из основных для приёма платежей на рынке Беларуси. Работает с белорусскими рублями, поддерживает карты Visa, Mastercard, Белкарт и ЕРИП. Нативного мобильного SDK нет — интеграция реализуется через WebView с платёжной формой или через серверный API с токенизацией.

Основной flow: WebView с платёжной формой

Наиболее распространённый подход. Сервер формирует POST-запрос к Webpay, получает URL платёжной формы, клиент открывает его в WebView.

Параметры запроса:

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).

// Android: открываем WebView
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()
                // Перехватываем deeplink возврата
                if (url.startsWith("yourapp://payment/")) {
                    handlePaymentReturn(url)
                    return true
                }
                return false
            }
        }

        // POST-форма через data URI
        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: WKWebView
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)
    }
}

Уведомление о результате: wsb_notify_url

Webpay отправляет POST-запрос на wsb_notify_url с результатом транзакции. Это основной механизм подтверждения — deeplink wsb_return_url ненадёжен (пользователь мог закрыть приложение).

Параметры уведомления включают 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)

Белкарт: особенности

Белкарт обрабатывается аналогично Visa/Mastercard, но Webpay поддерживает его только при наличии соответствующего договора с банком-эквайером. В тестовой среде Белкарт-карты доступны по тестовым реквизитам из документации Webpay.

Что входит в работу

  • Серверная генерация параметров и подписи для Webpay
  • Реализация WebView с перехватом deeplink-возврата
  • Серверный обработчик wsb_notify_url с верификацией подписи
  • Тестирование в тестовой среде Webpay
  • Обработка ошибок и timeout сценариев

Сроки

2–3 дня. Стоимость рассчитывается индивидуально.