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







