Розроблення мобільних додатків для крипто-платіжних шлюзів
Крипто-платіжний шлюз — це інфраструктура між мерчантом та блокчейном. Мерчант інтегрує шлюз через API; покупатель платить крипто; шлюз підтверджує та сигналізує мерчанту про оплату. Мобільний додаток шлюза зазвичай складається з двох окремих продуктів: панель мерчанта (управління, аналітика, виводи) та SDK для покупців (checkout flow).
Панель мерчанта: ключові екрани
Мобільний додаток для мерчанта — спрощений дашборд з ключовими метриками:
- Вхідні платежі у реальному часі
- Баланс у крипто та USD еквіваленті (через CoinGecko або власний price feed)
- Історія транзакцій з фільтрами (статус, валюта, сума, дата)
- Налаштування: прийняті монети, адреси для автовиводу, вебхуки
- Вивід коштів
Дані мерчанта — не з блокчейну безпосередньо, а з бази даних шлюзу через REST API. Backend мониторить блокчейн.
Мониторинг вхідних транзакцій
Backend шлюзу слухає блокчейн та оновлює статуси платежів. Мобільний додаток отримує оновлення через WebSocket або Server-Sent Events.
// Android — SSE потік платежів мерчанта
fun observeMerchantPayments(merchantId: String): Flow<PaymentEvent> = callbackFlow {
val client = OkHttpClient()
val request = Request.Builder()
.url("$baseUrl/merchants/$merchantId/events")
.addHeader("Authorization", "Bearer $token")
.build()
val sse = client.newCall(request).execute()
val reader = sse.body!!.source()
while (!reader.exhausted()) {
val line = reader.readUtf8Line() ?: break
if (line.startsWith("data: ")) {
val event = json.decodeFromString<PaymentEvent>(line.removePrefix("data: "))
trySend(event)
}
}
awaitClose { sse.cancel() }
}
На подію PAYMENT_CONFIRMED — push-уведомлення мерчанту: «Платіж отримано: 150 USDT від 0x...».
Checkout SDK: потік покупателя
Для покупців (якщо шлюз надає SDK) — мобільний checkout це:
- Показати екран з сумою у фіаті та крипто еквівалентом (live котировка)
- Вибір крипто з підтримуваних
- QR-код з адресою платежу та сумою (URI формат для конкретної мережі)
- Таймер: курс зафіксований на N хвилин
- Очікування підтвердження транзакції
- Екран успіху / помилки / таймаут
// iOS — генерація платіжного URI для checkout
func buildPaymentUri(network: PaymentNetwork, address: String, amount: Decimal, tokenContract: String?) -> String {
switch network {
case .ethereum:
if let contract = tokenContract {
// ERC-20 (USDC/USDT)
let rawAmount = (amount * pow(10, 6)).description // USDC 6 decimалів
return "ethereum:\(contract)@1/transfer?address=\(address)&uint256=\(rawAmount)"
}
return "ethereum:\(address)?value=\((amount * 1e18).description)"
case .bitcoin:
return "bitcoin:\(address)?amount=\(amount)"
case .tron:
return "tron:\(address)?amount=\(amount)&token=\(tokenContract ?? "")"
}
}
Недоплата та переплата
Користувач мав відправити менше або більше, ніж потрібно. Стратегії:
Недоплата: чекати додаткову оплату в період (зазвичай 24 години), інакше повернення або часткова залік.
Переплата: автоматичне повернення різниці або залік на рахунок користувача в системі мерчанта.
Логіка на серверній стороні, але мобільний UI має коректно відображати всі статуси.
Підтримка кількох мереж
Професійний шлюз приймає USDT на Ethereum, USDT на TRON, USDC на Polygon, BTC, SOL. Кожна мережа має свої особливості:
| Мережа | Підтвердження | Комісія | Стандарт |
|---|---|---|---|
| Ethereum | 15–30 сек (1 блок) | $0.5–5 | ERC-20 |
| Tron | 3 сек | $0–1 | TRC-20 |
| Polygon | 2 сек | $0.001–0.01 | ERC-20 |
| BSC | 3 сек | $0.1–0.5 | BEP-20 |
| Bitcoin | 10–60 хв | $1–10 | Native |
Мерчант вибирає підтримувані мережі в налаштуваннях. Покупатель бачить оптимальну (швидкість/комісія) або все доступне.
Автоматичний sweep
Вхідні кошти мають консолідуватись з адрес-депозиторів на гарячий гаманець. Sweep-агент запускається періодично або за триггером. В мобільному додатку мерчанта — лише статус: «Автосбір налаштований, кошти переводяться на master wallet через X хвилин».
Часова шкала розроблення
| Компонент | Часова шкала |
|---|---|
| Дашборд мерчанта: баланс, історія | 1 тиждень |
| Реально-часовий потік платежів (SSE/WS) | 1 тиждень |
| Checkout SDK: QR + таймер + статуси | 1 тиждень |
| Підтримка 3+ мереж | 1 тиждень |
| Налаштування: монети, вебхуки, вивід | 1 тиждень |
| Push-уведомлення | 3 дні |
Мобільний додаток шлюзу (без backend): 5–8 тижнів. Серверна інфраструктура шлюзу — окремий проект, 2–3 місяці та більше.







