Разработка мобильного приложения для криптоплатежного шлюза
Криптоплатёжный шлюз — это инфраструктурный продукт между мерчантом и блокчейном. Мерчант интегрирует шлюз в свой сайт или приложение через API, покупатель платит криптовалютой, шлюз подтверждает транзакцию и сигнализирует мерчанту об оплате. Мобильное приложение шлюза — это, как правило, два отдельных продукта: панель мерчанта (управление, аналитика, выводы) и SDK для покупателей (checkout flow).
Панель мерчанта: ключевые экраны
Мобильное приложение для мерчанта — упрощённый дашборд с ключевыми метриками:
- Входящие платежи в реальном времени
- Баланс в криптовалютах и его USD-эквивалент (через CoinGecko или собственный price feed)
- История транзакций с фильтрами (статус, валюта, сумма, дата)
- Настройки: список принимаемых монет, адреса для автовывода, вебхуки
- Вывод средств
Данные мерчанта — не из блокчейна напрямую, а из базы данных самого шлюза через REST API. Блокчейн мониторит серверная часть.
Мониторинг входящих транзакций
Серверная часть шлюза слушает блокчейн и обновляет статус платежей. Мобильное приложение получает обновления через 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: flow покупателя
Для покупателей (если шлюз предоставляет SDK) — мобильный checkout это:
- Показать экран с суммой в фиате и эквивалентом в крипте (живая котировка)
- Выбор криптовалюты из поддерживаемых
- 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 decimals
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 ?? "")"
}
}
Underpayment и Overpayment
Пользователь мог отправить меньше или больше требуемой суммы. Стратегии:
Underpayment: ожидать доплату в течение периода (обычно 24 часа), иначе — возврат или частичный зачёт.
Overpayment: автоматический возврат разницы или зачисление на баланс пользователя в системе мерчанта.
Логика на серверной стороне, но мобильный UI должен корректно отображать все эти статусы.
Поддержка нескольких сетей
Профессиональный шлюз принимает USDT на Ethereum, USDT на TRON, USDC на Polygon, BTC, SOL. Каждая сеть — свои особенности:
| Сеть | Время подтверждения | Комиссия | Стандарт |
|---|---|---|---|
| Ethereum | 15–30 сек (1 block) | $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 неделя |
| Real-time поток входящих платежей (SSE/WS) | 1 неделя |
| Checkout SDK: QR + таймер + статусы | 1 неделя |
| Поддержка 3+ сетей | 1 неделя |
| Настройки: монеты, вебхуки, вывод | 1 неделя |
| Push-уведомления | 3 дня |
Мобильное приложение шлюза (без серверной части): 5–8 недель. Серверная инфраструктура шлюза — отдельный проект, 2–3 месяца и более.







