Как создать автоматическую проверку лицензии WordPress плагинов с помощью REST API

Введение в автоматическую проверку лицензий через REST API

Автоматическая проверка лицензий плагинов — важный элемент защиты интеллектуальной собственности и контроля легальности использования. Использование REST API для проверки лицензий позволяет реализовать гибкую, масштабируемую и безопасную систему, которая может работать как по запросу с клиента, так и с сервера. В этой статье мы рассмотрим, как создать такую систему с нуля, используя возможности WordPress REST API и PHP.

В отличие от статических методов проверки лицензий, REST API предоставляет возможность получать актуальный статус лицензии в реальном времени, а также легко интегрироваться с внешними сервисами и админ-панелью.

Создание REST API эндпоинта для проверки лицензий

Регистрация кастомного REST API маршрута

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

add_action('rest_api_init', function() {
    register_rest_route('wplicense/v1', '/check-license', array(
        'methods' => 'POST',
        'callback' => 'wplicense_check_license_callback',
        'permission_callback' => '__return_true'
    ));
});

Здесь мы создаём маршрут /wp-json/wplicense/v1/check-license, который принимает POST-запросы. Параметр permission_callback временно разрешает доступ всем, но в реальной системе лучше добавить проверку авторизации.

Обработка запроса и проверка лицензии

Теперь реализуем функцию обратного вызова wplicense_check_license_callback, которая будет принимать данные и проверять лицензию:

function wplicense_check_license_callback(WP_REST_Request $request) {
    $license_key = sanitize_text_field($request->get_param('license_key'));

    if (empty($license_key)) {
        return new WP_REST_Response(['error' => 'License key is required'], 400);
    }

    // Здесь подключаем вашу логику проверки лицензии
    $is_valid = wplicense_validate_license_key($license_key);

    if ($is_valid) {
        return ['status' => 'valid'];
    } else {
        return ['status' => 'invalid'];
    }
}

Функция получает лицензионный ключ из тела POST-запроса, очищает его и вызывает функцию проверки. В зависимости от результата возвращается JSON с текущим статусом лицензии.

Реализация функции проверки лицензии

Давайте создадим пример функции wplicense_validate_license_key, которая имитирует проверку ключа в базе данных:

function wplicense_validate_license_key($key) {
    // В реальной системе здесь запрос к БД или внешнему сервису
    $valid_keys = [
        'ABC123-XYZ789',
        'DEF456-UVW345'
    ];

    return in_array($key, $valid_keys, true);
}

В продакшене этот метод можно расширить для проверки срока действия, количества активаций, IP-адресов и других параметров.

Клиентская часть: как плагин вызывает проверку лицензии

Пример запроса к REST API из WordPress плагина

Для проверки лицензии из плагина используйте функцию wp_remote_post:

$response = wp_remote_post('https://your-domain.ru/wp-json/wplicense/v1/check-license', [
    'body' => [
        'license_key' => $license_key
    ]
]);

if (is_wp_error($response)) {
    // Обработка ошибки
    return false;
}

$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);

if (!empty($data['status']) && $data['status'] === 'valid') {
    // Лицензия валидна
    return true;
} else {
    // Неверная лицензия
    return false;
}

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

Безопасность и улучшения проверки лицензий

Авторизация и ограничения доступа

Для защиты REST API эндпоинта лицензий стоит добавить аутентификацию. Например, использовать nonce, OAuth или JWT токены, чтобы защищать API от несанкционированного доступа и злоупотреблений.

Также можно внедрить ограничение по IP, частоте запросов и логировать все обращения для последующего анализа.

Автоматическое обновление статуса лицензии

Для повышения удобства пользователей реализуйте фоновые проверки лицензии с использованием WP Cron или JavaScript таймеров, чтобы обновлять статус без вмешательства пользователя.

Можно интегрировать с плагином Clearfy Pro для оптимизации производительности и безопасности при работе с REST API.

Пример расширенной проверки с учетом срока действия и IP

Добавим в функцию проверки лицензии дополнительные параметры:

function wplicense_validate_license_key($key) {
    // Пример записи из базы
    $licenses = [
        'ABC123-XYZ789' => [
            'expires' => strtotime('2024-12-31'),
            'allowed_ips' => ['192.168.1.10', '203.0.113.5']
        ],
        'DEF456-UVW345' => [
            'expires' => strtotime('2023-06-30'),
            'allowed_ips' => [] // без ограничений
        ]
    ];

    if (!isset($licenses[$key])) {
        return false;
    }

    $license = $licenses[$key];
    if ($license['expires'] < time()) {
        return false; // лицензия истекла
    }

    $client_ip = $_SERVER['REMOTE_ADDR'] ?? '';
    if (!empty($license['allowed_ips']) && !in_array($client_ip, $license['allowed_ips'], true)) {
        return false; // IP не разрешен
    }

    return true;
}

Такой подход позволяет более детально контролировать использование лицензий и предотвратить их несанкционированное применение.

Заключение по созданию REST API проверки лицензий

Создание автоматической проверки лицензий через REST API — это эффективный способ повысить безопасность и удобство управления лицензиями WordPress плагинов. Мы рассмотрели базовую реализацию, а также примеры расширений с учетом дополнительных параметров и безопасности.

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

Как установить ограничение на лицензию WordPress плагина по геолокации
20.04.2026
Как отладить проблемы с активацией лицензий в WordPress плагинах
30.12.2025
Как сделать автоматический отзыв лицензии в WordPress плагине
14.12.2025
Как удалить старые лицензии WordPress плагинов из базы данных
18.03.2026
Автоматический отзыв лицензий WordPress плагинов по срокам
12.01.2026