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

Диагностика проблемы с оплатой при нестабильном интернет-соединении

Проблемы с интернет-соединением могут приводить к ошибкам при оплате в WooCommerce, особенно если выбранные способы оплаты требуют онлайн-подключения к платежным системам. Клиенты сталкиваются с неудачными попытками оплаты, что ухудшает UX и увеличивает количество отменённых заказов.

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

Определяем, какие способы оплаты отключать

Чаще всего это онлайн-оплаты через API (например, PayPal, Stripe, Яндекс.Касса). Оплата при доставке (наложенный платеж) и банковский перевод работают автономно.

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

1. Проверка доступности сторонних сервисов

Для проверки можно использовать wp_remote_get() или wp_remote_head() с таймаутом 3 секунды. Если запрос неудачный — считаем, что интернет-соединение нестабильно.

function check_payment_gateway_connection( $url ) {
    $response = wp_remote_head( $url, array( 'timeout' => 3 ) );
    if ( is_wp_error( $response ) ) {
        return false;
    }
    $status_code = wp_remote_retrieve_response_code( $response );
    return ( $status_code >= 200 && $status_code < 300 );
}

2. Отключение способов оплаты через хук woocommerce_available_payment_gateways

В этом хук добавим проверку соединения и исключим нужные способы оплаты.

add_filter( 'woocommerce_available_payment_gateways', 'disable_online_payment_gateways_on_connection_fail' );
function disable_online_payment_gateways_on_connection_fail( $gateways ) {
    // URL для проверки, например API платежной системы
    $paypal_api_url = 'https://api.paypal.com';

    if ( ! check_payment_gateway_connection( $paypal_api_url ) ) {
        // Отключаем PayPal
        if ( isset( $gateways['paypal'] ) ) {
            unset( $gateways['paypal'] );
        }
        // Отключаем Stripe
        if ( isset( $gateways['stripe'] ) ) {
            unset( $gateways['stripe'] );
        }
        // Добавьте другие онлайн-способы оплаты по необходимости
    }

    return $gateways;
}

3. Кеширование результата проверки

Чтобы не делать запросы каждый раз при обновлении страницы, кешируем результат проверки в транзиенте на 5 минут.

function check_payment_gateway_connection_cached( $url ) {
    $transient_key = 'pg_connection_' . md5( $url );
    $cached = get_transient( $transient_key );
    if ( $cached !== false ) {
        return $cached;
    }

    $result = check_payment_gateway_connection( $url );
    set_transient( $transient_key, $result, 5 * MINUTE_IN_SECONDS );
    return $result;
}

add_filter( 'woocommerce_available_payment_gateways', 'disable_online_payment_gateways_on_connection_fail' );
function disable_online_payment_gateways_on_connection_fail( $gateways ) {
    $paypal_api_url = 'https://api.paypal.com';

    if ( ! check_payment_gateway_connection_cached( $paypal_api_url ) ) {
        if ( isset( $gateways['paypal'] ) ) {
            unset( $gateways['paypal'] );
        }
        if ( isset( $gateways['stripe'] ) ) {
            unset( $gateways['stripe'] );
        }
    }

    return $gateways;
}

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

  • Отключите интернет или заблокируйте доступ к API платежных систем (например, через hosts-файл или firewall).
  • Перейдите к оформлению заказа и проверьте, что онлайн-способы оплаты отсутствуют в списке.
  • Восстановите соединение и обновите страницу — способы оплаты должны появиться обратно.
  • Проверьте логи ошибок сервера на наличие запросов и отсутствия фатальных ошибок.

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

  • Проблема с таймаутом wp_remote_head — может блокировать загрузку страницы. Установите короткий таймаут (2-3 секунды) и кешируйте результаты.
  • Неправильные ID способов оплаты — убедитесь, что используете правильные ключи из $gateways. Используйте отладку через error_log(print_r(array_keys($gateways), true));.
  • Проблемы с кешированием — если транзиенты не работают, проверьте, включено ли кеширование на сервере и права записи.

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

  • Используйте кеширование результата проверки, чтобы минимизировать нагрузку на сервер и снизить задержки загрузки страницы.
  • Добавьте фоновые задачи для мониторинга доступности платежных сервисов и уведомления админа о проблемах (через WP-Cron или внешние мониторинги).
  • Для критичных интернет-соединений рассмотрите возможность показа пользователю подсказок или альтернативных способов оплаты (например, оффлайн-оплата).
  • Проверяйте и обновляйте список URL для проверки при смене платежных систем или их API.

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

МетодПлюсыМинусыКомпромисс
Отключение через хук woocommerce_available_payment_gateways с wp_remote_headПростота, гибкость, можно отключать выборочноЗадержка загрузки страницы при проверкеКеширование результатов
Проверка соединения через WP-Cron и база данныхОтсутствие задержек для пользователяСложнее реализовать, нужно синхронизировать кэшИспользовать транзиенты и уведомления
Использование специальных плагинов мониторинга платежейГотовые решения, мониторинг в реальном времениДоп. нагрузка и стоимостьПодходит для крупных проектов
Как настроить удалённый запуск задач в WordPress с помощью WP-Cron
20.01.2026
Как удалить старые мета-данные в WordPress: практическое руководство
12.03.2026
WooCommerce: автоматическое изменение стоимости товаров при определённых условиях
26.05.2026
Как удалить пустые метаданные в WordPress для оптимизации базы данных
06.03.2026
Как добавить автоматический гео-таргетинг в WordPress
12.01.2026