Інтеграція криптоплатежів з WooCommerce

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція криптоплатежів з WooCommerce
Простий
~2-3 дні
Часті запитання

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

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1307
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1219
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    920
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1148
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    611
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

Інтеграція крипто-платежів в WooCommerce

WooCommerce не має нативної підтримки крипти, тому інтеграція будується через один з двох підходів: готовий плагін платіжного процесора (CoinGate, NOWPayments, Coinbase Commerce) або кастомний WooCommerce payment gateway для роботи з власним гаманцем. Вибір визначається тим, потрібна вам кастодіальна або некастодіальна схема.

Варіант 1: платіжний процесор (швидко, з комісіями)

Найпоширеніші варіанти:

CoinGate WooCommerce Plugin — офіційний плагін, підтримує 70+ монет, виплати в EUR/USD. Установка через wp-admin → Plugins. Настройка займає 15 хвилин якщо аккаунт CoinGate вже верифікований.

NOWPayments — аналогічний сервіс, акцент на privacy coins (XMR, ZCash). Плагін на WordPress.org.

BTCPay Server — self-hosted процесор, некастодіальний (ви контролюєте ключі). Більше DevOps роботи, але 0% комісій процесора. Рекомендую для проектів з серйозним обсягом транзакцій.

Варіант 2: кастомний WooCommerce gateway

Якщо потрібна інтеграція з власною інфраструктурою (власний вузол, специфічна монета, особлива логіка), пишемо кастомний payment gateway.

Структура WooCommerce Payment Gateway

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 для согласованості
        $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');
    }
}

// Реєстрація gateway
add_filter('woocommerce_payment_gateways', function($gateways) {
    $gateways[] = 'WC_Crypto_Gateway';
    return $gateways;
});

Реєстрація плагіна

// 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';
});

Обробка edge cases

Курсова різниця: між створенням замовлення і оплатою проходить 10–20 хвилин. За цей час курс може змінитись. Рішення: фіксуємо крипто-суму в момент створення замовлення, встановлюємо час життя заявки (15–20 хвилин), після істечення пересчитуємо за поточним курсом.

Часткова оплата: користувач відправив менше чим потрібно. Статус on-hold, ручна обробка менеджером. Альтернатива — тримаємо кошти і пропонуємо доплатити.

Двійна обробка webhook: webhook може прийти двічі. Перевіряємо _crypto_payment_id перед змінюванням статусу — якщо замовлення вже completed, не міняємо.

Тестування

Обов'язково тестуємо в sandbox режимі з реальними сценаріями:

  • Успішна оплата повної суми
  • Істечення часу замовлення
  • Недоплата
  • Дублюючий webhook

WooCommerce має зручний інструмент — WC_Logger:

$logger = wc_get_logger()
$logger->debug('Webhook received', ['source' => 'crypto-gateway', 'data' => $data])

Логи доступні в WooCommerce → Status → Logs.

Що входить в роботу

  • Вибір і настройка платіжного провайдера або розробка кастомного gateway
  • Реалізація WooCommerce payment gateway класу
  • Webhook обробник з верифікацією підпису
  • Обробка всіх статусів замовлення і edge cases
  • Тестування в sandbox оточенні