Как устроен лицензионный сервер для WordPress плагинов

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

Как установить ограничение на количество активаций лицензии WordPress плагинов по ролям пользователей
12.04.2026
Как создать собственный лицензионный сервер для WordPress плагинов
25.02.2026
Решение проблем с активацией лицензий WooCommerce после смены домена
21.05.2026
Как сделать очистку базы данных от устаревших лицензий WordPress плагинов
02.04.2026
Решение проблем с активацией лицензий WordPress при использовании разных средств кеширования
13.06.2026