Криптоплатежи в e-commerce: кастомный платёжный шлюз

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Криптоплатежи в e-commerce: кастомный платёжный шлюз
Средний
~3-5 дней
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1378
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1257
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    966
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1210
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    668
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    957

Криптоплатежи в e-commerce: кастомный платёжный шлюз

Типичная ошибка при интеграции крипты в e-commerce: относятся к ней как к ещё одному payment method в существующем checkout. На деле это другой flow — у криптоплатежей нет instant finality (кроме L2), нет chargebacks, курс меняется пока пользователь идёт к кошельку, а partial payment — реальный edge case, а не теоретический. За 5 лет мы выявили типовые узкие места: неверный расчёт газа, отсутствие rollback при частичной оплате, проблемы с верификацией транзакций в L2. Ниже — полный разбор архитектуры, от выбора провайдера до бухгалтерской отчётности.

Кастомная интеграция окупается при объёмах от 100 платежей в день в 3 раза быстрее, чем hosted-решения. Мы занимаемся интеграцией криптоплатежей с начала развития этого направления и видели, как магазины теряли до 12% выручки из-за неправильной обработки нюансов.

Выбор подхода: hosted vs кастомный

Сравним три варианта:

Параметр Готовый сервис (NOWPayments, CoinGate) Кастом через API провайдера Полностью кастомный on-chain
Время запуска 1-2 дня 3-5 дней 2-4 недели
Комиссия 0.5–1% 0.1–0.5% (только сеть) Только gas сети
Поддержка монет Фиксированный список Любые ERC-20/BEP-20 Любые (Solana, Bitcoin)
Приватность Третья сторона видит транзакции Провайдер видит только платежи Полная приватность

Готовый сервис — для объёмов до нескольких сотен платежей в месяц. Кастомная интеграция оправдана при:

  • Нужен конкретный set монет/сетей, которые не поддерживает провайдер
  • Требования к приватности (клиент не хочет, чтобы третья сторона видела транзакции)
  • Высокие объёмы где комиссии провайдера значительны
  • Специфическая логика (например, автоматическая конвертация через DEX)

Ниже — кастомная интеграция, так как она требует больше технических решений. Наш опыт: 30+ проектов, гарантия на код 12 месяцев.

WooCommerce: кастомный payment gateway plugin

WooCommerce предоставляет абстрактный класс WC_Payment_Gateway — достаточно его расширить:

class WC_Crypto_Gateway extends WC_Payment_Gateway {
  
  public function __construct() {
    $this->id = 'crypto_payment';
    $this->title = 'Оплата криптовалютой';
    $this->method_description = 'Bitcoin, Ethereum, USDT и другие';
    $this->supports = ['products'];
    $this->init_form_fields();
    $this->init_settings();
    
    add_action('woocommerce_update_options_payment_gateways_' . $this->id,
      [$this, 'process_admin_options']);
    add_action('woocommerce_api_crypto_payment', [$this, 'handle_webhook']);
  }
  
  public function process_payment($order_id): array {
    $order = wc_get_order($order_id);
    
    // Создаём платёж во внешнем сервисе или генерируем адрес
    $payment = $this->create_crypto_payment($order);
    
    // Сохраняем данные для отображения инструкций
    $order->update_meta_data('_crypto_payment_id', $payment['id']);
    $order->update_meta_data('_crypto_pay_address', $payment['address']);
    $order->update_meta_data('_crypto_pay_amount', $payment['amount']);
    $order->update_meta_data('_crypto_expires_at', $payment['expires_at']);
    $order->set_status('pending', 'Ожидание криптоплатежа');
    $order->save();
    
    return [
      'result' => 'success',
      'redirect' => $this->get_return_url($order),
    ];
  }
  
  public function handle_webhook(): void {
    $payload = file_get_contents('php://input');
    $signature = $_SERVER['HTTP_X_PAYMENT_SIGNATURE'] ?? '';
    
    if (!$this->verify_signature($payload, $signature)) {
      wp_die('Invalid signature', 401);
    }
    
    $data = json_decode($payload, true);
    $order = wc_get_order($data['order_id']);
    
    if (!$order) wp_die('Order not found', 404);
    
    if ($data['status'] === 'confirmed') {
      $order->payment_complete($data['transaction_hash']);
      $order->add_order_note(
        sprintf('Криптоплатёж подтверждён. TX: %s', $data['transaction_hash'])
      );
    }
    
    wp_die('OK', 200);
  }
}

Страница thank you (после редиректа) должна показывать адрес, QR-код и сумму с таймером. WooCommerce вызывает get_return_url() который ведёт на стандартную thank you страницу — её можно кастомизировать через woocommerce_thankyou_{gateway_id} action.

Shopify: использование Payment Apps API

Shopify не позволяет произвольный кастомный PHP. Для интеграции крипты нужно создать Shopify App через Partner Dashboard, использовать Payments Apps API.

Принцип: ваше приложение регистрируется как payment provider. При оформлении заказа Shopify делает HTTP запрос к вашему endpoint с данными заказа, вы возвращаете URL для редиректа на вашу payment page, и после подтверждения отправляете resolved/rejected через GraphQL mutation.

// Shopify вызывает этот endpoint
app.post('/shopify/payment', async (req, res) => {
  const { gid, amount, currency, cancelUrl, kind } = req.body;
  
  // Создаём внутренний платёж
  const payment = await createCryptoInvoice({
    shopifyOrderGid: gid,
    fiatAmount: parseFloat(amount),
    fiatCurrency: currency,
  });
  
  // Редиректим на нашу payment страницу
  res.json({
    redirect_url: `${process.env.APP_URL}/pay/${payment.id}`,
  });
});

// После подтверждения платежа
async function notifyShopifyPaymentComplete(paymentGid: string, txHash: string) {
  const mutation = `
    mutation PaymentSessionResolve($id: ID!) {
      paymentSessionResolve(id: $id) {
        paymentSession {
          id
          state { ... on PaymentSessionStateResolved { code } }
        }
        userErrors { field message }
      }
    }
  `;
  
  await shopifyGraphQL(mutation, { id: paymentGid });
}

Как курс и таймер влияют на UX и выручку?

Пользователь видит цену 99$, нажимает "оплатить криптой", и попадает на страницу с суммой 0.0271 ETH. Эта сумма действительна 15–30 минут. Если пользователь медлит или курс сильно меняется — нужен refresh механизм.

Таймер на странице оплаты должен быть не декоративным — при истечении автоматически обновляем invoice:

// Клиентский код
let expiresAt = new Date(invoice.expiresAt);

const timer = setInterval(async () => {
  const remaining = expiresAt.getTime() - Date.now();
  
  if (remaining <= 0) {
    clearInterval(timer);
    // Запрашиваем новый invoice с актуальным курсом
    const refreshed = await fetch(`/api/payment/${invoiceId}/refresh`, {
      method: 'POST'
    });
    const newInvoice = await refreshed.json();
    expiresAt = new Date(newInvoice.expiresAt);
    updateUI(newInvoice); // Обновляем QR и сумму
  }
}, 1000);

На бэкенде при refresh — пересчитываем сумму в крипте по актуальному курсу, обновляем запись в БД, тот же адрес (если используем unique address per payment).

Reconciliation и отчётность

Для бухгалтерии нужна конвертация крипто-суммы в фиат на момент получения. Фиксируем в базе: crypto_amount, crypto_currency, fiat_amount, fiat_currency, exchange_rate, confirmed_at. Источник курса — Chainlink (on-chain) или CoinGecko API (off-chain) с timestamp. Это критично для налогового учёта.

Что делать при частичной оплате (partial payment)?

Edge case: пользователь отправил 0.02 ETH вместо 0.0271 ETH. Без специальной логики заказ зависнет. Решение: на уровне воркера проверяем, что полученная сумма >= expected, иначе помечаем как partially_paid и генерируем второй invoice на остаток. Включаем поддержку мульти-транзакций в одном заказе.

Почему стоит выбрать кастомную интеграцию?

Кастомная интеграция даёт полный контроль над стэком: от выбора блокчейна до логики обработки ошибок. Вы не зависите от комиссий и ограничений провайдера. При объёмах от 100 платежей в день экономия на комиссиях превышает стоимость разработки уже за 3 месяца. Мы также реализуем защиту от reentrancy-атак и оптимизируем gas consumption для массовых операций.

Оптимизация газа при большом количестве платежей Используйте gas price oracle и batch-транзакции через ретранслятор. Это снижает затраты на комиссию до 40%.

Что входит в работу

  1. Технический аудит текущего магазина (CMS, хостинг, платёжные модули)
  2. Выбор архитектуры: hosted или кастомный, on-chain или L2
  3. Разработка платёжного шлюза (WooCommerce, Shopify, кастом)
  4. Интеграция с кошельком (MetaMask, WalletConnect, Ledger)
  5. Настройка webhook-ов и статусов заказов
  6. Разработка страницы оплаты с QR-кодом и таймером
  7. Подключение оракула курса (Chainlink) или биржевого API
  8. Тестирование на testnet "под ключ"
  9. Аудит смарт-контрактов (Slither, Mythril) — при необходимости
  10. Документация и обучение персонала
  11. Пост-релизная поддержка 1 месяц

Получите консультацию — мы свяжемся в течение 3 часов и покажем пример аналогичной интеграции для вашей ниши. Закажите пилотную интеграцию на тестовом домене — 3 дня, чтобы убедиться в совместимости.

Развертывание блокчейн-инфраструктуры: ноды, RPC, индексация

Subgraph упал в 3:47 ночи. К утру пользователи видели устаревшие балансы, транзакции «висели» в UI, поддержка получила 47 тикетов за час. Причина: handler в subgraph упал на транзакции с нестандартным event log — и весь индекс встал. Мы сталкивались с такими ситуациями десятки раз. Наш опыт показывает: блокчейн-инфраструктура не прощает gaps в observability. Гарантировать uptime без многослойного мониторинга и fault‑tolerant архитектуры невозможно. За 8 лет работы с Ethereum, Polygon и Solana мы выработали подход, который позволяет предсказуемо развёртывать инфраструктуру любого масштаба — от одиночной ноды до мультичейн‑сетки с десятками субграфов.

Архитектура RPC-слоя

Каждое взаимодействие dApp с блокчейном идёт через RPC — JSON‑RPC API, которую предоставляет нода. Три варианта:

Managed providers — Alchemy, QuickNode, Infura, Ankr. Минимальные операционные расходы, SLA, встроенный мониторинг. Ограничения: rate limits (Alchemy Free: 300 RU/sec), vendor lock, потенциальные downtime при инцидентах провайдера. Для большинства проектов — правильный выбор на старте.

Собственные ноды — полный контроль, нет rate limits, нет зависимости от третьих сторон. Стоимость: архивная нода Ethereum занимает 2.5–3TB SSD, требует мощный сервер и DevOps‑поддержку. Sync с нуля на Ethereum через Geth/Nethermind — 3–7 дней. Оправдано при высокой нагрузке или требованиях к latency.

Гибрид — собственная нода как primary, managed provider как fallback. Стандарт для протоколов с TVL от $10M. Правильная балансировка может сократить расходы на 20–30% по сравнению с чисто managed‑схемой. При нагрузке 10 млн запросов в месяц гибрид экономит от $1500 до $3000.

Провайдер Сильная сторона Ограничение
Alchemy Supernode, Enhanced APIs, webhooks Дорогой на high-volume
QuickNode Низкая latency, multi-chain Дороже Alchemy на базовом плане
Infura Историческая надёжность Rate limits на бесплатном, один крупный инцидент остановил пол‑DeFi
Ankr Дешёвый, 40+ чейнов Менее стабильный

Как настроить RPC-слой без единой точки отказа?

Минимум два провайдера, DNS round‑robin с health check каждые 5 секунд, автоматическое переключение на fallback при latency >500 мс. На практике это даёт 99.99% доступности при любом сбое провайдера. Для протоколов с TVL от $10M мы рекомендуем собственный HA‑прокси (nginx или Envoy) перед двумя managed‑провайдерами.

Почему гибридная RPC-схема выгоднее чисто managed?

При 50 млн запросов в месяц Alchemy стоит $2000+, QuickNode — $2500+, собственная нода — $400–600 за хостинг + DevOps. Гибрид: primary — своя нода ($500), fallback — QuickNode ($500), итого ~$1000. Экономия 50–60% без потери SLA.

Клиенты нод Ethereum

Execution clients: Geth (наиболее используемый), Nethermind (C#, быстрая sync), Besu (Java, enterprise), Erigon (самый быстрый sync, архивный режим эффективен по диску — ~2TB вместо 3TB).

Consensus clients (post‑Merge): Lighthouse (Rust), Prysm (Go), Teku (Java), Nimbus (Nim). Каждая нода после The Merge требует пары execution + consensus client.

Для DevOps: eth‑docker — Docker Compose конфигурации для всех комбинаций клиентов. Настройка мониторинга через Grafana + Prometheus — обязательна, стандартный дашборд есть в репозитории каждого клиента.

The Graph: индексация событий

The Graph Protocol — decentralized indexing. Subgraph описывает какие события с каких контрактов индексировать и как трансформировать их в GraphQL схему.

Структура subgraph:

  • subgraph.yaml — манифест: адреса контрактов, startBlock, события которые обрабатываются
  • schema.graphql — GraphQL схема entities
  • src/mapping.ts — AssemblyScript обработчики событий
dataSources:
  - kind: ethereum
    name: UniswapV3Pool
    network: mainnet
    source:
      address: "0x88e6A0c2dDD26FEEb64F039a2c41296FcB3f5640"
      abi: UniswapV3Pool
      startBlock: 12370624
    mapping:
      eventHandlers:
        - event: Swap(indexed address,indexed address,int256,int256,uint160,uint128,int24)
          handler: handleSwap

AssemblyScript handlers — не TypeScript. Нет nullable types, нет closures, нет многих стандартных API. Ошибка в handler останавливает индексацию subgraph-а на той транзакции. Важно: добавлять try‑catch на операции которые могут падать (например store.get() для entity которая может не существовать).

Как избежать остановки индексации субграфа?

Лог файлы Graph Node мониторятся в реальном времени, при hasIndexingErrors = true срабатывает алерт и автоматический рестарт ноды (через systemd или Kubernetes). Типичный downtime при ошибке — 150–300 секунд до восстановления. Дополнительно: для production ставим watchdog, который перезапускает Graph Node если subgraph lag превышает 50 блоков.

Выбор между Hosted Service и Decentralized Network

Graph Hosted Service (бесплатный, централизованный) deprecated в пользу Subgraph Studio + Graph Network. Для продакшн: деплой на Graph Network с GRT curation signal — субграф получает indexers пропорционально curation.

Альтернативы The Graph: Ponder (TypeScript, self-hosted, проще дебагать), Envio (ultra‑fast indexer, поддерживает EVM + non‑EVM), Subsquid (TypeScript, своя сеть), Moralis Streams (managed, webhook‑based). Наш опыт показывает: для высоконагруженных проектов с уникальной логикой эффективнее Ponder или Envio — они дают полный контроль над процессом и не требуют токеномики GRT.

Webhooks и real-time нотификации

Alchemy Webhooks и QuickNode Streams позволяют получать события в реальном времени через HTTP webhook или WebSocket. Для мониторинга адресов, новых транзакций, минтов — это быстрее чем polling RPC.

Tenderly — платформа для мониторинга и алертов. Можно настроить alert на конкретный event из контракта, на изменение баланса, на вызов функции с определёнными параметрами. Симуляция транзакций через Tenderly API — бесценно для debugging.

Мониторинг и observability

Минимальный стек мониторинга для протокола:

On‑chain: OpenZeppelin Defender Sentinel — watches contract events, вызывает webhook или Autotask при срабатывании условий. Forta Network — community‑maintained боты детектируют аномалии (большие withdrawals, flash loans, governance attacks).

Infrastructure: Grafana + Prometheus для нод, Datadog или Grafana Cloud для managed метрик. Alert на: нода отстала на 10+ блоков, RPC latency > 500ms, subgraph lag > 100 блоков.

Uptime: Better Uptime или PagerDuty на RPC endpoint и subgraph health endpoint (The Graph предоставляет _meta { hasIndexingErrors, block { number } }).

Почему мониторинг без Tenderly недостаточен?

Tenderly даёт симуляцию транзакций и детальные трейсы — это критично для отладки ошибок в субграфах и смарт‑контрактах. Forta же фокусируется на аномалиях в сети, а не на вашей инфраструктуре. Комбинация Tenderly + собственный дашборд Grafana покрывает 90% сценариев инцидентов.

Мультичейн инфраструктура

Протокол на 5 чейнах = 5 отдельных RPC endpoints, 5 subgraphs, 5 мониторинг‑конфигов. Это управляемо, но нужна автоматизация деплоя.

Для subgraph multi‑network деплой: graph deploy --network mainnet, graph deploy --network arbitrum-one и т.д. с единой кодовой базой и network‑specific адресами в отдельных файлах конфигурации.

Chainlink CCIP и LayerZero для cross‑chain messaging требуют мониторинга состояния обоих чейнов и транзакций на intermediate relayers. Реорг на source chain при уже подтверждённом минте на target chain — классическая проблема мостов. Решение: ждать finality (на Ethereum ~15 минут после Merge для экономической finality) перед подтверждением на target chain.

Процесс настройки инфраструктуры

  1. Аудит текущего стека — определяем чейны, объём запросов, требования к latency и доступности.
  2. Проектирование архитектуры — выбор провайдеров, балансировка, redundancy.
  3. Разработка subgraph — манифест → схема → handlers → тестирование на локальной Graph Node → деплой на testnet → mainnet.
  4. Конфигурация мониторинга — Tenderly alerts, Grafana дашборд, PagerDuty интеграция.
  5. Документация и runbook — что делать при: subgraph fell behind, RPC downtime, нода desync.
  6. Передача в эксплуатацию — обучение команды, передача доступов, поддержка первый месяц.

Что входит в работу

  • Развёртывание managed или self‑hosted нод Ethereum, Polygon, BNB Chain
  • Настройка RPC‑слоя с primary/fallback и load balancing
  • Разработка и деплой subgraph под ваш протокол
  • Подключение мониторинга (Tenderly, Grafana, алерты)
  • Создание runbook и документации по эксплуатации
  • Обучение команды (до 4 часов онлайн)
  • Поддержка в течение 30 дней после сдачи

Сроки

Работа Срок
Настройка RPC и базового мониторинга 1–2 недели
Subgraph для одного протокола 2–4 недели
Self-hosted нода с мониторингом 2–3 недели
Полная инфраструктура (multi-chain, мониторинг, runbooks) 6–10 недель

Все проекты ведутся в репозитории на GitHub/GitLab с CI/CD, код конфигураций остаётся у вас. Закажите развертывание инфраструктуры — расскажем, как сократить расходы на 20–30% без потери надёжности. JSON‑RPC спецификация, документация The Graph. Получите консультацию — покажем, как мы развёртывали инфраструктуру для протокола с TVL $50M+ на Ethereum и Arbitrum.

Свяжитесь с нами.