Почему без встроенного on-ramp падает конверсия?
Представьте: пользователь хочет купить ETH за евро прямо в вашем мобильном кошельке. Если нет встроенного on-ramp, он уходит на стороннюю биржу, и конверсия падает на 40%. Mercuryo — европейский провайдер с лицензией FCA, поддерживающий более 100 стран. Комиссия: 2.95–3.95% для карт, 1.5% для SEPA. Мы интегрируем Mercuryo в ваше приложение: виджет за 2–3 дня или кастомный API. По статистике, встроенный on-ramp повышает удержание на 25% и увеличивает доход с каждой покупки на 30%.
Как выбрать режим интеграции: виджет или API?
Виджет — WebView или браузер. Быстрая интеграция, Mercuryo управляет KYC и платёжной страницей. Подходит для MVP и типовых кошельков. API — полный контроль UI, требует business verification у Mercuryo и технического согласования. Используется, когда нужна уникальная платёжная форма. Большинство кошельков выбирают виджет — он покрывает 90% сценариев.
| Критерий | Widget | API |
|---|---|---|
| Скорость интеграции | 1–2 дня | 2–4 недели |
| Контроль UI | Минимальный (цвета, язык) | Полный кастом |
| KYC/AML | Со стороны Mercuryo | Можно встроить свою систему |
| Требования к серверу | Подпись HMAC + Webhook | Подпись, обмен токенами, обработка ордеров |
| Рекомендация | MVP, кошельки общего назначения | Биржи, white-label решения |
Как сгенерировать подпись для виджета Mercuryo?
Mercuryo требует HMAC-SHA512 подпись от строки {walletAddress}{secret}:
// Серверная сторона: подпись адреса import CryptoKit let input = "\(walletAddress)\(mercuryoSecret)" let key = SymmetricKey(data: Data(mercuryoSecret.utf8)) let mac = HMAC<SHA512>.authenticationCode(for: Data(input.utf8), using: key) let signature = Data(mac).map { String(format: "%02x", $0) }.joined() Без корректной подписи виджет открывается с ошибкой. Подпись вычисляется на сервере, передаётся в приложение как часть URL.
Что делать, если подпись невалидна?
Проверьте: совпадает ли секрет на сервере и в панели Mercuryo, правильный ли адрес кошелька передан, не содержит ли строка лишних символов. Ошибка подписи — самая частая проблема при первом запуске виджета.
Открытие виджета
// Android — Chrome Custom Tabs с Mercuryo виджетом val params = buildString { append("widget_id=${mercuryoWidgetId}") append("&type=buy") append("¤cy=ETH") append("&network=ETHEREUM") append("&address=${userWalletAddress}") append("&signature=${serverGeneratedSignature}") append("&fiat_currency=EUR") append("&redirect_url=${URLEncoder.encode("myapp://mercuryo-complete", "UTF-8")}") append("&theme=dark") append("&lang=ru") } val widgetUrl = "https://exchange.mercuryo.io/?$params" CustomTabsIntent.Builder() .setColorScheme(CustomTabsIntent.COLOR_SCHEME_DARK) .build() .launchUrl(context, Uri.parse(widgetUrl)) Параметр network критически важен
Mercuryo различает сеть и токен отдельно. currency=USDC&network=ETHEREUM — USDC на Ethereum. currency=USDC&network=POLYGON — USDC на Polygon. Неправильная сеть — пользователь получит крипту на другой адрес (если адреса совпадают по формату) или транзакция упадёт. Список поддерживаемых пар: GET https://api.mercuryo.io/v1.6/public/currencies-buy — актуальный справочник.
Таблица популярных сетей
| Токен | Сеть | Chain ID | Статус |
|---|---|---|---|
| ETH | Ethereum | 1 | Active |
| USDC | Ethereum | 1 | Active |
| USDC | Polygon | 137 | Active |
| BNB | BSC | 56 | Active |
| AVAX | Avalanche C | 43114 | Active |
Callback и верификация
После завершения покупки Mercuryo редиректит на redirect_url с параметрами status (succeeded, failed, pending) и transaction_id. Webhook на бэкенде — надёжнее deeplink. Рекомендуем настроить endpoint, который принимает POST-запросы с JSON-телом, содержащим статус и подпись верификации. Для гарантированной доставки реализуйте механизм повторных попыток и идемпотентность.
Безопасность и Compliance
При интеграции on-ramp важно соблюдать требования App Store Review Guidelines. Для iOS используйте Universal Links для redirect_url, чтобы после покупки пользователь возвращался в приложение. На Android — App Links. Также позаботьтесь о корректной настройке App Transport Security (ATS) для iOS. Если приложение собирает данные для трекинга, обязательно запросите разрешение ATT (App Tracking Transparency) перед открытием виджета. Mercuryo имеет собственные процедуры KYC/AML, но ваше приложение должно корректно обрабатывать статусы верификации.
Процесс работы
- Аналитика — изучаем требования, выбираем режим интеграции.
- Проектирование — определяем архитектуру: серверная подпись, обработка callback.
- Реализация — подключаем виджет или API, настраиваем параметры.
- Тестирование — проверяем все сценарии: успешная покупка, ошибки, callback, а также тестируем через TestFlight для iOS.
- Деплой — публикуем в App Store / Google Play, настраиваем мониторинг.
Что входит в работу
- Документация по интеграции и схема подписи.
- Реализация серверного эндпоинта для генерации signature.
- Настройка виджета или API с учётом дизайна приложения.
- Обработка deeplink и webhook для получения статусов.
- Тестовый аккаунт Mercuryo и консультации по KYC.
- Поддержка 2 недели после запуска.
Оценка и сроки
Сроки: от 2 до 14 дней в зависимости от режима интеграции (виджет — 2–3 дня, API — до 2 недель). Стоимость рассчитывается индивидуально. Получите консультацию по интеграции Mercuryo — мы оценим ваш проект и предложим оптимальное решение. Свяжитесь с нами, чтобы ускорить вывод продукта на рынок.
Опыт: 5+ лет интеграции финтех-решений, 50+ проектов с on-ramp провайдерами. Источник: документация Mercuryo Widget SDK (mercuryo.io).







