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

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

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

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

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

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

  • При выборе метода оплаты появляется ошибка при попытке оплаты.
  • В админке 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();
    }
}

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

  • Перейдите на страницу оформления заказа. Неактивные методы оплаты должны отсутствовать в списке.
  • В админке WooCommerce в разделе Настройки > Платежи неактивные методы должны быть отключены (статус «выключено»).
  • Протестируйте на тестовом заказе, что только активные методы доступны для выбора и оплаты проходит без ошибок.
  • Проверьте логи WooCommerce, чтобы убедиться, что ошибки по этим методам больше не появляются.

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

  • Проверочные функции вызывают ошибки или долго выполняются: используйте таймауты в wp_remote_get и wp_remote_post, добавьте кеширование результатов с помощью set_transient, чтобы не нагружать сервер.
  • Отключение не применяется в админке: убедитесь, что используете правильные опции в update_option, их имена можно проверить в базе данных или в исходниках плагина шлюза.
  • Методы оплаты не отображаются даже если они активны: проверьте, чтобы функции проверки возвращали true для рабочих методов, а фильтр woocommerce_available_payment_gateways корректно их не удалял.

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

  • Кэшируйте результаты проверки с помощью set_transient('payment_gateway_1_status', $status, 300), чтобы запросы к внешним API выполнялись не чаще 1 раза в 5 минут.
  • Обрабатывайте ошибки сетевых запросов через is_wp_error() и корректно реагируйте, чтобы не отключать методы из-за временных сбоев.
  • Используйте HTTPS и безопасные токены для взаимодействия с API платежных систем.
  • Ограничьте частоту проверок, например, запускайте проверку только при загрузке страницы оформления заказа и в админке, а не на каждом запросе.

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

ВариантПлюсыМинусы
Кодовое решение с проверками API (как в статье) Полный контроль, адаптация под любые шлюзы, без лишних плагинов Требует поддержки, возможны сложности с API разных платежных систем
Плагины для управления платежами и мониторинга Простота установки, поддержка и обновления разработчиками Могут быть платными, не всегда гибкие, нагрузка на сайт
Ручное отключение в админке Простое и быстрое решение Зависит от человека, риск забыть выключить проблемный метод

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Автоматическое удаление старых комментариев в WordPress: практические решения и примеры кода
18.09.2026
Как сделать многоязычный сайт на WordPress без плагинов
30.09.2026
Как отключить XML-RPC в WordPress без поломки синхронизации и мобильных приложений
02.09.2026
Как избежать проблем с дублированием артикулов (SKU) при массовом импорте товаров в WooCommerce
27.09.2026
Как автоматизировать удаление старых черновиков в WordPress без плагинов
18.09.2026
×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙