Как создать автоматическую проверку лицензии 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 плагина по стране
18.03.2026
Как создать собственную систему активации лицензий для WordPress плагинов
11.12.2025
Решение проблем с активацией лицензий WordPress плагинов при использовании разных средств кеширования
01.07.2026
Решение проблем с автообновлениями WooCommerce плагинов при активации лицензий
10.06.2026