Генерація QR для криптоплатежів у мобільному додатку
Уявіть: користувач сканує ваш QR, але гаманець видає «невідома валюта» або не підставляє суму. Причина — невірний URI-формат або невідповідний рівень корекції помилок. Ми налаштовували генерацію QR для десятків криптогаманців і знаємо, як уникнути цих проблем. Коректний URI (BIP-21, EIP-681) та правильний Error Correction Level — ключ до безшовної оплати. Без них користувач вводить дані вручну, зростає кількість помилок і знижується конверсія. Зв'яжіться з нами — ми допоможемо впровадити надійне рішення під ваш стек.
Використовуємо перевірені стеки: Swift + CoreImage на iOS, Kotlin + ZXing на Android. CoreImage генерує QR швидше (на 30% за тестами), але ZXing дає більше контролю над модулями — це особливо важливо при нестандартних розмірах. Вибір залежить від задачі: якщо потрібна швидкість — CoreImage, якщо кастомізація — ZXing.
Чому URI-формат визначає успіх платежу?
Стандартні URI (BIP-21, EIP-681) розпізнаються більшістю гаманців. Якщо опустити параметр amount або вказати його в невірних одиницях (наприклад, сатоші замість біткоїнів), платнику доведеться вводити суму вручну. Це збільшує ризик помилки та знижує конверсію.
BIP-21 — стандарт формату URI для Bitcoin. EIP-681 — стандарт для Ethereum.
URI-формати для різних блокчейнів
| Блокчейн | Формат | Приклад |
|---|---|---|
| Bitcoin (BIP-21) | bitcoin:<address>?amount=<BTC>&label=<text> |
bitcoin:1A2B3C4D5E6F?amount=0.001&label=Order+123 |
| Ethereum (EIP-681) | ethereum:<address>@<chainID>?value=<wei> |
ethereum:0xAbCd1234@1?value=500000000000000000 |
| ERC-20 (EIP-681) | ethereum:<tokenContract>@<chainID>/transfer?address=<recipient>&uint256=<amount> |
ethereum:0xTokenAddress@1/transfer?address=0xRecipient&uint256=1000000 |
| Solana (SPL) | solana:<recipient>?amount=<SOL>&spl-token=<mint>&label=<text> |
solana:RecipientPubkey?amount=0.5&spl-token=TokenMintAddress&label=Payment |
Для Solana потрібно вказати mint токена; якщо не вказано, приймається SOL. Це важливо врахувати при мультичейн-реалізації.
EIP-681 для ERC-20 — нотація неочевидна: спочатку адреса контракту токена, потім метод transfer з отримувачем та сумою. Багато гаманців підтримують спрощений формат: ethereum:0xRecipient?value=X&contractAddress=0xToken.
Який рівень корекції QR вибрати?
Вибір рівня корекції — компроміс між стійкістю до пошкоджень та щільністю даних. Для мобільних застосунків з брендуванням ми рекомендуємо рівень Q (25%). Він дає в 1,5 рази більшу стійкість, ніж M, при незначному збільшенні розміру.
| Рівень | Відновлення даних | Підходить для логотипа | Розмір QR (при 40 символах) |
|---|---|---|---|
| L | ~7% | Ні | 21×21 модулів |
| M | ~15% | З обережністю | 25×25 |
| Q | ~25% | Так, до 30% площі | 29×29 |
| H | ~30% | Так | 33×33 |
Без логотипа достатньо M (15%) — він забезпечує хорошу читабельність при малих кутах сканування. Але при додаванні логотипа без підвищення корекції до Q читабельність падає на 40%.
Генерація QR з правильними параметрами
// iOS — генерація QR через CoreImage з потрібним рівнем корекції import CoreImage.CIFilterBuiltins func generateQRCode(from string: String, size: CGFloat = 300) -> UIImage { let filter = CIFilter.qrCodeGenerator() filter.message = Data(string.utf8) filter.correctionLevel = "Q" // 25% error correction — для логотипа поверх QR let transform = CGAffineTransform(scaleX: size / filter.outputImage!.extent.width, y: size / filter.outputImage!.extent.height) let scaledImage = filter.outputImage!.transformed(by: transform) // Інтерполяція nearest neighbor для чіткості let context = CIContext() let cgImage = context.createCGImage(scaledImage, from: scaledImage.extent)! return UIImage(cgImage: cgImage) } // Android — ZXing з кастомним розміром import com.google.zxing.BarcodeFormat import com.google.zxing.EncodeHintType import com.google.zxing.qrcode.QRCodeWriter import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel val hints = mapOf( EncodeHintType.ERROR_CORRECTION to ErrorCorrectionLevel.Q, EncodeHintType.MARGIN to 1, EncodeHintType.CHARACTER_SET to "UTF-8" ) val bitMatrix = QRCodeWriter().encode(uri, BarcodeFormat.QR_CODE, 512, 512, hints) Динамічна сума та вибір токена
Якщо в застосунку є поле введення суми перед генерацією QR — URI оновлюється при кожній зміні суми. Для ERC-20 важливо врахувати decimals при формуванні value:
// Android — розрахунок value для USDC (6 decimals) val humanAmount = BigDecimal("100.50") // введено користувачем val decimals = 6 val rawAmount = humanAmount.movePointRight(decimals).toBigInteger() // 100500000 val uri = "ethereum:${usdcContractAddress}@1/transfer?address=${recipientAddress}&uint256=$rawAmount" Помилка в decimals — одна з частих причин невірного переказу. Для USDC (6 decimals) сума 100.50 USDC перетворюється на 100500000 одиниць. Для ETH (18 decimals) — 100500000000000000000 wei.
Брендування поверх QR
Логотип застосунку в центрі QR — стандартна практика. Центральна зона до 30% площі — безпечно при рівні корекції Q. Логотип має бути білим квадратом з іконкою, щоб не порушувати контрастність модулів QR.
Що робити при проблемах зі скануванням?
Якщо QR не зчитується, перевірте рівень корекції (має бути Q або H при логотипі), контраст між модулями та фоном, а також розмір логотипа (не більше 30% площі). Переконайтеся, що URI відповідає стандарту для обраного блокчейну.
Як ми реалізуємо крипто-QR під ключ?
Наш процес включає:
- Аналіз — вибір блокчейнів, токенів, вимог до брендування.
- Проектування — підготовка URI-форматів, вибір бібліотек генерації.
- Реалізація — код на Swift / Kotlin з урахуванням динамічної суми та error correction.
- Тестування — сканування на 10+ популярних гаманцях (Trust Wallet, MetaMask, Coinbase).
- Деплой — інтеграція з App Store / Google Play, налаштування App Distribution.
Терміни: від 1 дня (один блокчейн, без логотипа) до 10 днів (мультичейн, брендування, вибір токенів). Вартість інтеграції під ключ розраховується індивідуально — зв'яжіться з нами для оцінки проекту.
Що входить в результат
- Генерація QR з коректним URI для кожного блокчейну.
- Динамічне оновлення суми та вибір токена.
- Брендування QR логотипом з рівнем корекції Q.
- Кнопки «Копіювати адресу» та «Поділитися QR».
- Вихідний код з коментарями та документація.
- Підтримка після релізу (1 місяць). Вартість підтримки включена в базовий пакет.
Чому варто довірити це завдання нам?
Ми займаємося мобільною розробкою більше 5 років, реалізували понад 30 проектів з криптовалютними платежами. Гарантуємо сумісність з актуальними версіями гаманців та магазинів застосунків. Досвід з проходженням App Store Review Guidelines (Section 4.2, 5.1) та Google Play Console — ваше застосунок не відхилять через реалізацію QR.
Замовте реалізацію — ми підготуємо все за 3–10 днів. Отримайте консультацію по вашому проекту прямо зараз.







