Интеграция с Simplex
Simplex — платёжный процессор с фокусом на крипто-индустрию, специализирующийся на карточных платежах. В отличие от многих конкурентов, Simplex берёт на себя chargeback-риски — это ключевое преимущество для биржей и кошельков, которые иначе были бы уязвимы к картофодам.
Модель работы
Simplex использует модель "guaranteed payment": они одобряют транзакцию и гарантируют мерчанту оплату даже если пользователь впоследствии оспорит платёж. За это берётся повышенная комиссия (~3.5–5%) и проводится собственный fraud-скоринг.
Partner API интеграция
import httpx
import uuid
class SimplexClient:
PRODUCTION_URL = "https://payments.simplexcc.com/payments/new"
SANDBOX_URL = "https://sandbox.test-simplexcc.com/payments/new"
def __init__(self, api_key: str, sandbox: bool = False):
self.api_key = api_key
self.base_url = self.SANDBOX_URL if sandbox else self.PRODUCTION_URL
self.session = httpx.AsyncClient(
headers={"Authorization": f"ApiKey {self.api_key}"}
)
async def create_payment_request(
self,
user_id: str,
fiat_amount: float,
fiat_currency: str,
crypto_currency: str,
wallet_address: str,
) -> dict:
payment_id = str(uuid.uuid4())
order_id = str(uuid.uuid4())
payload = {
"account_details": {
"app_provider_id": "your_partner_id",
"app_version_id": "1.0.0",
"app_end_user_id": user_id,
"signup_login": {"ip": "1.2.3.4"}, # IP пользователя
},
"transaction_details": {
"payment_details": {
"quote_id": order_id,
"payment_id": payment_id,
"order_id": order_id,
"original_http_ref_url": "https://yourapp.com",
"requested_digital_amount": {
"currency": crypto_currency,
"amount": None # рассчитывается из fiat
},
"requested_fiat_amount": {
"currency": fiat_currency,
"amount": fiat_amount
},
"destination_wallet": {
"currency": crypto_currency,
"address": wallet_address,
},
}
}
}
resp = await self.session.post(
f"{self.base_url}",
json=payload
)
return resp.json()
Получение quote
Перед созданием платежа нужно получить актуальный курс:
async def get_quote(self, fiat_amount: float, fiat_currency: str,
crypto_currency: str) -> dict:
resp = await self.session.get(
"https://backend-wallet-api.simplexcc.com/wallet/merchant/v2/quote",
params={
"digital_currency": crypto_currency,
"fiat_currency": fiat_currency,
"requested_currency": fiat_currency,
"requested_amount": fiat_amount,
"client_ip": "1.2.3.4",
"payment_methods": ["credit_debit_card"]
}
)
data = resp.json()
return {
"payment_id": data["payment_id"],
"crypto_amount": data["digital_money"]["amount"],
"fiat_amount": data["fiat_money"]["base_amount"],
"fee": data["fiat_money"]["total_amount"] - data["fiat_money"]["base_amount"],
}
Webhook обработка
@app.post("/webhooks/simplex")
async def simplex_webhook(request: Request):
data = await request.json()
event_type = data.get("event")
if event_type == "payment_simplexcc_approved":
payment = data["payment"]
# Пользователь прошёл fraud-check, можно отправлять крипто
await initiate_crypto_delivery(
payment_id=payment["id"],
crypto_amount=payment["crypto_amount"],
crypto_currency=payment["crypto_currency"],
wallet_address=payment["destination_wallet"]["address"]
)
elif event_type == "payment_simplexcc_declined":
payment = data["payment"]
await handle_payment_declined(payment["id"])
Simplex хорошо подходит для бирж, которым нужна защита от chargebacks на карточные платежи. Покрытие: 160+ стран. Особенность: Simplex одобряет оплату, партнёр доставляет крипто — четкое разделение ответственности.







