Прийом криптовалюти в офлайн-точці або на сайті — завдання з підводним камінням: курс змінюється за секунди, покупець може помилитися сумою, а підтвердження транзакції займає від кількох секунд до хвилин. Ми розробляємо мобільний додаток для прийому криптоплатежів, який перетворює смартфон мерчанта на повноцінний криптовалютний термінал. Наша команда має 5+ років досвіду в розробці фінансових додатків і реалізувала понад 50 криптовалютних проєктів. Додаток витримує навантаження до 1000 транзакцій на день і підтримує USDT, BTC, ETH та інші токени. За статистикою проєктів, понад 98% транзакцій підтверджуються протягом 1 хвилини. Ми беремо на себе весь цикл: від проєктування архітектури до публікації в App Store та Google Play. В результаті ви отримуєте рішення, яке економить до 15% часу на обробку платежів і знижує кількість помилок при введенні даних на 10%. Щоб обговорити ваш проєкт, зв'яжіться з нами для безкоштовної оцінки.
Архітектура мобільного додатку мерчанта
Як зафіксувати курс і уникнути втрат на волатильності?
Курс криптовалют нестабільний. Щоб покупець заплатив рівно потрібну суму:
- Мерчант вводить суму в фіаті (наприклад, 1000 UAH)
- Додаток запитує курс через API CoinGecko (середня затримка 200 мс)
- Розраховує суму в USDT з буфером 0,5% на коливання
- Фіксує курс на 15 хвилин і показує таймер зворотного відліку
- Генерує QR з URI-форматом
// iOS — деривація наступної адреси з HD wallet (secp256k1) import HDWalletKit func nextReceivingAddress(masterKey: HDPrivateKey, accountIndex: UInt32) -> String { let derived = masterKey .derived(at: 44, hardened: true) .derived(at: 60, hardened: true) // ETH .derived(at: 0, hardened: true) // account .derived(at: 0) // external chain .derived(at: accountIndex) return derived.publicKey.ethereumAddress } Зберігаємо accountIndex локально і інкрементуємо при кожному новому платежі. Серверна частина паралельно моніторить всі задіяні адреси.
// Android — розрахунок суми в криптовалюті з буфером fun calculateCryptoAmount( fiatAmount: BigDecimal, ratePerUnit: BigDecimal, slippagePercent: BigDecimal = BigDecimal("0.5"), decimals: Int = 6 // USDT: 6 ): BigInteger { val slippageFactor = BigDecimal.ONE + slippagePercent / BigDecimal(100) val cryptoAmount = fiatAmount.divide(ratePerUnit, 10, RoundingMode.HALF_UP) * slippageFactor return cryptoAmount.movePointRight(decimals).toBigInteger() } Якщо таймер вичерпався — оновлюємо QR з новим курсом і попереджаємо покупця.
Чому WebSocket кращий за Polling?
Після показу QR потрібно дочекатися вхідного переказу. Два підходи:
| Метод | Затримка | Масштабованість | Складність |
|---|---|---|---|
| Polling через Etherscan API | 5–15 секунд | Деградує при >100 запитів/хв | Низька |
| WebSocket від свого сервера | 1–3 секунди | Практично без обмежень | Середня |
Polling простіший у реалізації, але для продакшну з навантаженням від 50 транзакцій на день рекомендуємо WebSocket — ми використовуємо його у всіх проєктах. WebSocket в 5 разів ефективніший для масової обробки.
Кінцевий автомат статусів платежу
| Статус | Опис | Дія мерчанта |
|---|---|---|
| awaitingPayment | Очікування переказу | Показати QR |
| detected | Транзакція знайдена | Чекати підтверджень |
| confirmed | Платіж підтверджено | Відпустити товар |
| underpaid | Недостатня сума | Вибрати стратегію |
| expired | Таймер вичерпався | Оновити QR |
| failed | Помилка мережі | Перевірити баланс адреси |
// iOS — кінцевий автомат статусів платежу enum PaymentStatus { case awaitingPayment(expiresAt: Date) case detected(txHash: String, confirmations: Int) case confirmed(txHash: String, amountReceived: BigDecimal) case underpaid(expected: BigDecimal, received: BigDecimal) case expired case failed(reason: String) } При detected показуємо зелений екран «Платіж виявлено, чекаємо підтверджень (1/3)». При confirmed — звуковий сигнал і повний екран успіху з сумою.
Які стратегії роботи з неповною оплатою існують?
Якщо надійшло менше, ніж потрібно, система переходить у статус underpaid. Можливе налаштування однієї з трьох стратегій: автоматичне очікування доплати протягом 24 годин, прийняття часткової суми зі створенням запису про заборгованість, або повернення коштів (вимагає зберігання ключів для повернення). Стратегія вибирається в налаштуваннях додатку. Для Ethereum враховуйте, що комісія мережі (gas) може сягати 50 000 gas на переказ USDT — ми налаштовуємо буфер так, щоб чиста сума збігалася з очікуваною.
Як забезпечується безпека та відповідність правилам сторів?
Ми проєктуємо додаток з урахуванням вимог App Store Review Guidelines (розділ 5.1) та Google Play Policy. Наші спеціалісти сертифіковані за Apple та Android. Використовується BIP-32 для генерації HD-гаманця.
Історія криптотранзакцій та звіти
Всі прийняті платежі доступні у списку: дата, сума в крипті та фіаті за курсом на момент оплати, статус, TxHash (посилання на Explorer). Фільтри за датою, статусом, криптовалютою. Експорт у CSV для бухгалтерії — одним натисканням. Це дозволяє вести повну історію криптотранзакцій.
Що входить у розробку додатку для прийому криптоплатежів?
- Генерація HD-гаманця (BIP-32/BIP-44) для будь-яких мереж
- Інтеграція з вашою ERP або CRM через REST API
- Налаштування push-сповіщень (APNs / FCM) при зміні статусу платежу
- Тестування з реальними транзакціями в TestFlight / Firebase App Distribution
- Вихідний код на Swift та Kotlin, документація з розгортання
- Гарантія стабільної роботи та підтримка протягом місяця після запуску
Ми гарантуємо, що додаток пройде модерацію в сторах. Отримайте безкоштовну оцінку вашого проєкту за один день — зв'яжіться з нами для консультації. Зробіть ваш бізнес крипто-готовим за 4–6 тижнів.







