Покупка криптовалюты через банковский перевод — задача, с которой сталкивается каждый on-ramp сервис, стремящийся к минимальным комиссиям и максимальным лимитам. Карты Mastercard/Visa берут 2–4%, а SEPA или SWIFT обходятся в 0–1%, что при объёмах $100K+ даёт реальную экономию. Например, на одной из наших платформ переход с карт на SEPA снизил комиссионные затраты на $40 000 в год при объёме $2M. На другом проекте экономия составила $150 000 в год при объёме $5M. Мы настроили десятки таких интеграций для криптоплатформ: от выбора провайдера (Modulr, ClearBank, Railsr) до полной автоматизации матчинга платежей.
Типы банковских переводов
| Тип | Регион | Время | Комиссия (примерно) | Лимиты |
|---|---|---|---|---|
| SEPA Credit Transfer | Европа (EUR) | 1 рабочий день | 0–1% | $100K+ |
| SEPA Instant | Европа (EUR) | До 10 секунд | 0–1% | Ограничен банком |
| SWIFT | Международный | 2–5 дней | $15–50 + курс | $1M+ |
| ACH | США (USD) | 1–3 дня | 0–0.5% | $100K+ |
| Faster Payments | Великобритания (GBP) | Мгновенно | 0% | £1M |
| Open Banking | ЕС/UK | Мгновенно | 0–0.5% | Зависит от банка |
Почему банковский перевод выгоднее карточного?
Сравнение комиссий: карточный on-ramp берёт 2–4%, банковский перевод — 0–1%, что в 3 раза дешевле при крупных суммах. Лимиты: карты обычно ограничены $10K за транзакцию, банковские переводы — $100K и выше. Минус — скорость, но Open Banking решает и её. Для крупных инвесторов и институциональных клиентов банковские переводы становятся единственным вариантом — карты не могут пропустить суммы от $500K.
Архитектура приёма банковских переводов
Пример реализации сервиса депозитов
class BankTransferDepositService: async def create_deposit_order( self, user: User, amount: Decimal, currency: str, crypto_currency: str, ) -> DepositOrder: reference = self.generate_reference(user.id) order = await self.db.create_pending_deposit( user_id=user.id, reference=reference, expected_amount=amount, currency=currency, crypto_currency=crypto_currency, expires_at=datetime.now() + timedelta(hours=24), ) return DepositOrder( order_id=order.id, bank_name="Modulr Finance", account_name="Platform Name Ltd", iban="GB29NWBK60161331926819", bic="NWBKGB2L", reference=reference, amount=amount, currency=currency, expires_at=order.expires_at, ) def generate_reference(self, user_id: int) -> str: import random, string code = ''.join(random.choices(string.ascii_uppercase + string.digits, k=8)) return f"DEP{user_id:06d}{code}" Что входит в настройку
- Интеграция с банковским провайдером (Modulr, ClearBank, Railsr) через API
- Генерация уникального reference и его отображение пользователю
- Webhook-обработчик для входящих платежей с матчингом по reference
- Автоматический возврат неидентифицированных платежей
- Выбор стратегии курсовой защиты (фиксация или расчёт по факту)
- Тестирование полного цикла: создание заявки → перевод → зачисление
- Документация по интеграции и поддержка на этапе запуска
Open Banking интеграция (TrueLayer)
Open Banking позволяет пользователю авторизовать платёж прямо из своего банка, без ручного ввода реквизитов и задержки SEPA. Это устраняет главный барьер — скорость. Подробнее о протоколе можно прочитать в Wikipedia.
import httpx class TrueLayerClient: BASE_URL = "https://payment.truelayer.com" def __init__(self, client_id: str, client_secret: str): self.client_id = client_id self.client_secret = client_secret async def create_payment( self, amount_in_minor: int, currency: str, beneficiary_name: str, beneficiary_iban: str, reference: str, user_email: str, ) -> dict: token = await self.get_access_token() resp = await httpx.AsyncClient().post( f"{self.BASE_URL}/v3/payments", headers={"Authorization": f"Bearer {token}"}, json={ "amount_in_minor": amount_in_minor, "currency": currency, "payment_method": { "type": "bank_transfer", "provider_filter": {"countries": ["GB", "DE", "FR", "NL"]}, "beneficiary": { "type": "merchant_account", "account_holder_name": beneficiary_name, "account_identifier": { "type": "iban", "iban": beneficiary_iban, } } }, "user": {"email": user_email}, "metadata": {"reference": reference}, } ) data = resp.json() return { "payment_id": data["id"], "redirect_url": data["authorization_flow"]["actions"][0]["uri"] } Пользователь получает redirect на страницу своего банка для подтверждения. После подтверждения — деньги поступают мгновенно.
Как работает матчинг входящих платежей?
Главная сложность банковских переводов — правильная идентификация отправителя. Система получает уведомления о входящих платежах от Banking-as-a-Service провайдера через webhook:
@app.post("/webhooks/banking/incoming") async def incoming_payment_webhook(request: Request): data = await request.json() payment = data["payment"] reference = extract_reference(payment["remittance_information"]) if not reference: await flag_for_manual_review(payment) return pending_order = await db.find_pending_deposit(reference=reference) if not pending_order: await flag_for_manual_review(payment) return if abs(payment["amount"] - float(pending_order.expected_amount)) > 0.01: await flag_for_manual_review(payment, pending_order.id) return await process_confirmed_deposit(pending_order.id, payment) def extract_reference(remittance_info: str) -> str | None: import re match = re.search(r'DEP\d{6}[A-Z0-9]{8}', remittance_info) return match.group(0) if match else None Как защититься от колебаний курса?
В отличие от карточных платежей, при банковских переводах есть задержка 1–3 дня. За это время курс может значительно измениться. Два подхода:
| Стратегия | Курс | Риск для платформы | UX |
|---|---|---|---|
| Фиксация курса при заявке | Известен сразу | Высокий (нужно хеджирование) | Хороший |
| Расчёт курса при получении | Неизвестен до зачисления | Низкий | Средний |
- Курс фиксируется в момент создания заявки — пользователь видит сколько крипто получит. Риск несёт платформа. Нужно хеджировать через форвардный контракт или немедленную покупку крипто после получения фиата.
- Курс рассчитывается в момент получения — пользователь получает крипто по актуальному курсу. Меньше риска для платформы, хуже UX.
Большинство платформ использует второй подход для банковских переводов и явно сообщает об этом пользователю.
Возврат неидентифицированных платежей
Обязательный процесс: если входящий платёж не удалось сопоставить с депозитом в течение 24–48 часов, он возвращается отправителю через reverse transfer. Хранение чужих средств без идентификации — регуляторное нарушение.
Как мы работаем
- Аналитика — изучаем вашу платформу, объёмы, требования по ликвидности.
- Проектирование — выбираем провайдера, определяем схему матчинга и курсовую стратегию.
- Реализация — пишем интеграцию с API банка, настраиваем webhook, автоматизируем возвраты.
- Тестирование — покрываем unit-тестами, симуляция депозитов, тест с реальным банком.
- Деплой — поэтапный rollout с мониторингом и поддержкой.
Наши инженеры имеют 10+ лет опыта в блокчейн-разработке и успешно запустили 50+ фиатных on-ramp интеграций. Гарантируем качество и сроки.
Свяжитесь с нами для оценки вашего проекта — наша команда готова обсудить детали. Закажите консультацию, и мы предложим оптимальную архитектуру для вашей криптоплатформы.







