В современных условиях защиты WordPress плагинов от нелегального использования часто требуется ограничивать активацию лицензий не только по количеству устройств или доменов, но и по географическому признаку — по стране пользователя. Эта мера помогает контролировать распространение продукта, ограничивать регионы с высокой пиратской активностью и соблюдать лицензионные соглашения.
Зачем нужно ограничение лицензий по стране в WordPress плагинах
Ограничение активаций по стране позволяет:
- Предотвратить использование лицензий в регионах, не предназначенных для распространения продукта.
- Снизить риск пиратства в странах с высоким уровнем нелегального копирования.
- Соблюдать юридические и коммерческие условия дистрибуции.
- Анализировать географию использования продукта для маркетинга и поддержки.
Однако важно грамотно реализовать эту функцию, чтобы не навредить легальным пользователям и не вызвать ложных срабатываний.
Основные способы реализации ограничения по стране
Для реализации ограничения по стране при активации лицензии WordPress плагина существует несколько подходов:
- Определение страны по IP адресу клиента. Самый распространённый метод, он основан на использовании геолокационных баз данных.
- Использование сторонних API сервисов геолокации. Позволяет получать точные данные, но требует подключения к внешним сервисам.
- Хранение разрешённых стран в данных лицензии или на лицензионном сервере. Позволяет централизованно управлять ограничениями и обновлять их без обновления плагина.
Комбинируя эти методы, можно добиться надежной защиты с минимальным влиянием на опыт пользователя.
Геолокация по IP с помощью PHP и MaxMind GeoIP2
Один из популярных и бесплатных способов — использовать базу GeoLite2 от MaxMind и библиотеку GeoIP2 для PHP. Рассмотрим, как интегрировать это в лицензионный сервер.
require 'vendor/autoload.php';
use GeoIp2\Database\Reader;
function wplicense_get_country_by_ip($ip) {
$reader = new Reader('/path/to/GeoLite2-Country.mmdb');
try {
$record = $reader->country($ip);
return $record->country->isoCode; // Получаем код страны, например 'RU'
} catch (Exception $e) {
return false; // Не удалось определить страну
}
}
В этой функции указывается путь к базе GeoLite2, и по IP возвращается двухбуквенный код страны. Важно обновлять базу регулярно для точности.
Проверка страны при активации лицензии
Допустим, у нас есть REST API метод для активации лицензии. Добавим проверку страны:
function wplicense_handle_license_activation(\WP_REST_Request $request) {
$license_key = $request->get_param('license_key');
$client_ip = $request->get_header('X-Forwarded-For');
if (!$client_ip) {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
$country_code = wplicense_get_country_by_ip($client_ip);
// Массив разрешённых стран для этой лицензии
$allowed_countries = ['RU', 'BY', 'KZ'];
if (!in_array($country_code, $allowed_countries)) {
return new \WP_REST_Response([
'success' => false,
'message' => 'Активация лицензии из вашей страны не разрешена.'
], 403);
}
// Продолжить стандартную логику активации...
// ...
return new \WP_REST_Response([
'success' => true,
'message' => 'Лицензия успешно активирована.'
]);
}
Такой подход позволяет динамически отклонять активации из стран вне списка.
Использование сторонних API геолокации
Если вы не хотите хранить базу GeoIP локально, можно использовать API, например ipgeolocation.io, ipinfo.io или другие. Пример:
function wplicense_get_country_by_ip_api($ip) {
$api_key = 'ВАШ_API_КЛЮЧ';
$url = "https://api.ipgeolocation.io/ipgeo?apiKey={$api_key}&ip={$ip}";
$response = wp_remote_get($url);
if (is_wp_error($response)) {
return false;
}
$data = json_decode(wp_remote_retrieve_body($response));
return $data->country_code2 ?? false;
}
Этот метод требует сетевого подключения и может замедлить проверку, но часто даёт более свежие данные.
Обработка ошибок и подсказки для пользователей
Очень важно при отказе в активации по стране давать понятные сообщения. Это снижает количество жалоб и поддерживает репутацию продукта. Рекомендуется:
- Указывать, что ограничение связано с лицензированием.
- Советовать связаться с поддержкой, если пользователь считает, что ошибка.
- Логировать попытки активации из запрещённых регионов для анализа.
Интеграция с WPShop и плагинами
Если вы используете плагин WPGPT для автоматизации поддержки или Clearfy Pro для оптимизации и безопасности, можно добавить уведомления или автоматические ответы по этим ограничениям.
Пример добавления уведомления в админке WordPress
function wplicense_admin_notice_country_restriction() {
if (get_transient('wplicense_country_restricted')) {
echo '<div class="notice notice-error is-dismissible"><p>Активация лицензии заблокирована из-за ограничения по стране. Пожалуйста, свяжитесь с поддержкой.</p></div>';
delete_transient('wplicense_country_restricted');
}
}
add_action('admin_notices', 'wplicense_admin_notice_country_restriction');
С помощью таких уведомлений можно улучшить коммуникацию с пользователями.
Заключение
Ограничение активации лицензий WordPress плагинов по стране — эффективный способ повысить контроль над распространением продукта и снизить пиратство. Главное — грамотно реализовать геолокацию, предусмотреть обработку ошибок и уведомления, а также обеспечить гибкость настройки разрешённых регионов. Используйте локальные базы GeoIP или API сервисы, интегрируйте проверку в лицензионный сервер и API, и ваш плагин станет значительно безопаснее.