WooCommerce: как автоматически отключать платёжные системы по геолокации клиента

Диагностика проблемы: зачем отключать платёжные системы по геолокации

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

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

Как определить геолокацию клиента в WooCommerce

WooCommerce имеет встроенную функцию геолокации — WC_Geolocation::geolocate_ip(), которая возвращает данные о стране и регионе клиента по IP-адресу.

use Automattic\WooCommerce\Internal\Packages\Framework\Geolocation\WC_Geolocation;

$location = WC_Geolocation::geolocate_ip();
$country_code = $location['country']; // например, 'RU'

Данный метод достаточно точен для базовых задач и не требует сторонних сервисов.

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

Для примера отключим платёжную систему «Cheque» (наличный расчёт) для пользователей из России и Беларуси.

add_filter('woocommerce_available_payment_gateways', 'disable_payment_gateways_by_geolocation');
function disable_payment_gateways_by_geolocation($available_gateways) {
    if (is_admin()) return $available_gateways; // Отключаем в админке

    $location = WC_Geolocation::geolocate_ip();
    $country = $location['country'];

    // Список стран, для которых отключаем платеж
    $blocked_countries = array('RU', 'BY');

    // Список платёжных систем для отключения
    $gateways_to_disable = array('cheque');

    if (in_array($country, $blocked_countries)) {
        foreach ($gateways_to_disable as $gateway_id) {
            if (isset($available_gateways[$gateway_id])) {
                unset($available_gateways[$gateway_id]);
            }
        }
    }

    return $available_gateways;
}

Объяснение кода

  • Фильтр woocommerce_available_payment_gateways позволяет изменить список доступных платёжных методов.
  • Мы получаем IP и определяем страну клиента через WC_Geolocation::geolocate_ip().
  • Если страна входит в список заблокированных, то удаляем указанные платёжные методы из массива доступных.

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

  1. Подключитесь к сайту через VPN с IP из России или Беларуси.
  2. Перейдите к оформлению заказа и проверьте список платёжных методов — «Cheque» должен отсутствовать.
  3. Подключитесь с IP из другой страны — метод должен отображаться.
  4. Для проверки можно использовать сервисы определения IP и VPN.

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

  • Платёжный метод не отключается — проверьте правильность ID платёжного метода. Получить список можно так:
    add_action('woocommerce_available_payment_gateways', function($gateways) {
        error_log(print_r(array_keys($gateways), true));
        return $gateways;
    });
    
    Посмотрите логи PHP и убедитесь, что используете правильный ID.
  • Геолокация не срабатывает или всегда возвращает одну страну — проверьте в настройках WooCommerce, что геолокация включена (WooCommerce > Настройки > Общие > Определение местоположения). Возможна проблема с кэшем.
  • Функция отключения работает в админке — добавьте проверку is_admin(), чтобы не мешать работе администратора.

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

  • Геолокация по IP не всегда точна. Для критичных сценариев используйте платные API (например, MaxMind GeoIP2).
  • Не храните результаты геолокации в сессии без шифрования — это может привести к ошибкам при смене IP в прокси или VPN.
  • Кэширование страниц с блокировками по геолокации может привести к тому, что пользователи увидят неправильные платёжные методы. Используйте исключения для страниц оформления заказа.
  • Обновляйте список стран и платёжных методов централизованно, чтобы проще масштабировать решение.

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

МетодПлюсыМинусы
Код на PHP с использованием woocommerce_available_payment_gatewaysГибко, без сторонних плагинов, точечное управлениеТребует знаний PHP, возможны ошибки при неправильной реализации
Плагины геолокации и управления оплатойПростота настройки, часто есть GUIДополнительные расходы, нагрузка на сайт, ограниченная кастомизация
Использование платных геолокационных APIВысокая точность определенияСтоимость, необходимость интеграции

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

⭐⭐⭐⭐⭐
WooCommerce: автоматическое удаление закрытых, возвращенных и отмененных заказов
05.07.2026
WooCommerce: автоматическое удаление неактивных заказов по статусу и дате
12.06.2026
Как отладить проблемы в загрузке скриптов WordPress: практическое руководство
13.12.2025
Как создать мультирегиональный сайт на WordPress с автоматическим переводом
06.03.2026
Как удалить кэш AJAX в WordPress: практическое руководство
19.03.2026
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙