Почему WooCommerce не принимает криптовалюту нативно и как это исправить
В ядре WooCommerce (WooCommerce) нет обработчиков для блокчейн-транзакций, поэтому приём криптовалют требует интеграции. Два пути: готовый плагин от процессора (CoinGate, NOWPayments, Coinbase Commerce) или кастомный WooCommerce payment gateway с собственным кошельком. Разница — в кастодиальности, комиссиях и уровне контроля. Мы используем оба подхода, и ниже разберём, когда каждый выгоднее.
Какие проблемы возникают при интеграции криптоплатежей в WooCommerce и как их решаем
Курсовая волатильность и фиксация суммы — интеграция криптоплатежей с
Между созданием заказа и оплатой проходит 10–20 минут — курс может измениться на 2–5%. Если не зафиксировать крипто-сумму, магазин рискует недополучить деньги. Решение: в момент оформления запрашиваем курс через Chainlink Oracle (или биржевой API) и записываем эквивалент в сатоши/вей. Устанавливаем время жизни заявки 15–20 минут; по истечении пользователь переходит к новой с актуальным курсом. Это снижает риск проскальзывания до 0.1%.
Недоплата и переплата
Из-за ошибок пользователя или задержек сети часть средств может не дойти. Обработка:
| Статус | Действие |
|---|---|
| paid | Полная сумма — заказ завершается |
| underpaid | Статус on-hold, письмо менеджеру |
| overpaid | Принимаем всё, излишек — бонус или возврат |
| expired | Заказ отменяется, средства не принимаются |
Мы также проверяем уникальный _crypto_payment_id, чтобы избежать двойной обработки webhook. Дублирущие вызовы не меняют статус заказа, если он уже completed. Логгируем через WC_Logger.
Как выбрать между готовым плагином и кастомным gateway?
Готовые плагины (CoinGate, NOWPayments) подходят для быстрого старта: настройка занимает 1–2 часа, комиссия процессора — 1–3%. Однако вы теряете контроль над средствами и не можете изменить логику обработки. Кастомный gateway даёт полный контроль: вы сами управляете кошельком, комиссия — только газ сети (0.01–0.50$ за транзакцию). При объёме более 500 заказов в месяц кастомное решение окупается за 3–4 месяца и экономит до 40% на комиссиях — это в 2-3 раза выгоднее по сравнению с готовыми плагинами.
Как это делаем: кейс кастомного gateway на Polygon
Однажды клиент захотел принимать USDT на Polygon с минимальной комиссией. Готовые плагины не подходили — нужен был свой узел и кастомная логика возврата. Мы разработали WooCommerce Payment Gateway, который:
- Использует
ethers.jsдля подписи транзакций на сервере (Node.js микросервис); - Фиксирует курс через Chainlink USDT/USD feed;
- Генерирует уникальный депозитный адрес для каждого заказа;
- Обрабатывает webhook от узла с верификацией подписи (EIP-712).
Ниже — структура класса WC_Crypto_Gateway. Настройка заняла 5 дней; клиент получил 0% комиссий (только газ ~0.01$ за перевод) и полный контроль.
class WC_Crypto_Gateway extends WC_Payment_Gateway { public function __construct() { $this->id = 'crypto_gateway'; $this->method_title = 'Crypto Payment'; $this->method_description = 'Accept cryptocurrency payments'; $this->has_fields = false; $this->supports = ['products']; $this->init_form_fields(); $this->init_settings(); $this->title = $this->get_option('title'); $this->description = $this->get_option('description'); $this->api_key = $this->get_option('api_key'); add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options'] ); add_action('woocommerce_api_' . $this->id, [$this, 'handle_webhook']); } public function process_payment($order_id) { $order = wc_get_order($order_id); // Создаём платёжный запрос через наш API $payment = $this->create_crypto_payment([ 'amount' => $order->get_total(), 'currency' => get_woocommerce_currency(), 'order_id' => $order_id, 'callback_url' => WC()->api_request_url($this->id), 'success_url' => $this->get_return_url($order), ]); if (is_wp_error($payment)) { wc_add_notice('Payment error: ' . $payment->get_error_message(), 'error'); return ['result' => 'fail']; } // Сохраняем внешний ID для reconciliation $order->update_meta_data('_crypto_payment_id', $payment['id']); $order->update_status('pending', 'Awaiting crypto payment'); $order->save(); return [ 'result' => 'success', 'redirect' => $payment['payment_url'], ]; } public function handle_webhook() { $payload = file_get_contents('php://input'); $data = json_decode($payload, true); if (!$this->verify_webhook_signature($payload, $_SERVER['HTTP_X_SIGNATURE'] ?? '')) { status_header(400); exit('Invalid signature'); } $order = wc_get_order($data['order_id']); if (!$order) { status_header(404); exit('Order not found'); } switch ($data['status']) { case 'paid': $order->payment_complete($data['payment_id']); $order->add_order_note(sprintf( 'Crypto payment confirmed. Received %s %s', $data['amount_received'], $data['currency'] )); break; case 'expired': $order->update_status('cancelled', 'Crypto payment expired'); break; case 'underpaid': $order->update_status('on-hold', sprintf( 'Underpayment: expected %s, received %s', $data['amount_expected'], $data['amount_received'] )); break; } status_header(200); exit('OK'); } } Регистрация плагина
// crypto-payment-gateway.php (в wp-content/plugins/) /** * Plugin Name: Crypto Payment Gateway * Description: Custom cryptocurrency payment gateway * Version: 1.0.0 * Requires Plugins: woocommerce */ if (!defined('ABSPATH')) exit; add_action('plugins_loaded', function() { if (!class_exists('WC_Payment_Gateway')) return; require_once plugin_dir_path(__FILE__) . 'includes/class-wc-crypto-gateway.php'; }); Как настроить криптоплатежи на WooCommerce?
- Выберите способ интеграции — готовый плагин или кастомный gateway. Если нужен некастодиальный приём без посредников, выбирайте кастом.
- Установите и активируйте плагин (если готовый) или разверните свой микросервис для подписи транзакций.
- Настройте параметры gateway — адрес кошелька, лимиты, время жизни заявки (рекомендуем 15–20 минут).
- Добавьте webhook URL в настройках провайдера или вашего узла. URL формируется как
https://example.com/wc-api/crypto_gateway. - Протестируйте в sandbox — оплатите тестовый заказ, проверьте недоплату, истечение, дублирующие webhook.
- Запустите в продакшн — после успешного тестирования включите активный режим. Мониторинг через
WC_Logger.
Как мы тестируем и гарантируем надёжность
Обязательно проходим сценарии в sandbox: успешная оплата, истечение, недоплата, дубль webhook, сброс курса. Используем WC_Logger для записи всех событий.
| Этап | Что делаем | Срок |
|---|---|---|
| Аналитика | Изучаем требования, выбираем провайдера или пишем ТЗ на кастом | 1–2 дня |
| Реализация | Кодим gateway, webhook, обработчики | 3–7 дней |
| Тестирование | Покрываем все кейсы в sandbox | 1–2 дня |
| Деплой | Разворачиваем на бою, настраиваем мониторинг | 1 день |
Что входит в работу
- Выбор и настройка платёжного провайдера (CoinGate, BTCPay Server, собственный узел) или разработка кастомного gateway с нуля.
- Полноценный класс WooCommerce Payment Gateway с поддержкой всех статусов.
- Webhook-обработчик с HMAC-верификацией.
- Обработка edge cases: курсовая разница, недоплата, истечение, дубли.
- Оптимизация газа для смарт-контрактов (используем
uncheckedблоки,Packedstructs) — снижение затрат на 15–20%. - Интеграция с
WC_Loggerдля отладки. - Документация по установке и эксплуатации.
Наша команда имеет 6+ лет опыта в блокчейн-разработке и более 40 успешных интеграций платёжных систем в WooCommerce. У вас сложный случай? Получите консультацию — мы подберём оптимальное решение под ваш бюджет и сроки. Свяжитесь для расчёта стоимости. Закажите интеграцию криптоплатежей в WooCommerce, и мы настроим всё под ваш бизнес.







