Интеграция криптоплатежей с 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
    885

Интеграция криптоплатежей в 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 для 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');
    }
}

// Регистрация 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 окружении