В этой статье разберём, как с технической стороны устроен лицензионный сервер, который используется для проверки и управления лицензиями WordPress плагинов. Такая система жизненно необходима, если вы продаёте или распространяете платные плагины и хотите контролировать их использование.
Что такое лицензионный сервер и зачем он нужен
Лицензионный сервер — это веб-сервис, который проверяет ключи лицензий, выдаёт ответы плагинам и управляет ограничениями (например, количеством активаций или сроком действия). Основная задача — защитить продукт от пиратства и обеспечить честное использование.
Без лицензионного сервера плагин не сможет автоматически проверить, легальна ли его копия, и не сможет получать обновления или дополнительные функции, доступные только по лицензии.
Реализация лицензионного сервера может быть разной: от простого PHP-скрипта до полноценного REST API с базой данных и административной панелью.
Основные компоненты лицензионного сервера
1. База данных — хранит информацию о лицензиях, пользователях, статусах и ограничениях.
2. API для проверки лицензий — это точки входа, куда плагин отправляет ключ и получает ответ.
3. Админ-панель — интерфейс для управления лицензиями, просмотра статистики и ручного изменения статусов.
Пример структуры базы лицензий
Часто используется таблица с полями:
- license_key — строка с уникальным ключом
- user_email — почта покупателя
- status — активна, заблокирована, истекла
- activations_count — число активных установок
- max_activations — максимально разрешённое число активаций
- expiration_date — дата окончания действия лицензии
Пример простого лицензионного API на PHP
Ниже пример базового REST API с проверкой ключа и ограничения по активациям:
<?php
// license-server.php
header('Content-Type: application/json');
// Имитация базы данных лицензий
$licenses = [
'ABC123' => ['status' => 'active', 'activations' => 2, 'max_activations' => 3, 'expiration' => '2025-12-31'],
'XYZ789' => ['status' => 'expired', 'activations' => 1, 'max_activations' => 1, 'expiration' => '2022-01-01'],
];
$key = $_GET['key'] ?? '';
$action = $_GET['action'] ?? 'check';
if (!isset($licenses[$key])) {
echo json_encode(['success' => false, 'message' => 'Invalid license key']);
exit;
}
$license = $licenses[$key];
// Проверка срока действия
if (strtotime($license['expiration']) < time()) {
echo json_encode(['success' => false, 'message' => 'License expired']);
exit;
}
switch ($action) {
case 'check':
if ($license['status'] !== 'active') {
echo json_encode(['success' => false, 'message' => 'License not active']);
exit;
}
echo json_encode(['success' => true, 'message' => 'License valid']);
break;
case 'activate':
if ($license['activations'] >= $license['max_activations']) {
echo json_encode(['success' => false, 'message' => 'Activation limit reached']);
exit;
}
$licenses[$key]['activations']++;
echo json_encode(['success' => true, 'message' => 'License activated']);
break;
case 'deactivate':
if ($license['activations'] > 0) {
$licenses[$key]['activations']--;
echo json_encode(['success' => true, 'message' => 'License deactivated']);
} else {
echo json_encode(['success' => false, 'message' => 'No active activations']);
}
break;
default:
echo json_encode(['success' => false, 'message' => 'Unknown action']);
break;
}
?>
Это очень упрощённый пример, в реальном проекте данные хранятся в базе MySQL, а изменения записываются с помощью SQL-запросов.
Как плагин WordPress взаимодействует с лицензионным сервером
Плагин должен отправлять запросы на сервер и обрабатывать ответы. Например, проверять лицензию при активации плагина и периодически — при обновлениях.
Пример функции для проверки лицензии в плагине wplicense
function wplicense_check_license($license_key) {
$url = 'https://your-license-server.ru/license-server.php?key=' . urlencode($license_key) . '&action=check';
$response = wp_remote_get($url);
if (is_wp_error($response)) {
return false;
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if ($data && $data['success']) {
return true;
}
return false;
}
Эту функцию можно вызвать при инициализации плагина или перед выполнением защищённых функций.
Реальные плагины для управления лицензиями
Если не хочется делать всё с нуля, можно использовать готовые решения. Например:
- Clearfy Pro — содержит функции для защиты и оптимизации, включая лицензирование;
- Expert Review — с возможностью интеграции системы лицензирования;
- WooCommerce Software Add-on — расширение для WooCommerce для продажи лицензий и управления ими.
Эти решения дают удобный интерфейс и API для интеграции с вашим продуктом.
Советы по безопасности лицензионного сервера
Важно защитить лицензионный сервер от взлома и подделки ответов:
- Используйте HTTPS для всех запросов.
- Применяйте цифровые подписи или токены для подтверждения подлинности запросов и ответов.
- Ограничивайте количество запросов с одного IP (rate limiting).
- Логируйте все обращения и анализируйте аномалии.
- Используйте сложные и уникальные ключи лицензий, чтобы их сложно было подобрать.
Заключение
Создание собственного лицензионного сервера — задача, требующая технических навыков, но она даёт полный контроль над распространением и защитой плагина. Даже базовое REST API с проверкой ключей и ограничением активаций значительно повысит безопасность вашего продукта.
Для упрощения можно использовать готовые решения, такие как WPShop, которые предоставляют инструменты для лицензирования и защиты.