Интеграция с Mercuryo
Mercuryo — on/off-ramp провайдер с широким покрытием методов оплаты для СНГ и Восточной Европы: карты Visa/Mastercard, банковские переводы, а также локальные методы. Поддерживает рублёвые платежи (до введения санкций), гривна UAH, казахстанские тенге KZT.
Widget интеграция
// Mercuryo Widget v4
const mercuryoWidget = {
widgetId: process.env.MERCURYO_WIDGET_ID,
type: 'buy', // 'buy' или 'sell'
currency: 'BTC',
fiatCurrency: 'EUR',
fiatAmount: '100',
address: walletAddress,
signature: await getSignedAddress(walletAddress), // серверная подпись
onStatusChange: (data) => {
if (data.status === 'paid') {
handlePaymentComplete(data.transactionId);
}
},
};
// Встройка через URL
const params = new URLSearchParams(mercuryoWidget);
const widgetUrl = `https://exchange.mercuryo.io/?${params}`;
window.open(widgetUrl, '_blank');
Подпись адреса на сервере
import hmac, hashlib
def sign_wallet_address(address: str, secret: str) -> str:
"""Mercuryo требует подпись адреса для защиты от подмены"""
return hmac.new(
secret.encode(),
address.encode(),
hashlib.sha512
).hexdigest()
REST API
import httpx
class MercuryoClient:
BASE_URL = "https://api.mercuryo.io/v1.6"
def __init__(self, api_key: str, secret: str):
self.api_key = api_key
self.secret = secret
async def get_rates(self, from_currency: str, to_currency: str,
amount: float) -> dict:
async with httpx.AsyncClient() as client:
resp = await client.get(
f"{self.BASE_URL}/public/rates",
params={
"from": from_currency,
"to": to_currency,
"amount": amount,
}
)
return resp.json()
async def get_transaction(self, tx_id: str) -> dict:
async with httpx.AsyncClient() as client:
resp = await client.get(
f"{self.BASE_URL}/sdk-partner/transactions/{tx_id}",
headers={"Sdk-Partner-Token": self.api_key}
)
return resp.json()["data"]
Callback обработка
@app.post("/callbacks/mercuryo")
async def mercuryo_callback(request: Request):
data = await request.json()
# Проверка подписи
signature = request.headers.get("X-Mercuryo-Signature")
body = await request.body()
expected = hashlib.sha512(body + MERCURYO_SECRET.encode()).hexdigest()
if signature != expected:
raise HTTPException(403)
status = data["status"]
if status == "paid":
await process_crypto_delivery(data["id"], data["amount"], data["currency"])
elif status == "failed":
await handle_failed_transaction(data["id"])
Mercuryo комиссии: 3.95% для карт, 2.95% для банковских переводов. Для рынков СНГ и Восточной Европы — один из немногих провайдеров с реальным покрытием локальных методов оплаты. Поддерживает 150+ криптовалют, 30+ фиатных валют.







