Інтеграція криптоплатежів з WooCommerce: під ключ
Чому 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, і ми налаштуємо все під ваш бізнес.







