Введение в автоматическую проверку лицензий через 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, которые помогут автоматизировать и упростить многие процессы.