Интеграция с MoonPay
MoonPay — один из крупнейших white-label on/off-ramp провайдеров. Поддерживает 150+ фиатных валют, 100+ криптовалют, доступен в 160+ странах. Интеграция занимает дни вместо месяцев по сравнению с построением собственного шлюза и позволяет избежать сложностей с KYC, комплаенсом и банковской инфраструктурой.
Варианты интеграции
Widget — самый простой вариант. Встраиваете iframe или открываете popup с MoonPay UI. Пользователь завершает процесс на стороне MoonPay.
SDK — React Native / iOS / Android SDK для мобильных приложений.
API — прямой программный доступ для создания транзакций, проверки статусов, кастомизации flow.
Widget интеграция
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 для предотвращения подмены параметров (адреса кошелька, суммы):
import hmac
import hashlib
import urllib.parse
import base64
def sign_moonpay_url(base_url: str, secret_key: str) -> str:
"""Подписывает URL для MoonPay widget"""
# Парсим query parameters
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('=')
# Добавляем signature к URL
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}
Комиссии MoonPay: 1.99% для банковских переводов, 3.99% для карт (плюс возможные комиссии банка). Revenue share для партнёров — от 0.5% до 0.7% от транзакции. При объёме > $1M/месяц условия обсуждаются индивидуально. Для большинства проектов интеграция с MoonPay быстрее и дешевле собственного шлюза при объёмах до $10M/месяц.







