Користувачі з Білорусі часто відмовляються від оплати карткою через комісії або недовіру до введення реквізитів. За даними офіційної документації НКФО «ЄРІПС», система ЄРІП — це білоруська платіжна система, де платіж відбувається без передачі карткових даних. Користувач бачить рахунок у додатку, оплачує через будь-який банк і повертається. Але як вбудувати це в мобільний додаток на iOS або Android, не ламаючи UX? Ми інтегрували ЄРІП для 30+ проєктів і знаємо всі підводні камені.
ЄРІП не обробляє карткові реквізити — створюється рахунок, користувач оплачує його через інтернет-банк, мобільний банкінг, термінал або касу. Для додатка це означає, що сам платіж відбувається поза додатком. Багато білоруських користувачів звикли оплачувати послуги через ЄРІП, тому інтеграція дозволяє приймати платежі без комісій та з мінімальними вимогами до скорингу. Мобільні платежі в Білорусі через ЄРІП є стандартом.
Як працює ЄРІП у мобільному додатку?
Ваш додаток створює рахунок у ЄРІП через API, отримує номер рахунку (QR-код або числовий код), користувач оплачує у своєму банківському додатку. Система повідомляє ваш сервер про факт оплати через callback. Два варіанти підключення:
- Пряме підключення до ЄРІП через НКФО «ЄРІПС» — вимагає договору та сертифіката.
- Через агрегатора — Webpay, iPay, bePaid — вони приймають оплату через ЄРІП і надають простіший API.
| Критерій | Пряме підключення | Через агрегатора (bePaid) |
|---|---|---|
| Час інтеграції | 2-3 тижні | 3-5 днів |
| Складність | Висока (SOAP, XML-підпис) | Середня (REST API) |
| Контроль | Повний | Обмежений |
| Комісія | Мінімальна | Включена в тариф агрегатора |
Чому агрегатор кращий?
Агрегатор спрощує інтеграцію та зменшує час налаштування. Він у 3 рази швидше за пряме підключення і не вимагає сертифікатів.Які способи інтеграції ЄРІП існують?
Для більшості проєктів оптимальний агрегатор. Він скорочує час інтеграції в 3 рази порівняно з прямим підключенням і не вимагає сертифікатів. Розглянемо інтеграцію через bePaid.
Інтеграція через bePaid
bePaid — білоруський платіжний шлюз з підтримкою API ЄРІП. Найбільш зручний варіант для мобільних додатків.
Крок 1: Створення транзакції з ЄРІП (серверна частина)
POST https://checkout.bepaid.by/transactions/payment_token Authorization: Basic base64(shop_id:secret_key) Content-Type: application/json { "checkout": { "transaction_type": "payment", "order": { "amount": 1500, "currency": "BYN", "description": "Заказ №1234", "tracking_id": "ORDER-1234" }, "settings": { "success_url": "yourapp://payment/success", "decline_url": "yourapp://payment/decline", "fail_url": "yourapp://payment/fail", "notification_url": "https://your-server.com/bepaid/notify" }, "payment_method": { "types": ["erip"], "erip": { "service_no": 12345678, "account_number": "ORDER-1234", "service_info": ["Оплата заказа №1234"] } } } } Відповідь містить checkout_url — посилання на сторінку bePaid з QR-кодом ЄРІП.
Крок 2: Відображення QR-коду в мобільному додатку
Два варіанти:
- WebView з checkout_url (через SFSafariViewController або Chrome Custom Tabs)
- Нативний екран з генерацією QR (через ZXing на Android, CoreImage на iOS)
// Android: генерация QR через ZXing implementation("com.google.zxing:core:3.5.2") implementation("com.journeyapps:zxing-android-embedded:4.3.0") val qrData = "SYSTEM_ERIP|${serviceNo}|${accountNumber}|${amount}" val qrBitmap = QRCodeWriter().encode( qrData, BarcodeFormat.QR_CODE, 512, 512 ).let { bitMatrix -> val width = bitMatrix.width val height = bitMatrix.height Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565).apply { for (x in 0 until width) { for (y in 0 until height) { setPixel(x, y, if (bitMatrix[x, y]) Color.BLACK else Color.WHITE) } } } } imageView.setImageBitmap(qrBitmap) // iOS: CoreImage QR генерация import CoreImage func generateQRCode(from string: String) -> UIImage? { let filter = CIFilter.qrCodeGenerator() filter.message = Data(string.utf8) filter.correctionLevel = "M" guard let outputImage = filter.outputImage else { return nil } let scale = UIScreen.main.scale * 4 let transform = CGAffineTransform(scaleX: scale, y: scale) let scaledImage = outputImage.transformed(by: transform) return UIImage(ciImage: scaledImage) } let qrData = "SYSTEM_ERIP|\(serviceNo)|\(accountNumber)|\(amount)" qrImageView.image = generateQRCode(from: qrData) Крок 3: Отримання статусу оплати
ЄРІП — асинхронна система. Користувач може оплатити через 5 хвилин або через 2 години. Два підходи:
- Webhook (рекомендується) — агрегатор надсилає POST на ваш сервер при оплаті. Сервер надсилає Push-повідомлення користувачу.
- Polling — клієнт періодично запитує статус. Webhook кращий за Polling в 10 разів за надійністю та швидкістю.
| Підхід | Надійність | Швидкість | Навантаження на сервер |
|---|---|---|---|
| Webhook | 95-99% (при повторних спробах) | Секунди | Низька |
| Polling | ~80% (пропуск вікна) | До 5 хв | Висока |
// Android: polling через корутины private fun startPaymentPolling(orderId: String) { lifecycleScope.launch { repeat(60) { delay(5000L) val status = paymentRepository.checkStatus(orderId) if (status == PaymentStatus.PAID) { handleSuccess() return@launch } } } } Пряме підключення до ЄРІП для великих проєктів
При прямому підключенні використовується SOAP API ЄРІПС. Вимагає укладення договору з НКФО «ЄРІПС», отримання сертифікату та налаштування XML-підпису запитів. Технічно складніше, але дає більше контролю. Підходить для мерчантів з високим оборотом (наприклад, від $10 000 на місяць).
Типові проблеми та їх вирішення
- Webhook не дійшов — реалізуйте повторні спроби (3-5 разів з експоненціальною затримкою) та періодичну звірку статусів через API агрегатора. Це вирішує 95% випадків.
- QR не сканується банківським додатком — використовуйте строгий формат даних від НКФО «ЄРІПС»: префікс
SYSTEM_ERIP, роздільник|, обов'язкові поля. Довільний формат не спрацює. - Користувач оплатив, але не отримав push — перевірте підключення до FCM/APNs, а також callback від агрегатора — можливо, він прийшов, але не був оброблений.
Що входить у роботу
- Підключення до ЄРІП через агрегатора або напряму
- Серверний endpoint для створення ЄРІП-рахунку
- Нативний екран з QR-кодом або WebView з checkout сторінкою
- Webhook обробник для отримання статусу оплати
- Push-повідомлення користувачу після успішної оплати
- Документація та рекомендації з тестування
Терміни та вартість
Інтеграція через агрегатора з нативним QR-екраном займає 3–5 днів. Вартість інтеграції через агрегатора починається від $500, пряме підключення — від $2000. Вартість розраховується індивідуально після аналізу вимог та вибору агрегатора. Ми гарантуємо якість інтеграції та надаємо сертифікат відповідності після завершення робіт. Наша компанія має 5+ років досвіду та понад 30 успішних проєктів з інтеграції ЄРІП. Замовте інтеграцію — отримайте консультацію та оцінку термінів.







