WooCommerce: автоматическое отключение неактивных методов оплаты

|

Проблема: неактивные методы оплаты в WooCommerce мешают покупателям

В интернет-магазине на WooCommerce иногда остаются включёнными методы оплаты, которые по каким-то причинам перестали работать: например, устарели ключи API, изменились условия работы платежного шлюза или временно недоступен сервис. Это приводит к тому, что покупатели видят нерабочие варианты оплаты, пытаются выбрать их и получают ошибку на этапе оформления заказа.

Ручное выключение таких методов оплаты — временное решение, а регулярная проверка вручную требует времени и может быть забыта.

Диагностика проблемы: как выявить неактивные методы оплаты

Первый шаг — понять, какие методы оплаты «висят» и являются неактивными. Обычно проблемы проявляются так:

Для диагностики можно включить режим отладки WooCommerce и проверить логи ошибок платежных шлюзов в меню WooCommerce > Статус > Логи.

Пример обнаружения ошибки в логах:

[2024-06-10 14:22:33] Gateway error: API key invalid or expired

Пошаговое решение: автоматическое отключение неактивных методов оплаты через проверку API

Реализуем автоматическую проверку доступности методов оплаты и отключение тех, которые не проходят проверку. Рассмотрим пример на основе двух популярных шлюзов: payment_gateway_1 и payment_gateway_2. Для каждого реализуем функцию проверки состояния, которая вызывается при загрузке админки и на фронтенде.

Шаг 1. Добавьте проверочные функции в functions.php вашей темы или в отдельный плагин

function is_payment_gateway_1_active() {
    // Пример проверки API ключа шлюза 1
    $api_key = get_option('payment_gateway_1_api_key');
    if (empty($api_key)) {
        return false;
    }
    $response = wp_remote_get('https://api.gateway1.com/status?key=' . $api_key);
    if (is_wp_error($response)) {
        return false;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);
    return !empty($data['active']) && $data['active'] === true;
}

function is_payment_gateway_2_active() {
    // Пример проверки соединения с платежным шлюзом 2
    $api_token = get_option('payment_gateway_2_token');
    if (!$api_token) {
        return false;
    }
    $response = wp_remote_post('https://api.gateway2.com/check', [
        'body' => json_encode(['token' => $api_token]),
        'headers' => ['Content-Type' => 'application/json'],
        'timeout' => 5,
    ]);
    if (is_wp_error($response)) {
        return false;
    }
    $data = json_decode(wp_remote_retrieve_body($response), true);
    return isset($data['status']) && $data['status'] === 'ok';
}

Шаг 2. Автоматическое отключение методов оплаты на основе проверки

Добавим фильтр woocommerce_available_payment_gateways для отключения неподдерживаемых методов при загрузке страницы оформления заказа.

add_filter('woocommerce_available_payment_gateways', 'disable_inactive_payment_gateways');
function disable_inactive_payment_gateways($available_gateways) {
    if (isset($available_gateways['payment_gateway_1']) && !is_payment_gateway_1_active()) {
        unset($available_gateways['payment_gateway_1']);
    }
    if (isset($available_gateways['payment_gateway_2']) && !is_payment_gateway_2_active()) {
        unset($available_gateways['payment_gateway_2']);
    }
    return $available_gateways;
}

Шаг 3. Отключение методов и в админке WooCommerce

Чтобы не путаться, лучше и в настройках отключать неактивные методы. Для этого можно добавить проверку при загрузке админки и автоматически выключать их:

add_action('admin_init', 'auto_disable_inactive_payment_gateways');
function auto_disable_inactive_payment_gateways() {
    $gateways = WC()->payment_gateways()->payment_gateways();
    $updated = false;
    
    if (isset($gateways['payment_gateway_1']) && !is_payment_gateway_1_active()) {
        update_option('woocommerce_payment_gateway_1_enabled', 'no');
        $updated = true;
    }
    if (isset($gateways['payment_gateway_2']) && !is_payment_gateway_2_active()) {
        update_option('woocommerce_payment_gateway_2_enabled', 'no');
        $updated = true;
    }

    if ($updated) {
        // Очистка кэша методов оплаты
        WC()->payment_gateways()->init_gateway_settings();
    }
}

Проверка результата после внедрения

Частые ошибки и как их исправить

Практические советы по безопасности и производительности

Сравнение вариантов реализации автоматического отключения методов оплаты

ВариантПлюсыМинусы
Кодовое решение с проверками API (как в статье) Полный контроль, адаптация под любые шлюзы, без лишних плагинов Требует поддержки, возможны сложности с API разных платежных систем
Плагины для управления платежами и мониторинга Простота установки, поддержка и обновления разработчиками Могут быть платными, не всегда гибкие, нагрузка на сайт
Ручное отключение в админке Простое и быстрое решение Зависит от человека, риск забыть выключить проблемный метод
Как автоматически обновлять виджеты WordPress без перезагрузки страницы
27.02.2026
Как создать автоматические отчёты в WordPress с помощью Expert Review
15.12.2025
Оптимизация базы данных WordPress: практические советы и примеры кода
19.11.2025
Как создать собственный тип записей в WordPress с примерами кода
23.11.2025
Как избежать проблем с вариациями товаров WooCommerce при массовом импорте
20.04.2026
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре