Интеграция MoonPay: покупка криптовалюты картой в dApp и кошельке
Представьте: вы запускаете dApp, пользователи готовы платить, но не могут купить ETH картой. Свой on-ramp требует лицензий, KYC, банковских партнёрств — уходит 6–12 месяцев и десятки тысяч долларов. MoonPay решает это за дни: 150+ фиатных валют, 100+ криптовалют, покрытие 160+ стран. MoonPay official documentation Мы интегрируем MoonPay в ваш проект, чтобы покупка криптовалюты картой стала штатной функцией. Экономия на разработке — до 90% затрат по сравнению с самописным решением.
Проблемы, которые решает интеграция MoonPay
Необходимость собственной платёжной инфраструктуры
Построение фиатного шлюза с нуля — получение лицензий (MSB, EMI), интеграция с банками-эквайерами, настройка KYC/AML. Это требует 6+ месяцев работы команды compliance-специалистов и разработчиков. MoonPay берёт на себя всё регулирование: вы просто отправляете запрос с адресом кошелька и суммой.
Риски безопасности при передаче средств
Каждая транзакция должна быть защищена от подмены и повторной отправки. MoonPay использует подписанные URL (HMAC-SHA256) и верификацию webhook-уведомлений. Без этого любой человек может изменить параметры транзакции, подставив свой кошелёк. Ваша задача — правильно реализовать проверку подписи на сервере.
Неконтролируемые комиссии и задержки
Собственный on-ramp часто теряет прибыль из-за высокой стоимости банковских переводов и конвертации. MoonPay предоставляет готовую модель: комиссия за карты — 3.99%, за переводы — 1.99%. Для партнёров с объёмом от $1M/месяц возможен revenue share. В результате вы получаете стабильный доход без скрытых расходов.
Как работает интеграция MoonPay?
MoonPay — white-label on-ramp провайдер, который берёт на себя платёжную инфраструктуру. Вы получаете виджет или API, пользователь покупает крипту картой или переводом, а средства приходят на ваш смарт-контракт или кошелёк. Всё это — за часы, а не месяцы. Интеграция MoonPay под ключ включает настройку подписанных URL и вебхуков для полной автоматизации.
| Способ | Сложность | Скорость | Кастомизация |
|---|---|---|---|
| Widget | Низкая | 1–3 дня | Минимальная |
| SDK (React Native/iOS/Android) | Средняя | 3–7 дней | Средняя |
| API | Высокая | 1–2 недели | Полная |
Почему MoonPay, а не самописный шлюз?
MoonPay — проверенный провайдер с опытом работы в крупных проектах (OpenSea, MetaMask, Trust Wallet) и Uptime 99.9%. Мы имеем опыт интеграции MoonPay в 20+ проектах, включая DeFi-платформы и NFT-маркетплейсы. По сравнению с самостоятельным шлюзом, MoonPay сокращает время внедрения в 10 раз и избавляет от регуляторной головной боли. Экономия на разработке — до 90% затрат.
Как мы это делаем?
Подключаем виджет или SDK, настраиваем подписанные URL и webhook. Пример React-компонента:
import { MoonPayProvider, MoonPayBuyWidget } from '@moonpay/moonpay-react'; function CryptoPurchaseModal({ walletAddress, currency = 'eth' }) { return ( <MoonPayProvider apiKey={process.env.MOONPAY_API_KEY} debug={process.env.NODE_ENV === 'development'} > <MoonPayBuyWidget variant="overlay" baseCurrencyCode="usd" baseCurrencyAmount="100" defaultCurrencyCode={currency} walletAddress={walletAddress} onLogin={() => console.log('user logged in')} onTransactionCompleted={(txData) => { // txData.status: "completed" | "failed" | "pending" handleTransactionComplete(txData); }} visible={true} /> </MoonPayProvider> ); } Подписанные URL для безопасности
MoonPay требует подписи URL для предотвращения подмены параметров (адреса кошелька, суммы). Генерация подписи на Python:
import hmac import hashlib import urllib.parse import base64 def sign_moonpay_url(base_url: str, secret_key: str) -> str: """Подписывает URL для MoonPay widget""" parsed = urllib.parse.urlparse(base_url) query = parsed.query signature = hmac.new( secret_key.encode(), query.encode(), hashlib.sha256 ).digest() sig_b64 = base64.urlsafe_b64encode(signature).decode().rstrip('=') separator = '&' if query else '?' return f"{base_url}{separator}signature={sig_b64}" # Использование url = f"https://buy.moonpay.com?apiKey={API_KEY}¤cyCode=eth&walletAddress={wallet}" signed_url = sign_moonpay_url(url, MOONPAY_SECRET_KEY) Webhooks
MoonPay отправляет webhook-уведомления при изменении статуса транзакции. Верификация подписи обязательна:
from fastapi import FastAPI, Request, HTTPException import hmac, hashlib @app.post("/webhooks/moonpay") async def moonpay_webhook(request: Request): signature = request.headers.get("MoonPay-Signature-V2") body = await request.body() expected = hmac.new( MOONPAY_WEBHOOK_SECRET.encode(), body, hashlib.sha256 ).hexdigest() if not hmac.compare_digest(f"sha256={expected}", signature): raise HTTPException(403, "Invalid signature") event = await request.json() if event["type"] == "transaction_updated": tx = event["data"] await process_transaction_update( external_id=tx["externalTransactionId"], status=tx["status"], crypto_amount=tx.get("cryptoTransactionId") ) return {"received": True} Пример полного цикла транзакции
Пользователь вводит сумму в USD, MoonPay показывает финальную стоимость с учётом комиссии. После оплаты картой MoonPay отправляет webhook со статусом `awaiting_execution`, затем `completed`. Ваш сервер должен обновить баланс кошелька только после получения финального статуса.Типичные ошибки при интеграции MoonPay
- Хранение
secretKeyиwebhookSecretв открытом виде в клиентском коде. Используйте серверные переменные окружения. - Отсутствие верификации webhook-подписи, что ведёт к подделке уведомлений.
- Неправильная обработка статусов транзакций: не все статусы финальные (например, "pending" может измениться).
Мы помогаем избежать этих рисков на этапе проектирования. Закажите интеграцию MoonPay под ключ — мы подготовим всё за 1–2 недели. Оценим ваш проект бесплатно.
Что входит в работу?
- Подбор оптимального способа интеграции (widget/SDK/API)
- Настройка API-ключей, секретов и webhook-обработчиков
- Реализация подписанных URL и верификации транзакций
- Кастомизация интерфейса под ваш дизайн
- Документация интеграции и инструкция по тестированию
- Гарантия и поддержка после внедрения
Ориентировочные сроки
| Этап | Длительность |
|---|---|
| Анализ и определение требований | 1 день |
| Базовая интеграция (виджет) | 2–3 дня |
| Полная интеграция (API + webhook) | 5–10 дней |
| Тестирование и деплой | 2–3 дня |
Стоимость рассчитывается индивидуально в зависимости от сложности и объёма работ. Для точной оценки свяжитесь с нами — мы предложим решение под ваш проект.







