Почему 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, и мы настроим всё под ваш бизнес.







