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

Для разработчиков WordPress плагинов, которые хотят полностью контролировать процесс лицензирования и активации своих продуктов, создание собственного лицензионного сервера — оптимальное решение. Это позволяет гибко управлять лицензиями, ограничениями, обновлениями и защитой от пиратства без зависимости от сторонних сервисов.

Основные задачи лицензионного сервера WordPress плагинов

Лицензионный сервер отвечает за несколько ключевых функций:

  • Регистрацию новых лицензий и их активацию на сайтах клиентов;
  • Проверку валидности лицензий при каждом запуске плагина;
  • Ограничение количества активаций лицензии (по доменам, IP или пользователям);
  • Обеспечение возможности отзыва лицензии или приостановки;
  • Интеграцию с механизмом обновления плагина (обновления доступны только по активной лицензии).

Реализовать все это можно с помощью REST API на стороне сервера, а в плагине реализовать клиентскую часть для взаимодействия с API.

Создание REST API для лицензионного сервера на PHP

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

<?php
// Простая реализация лицензионного сервера для WordPress плагинов
// Файл license-server.php

// Функция генерации уникальной лицензии
function wplicense_generate_license_key() {
    return strtoupper(bin2hex(random_bytes(10)));
}

// Заглушка для базы лицензий
$licenses = [];

// Обработка запросов
$request = $_SERVER['REQUEST_METHOD'];
$action = $_GET['action'] ?? '';

header('Content-Type: application/json');

if ($request === 'POST' && $action === 'register') {
    $data = json_decode(file_get_contents('php://input'), true);
    $email = $data['email'] ?? '';
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo json_encode(['success' => false, 'message' => 'Неверный email']);
        exit;
    }
    $license_key = wplicense_generate_license_key();
    $licenses[$license_key] = ['email' => $email, 'active' => true, 'activations' => 0];
    echo json_encode(['success' => true, 'license_key' => $license_key]);
} elseif ($request === 'POST' && $action === 'check') {
    $data = json_decode(file_get_contents('php://input'), true);
    $license_key = $data['license_key'] ?? '';
    if (isset($licenses[$license_key]) && $licenses[$license_key]['active']) {
        echo json_encode(['success' => true, 'valid' => true]);
    } else {
        echo json_encode(['success' => false, 'valid' => false]);
    }
} elseif ($request === 'POST' && $action === 'revoke') {
    $data = json_decode(file_get_contents('php://input'), true);
    $license_key = $data['license_key'] ?? '';
    if (isset($licenses[$license_key])) {
        $licenses[$license_key]['active'] = false;
        echo json_encode(['success' => true, 'message' => 'Лицензия отозвана']);
    } else {
        echo json_encode(['success' => false, 'message' => 'Лицензия не найдена']);
    }
} else {
    echo json_encode(['success' => false, 'message' => 'Неверный запрос']);
}
?>

Это минимальный каркас, который можно расширять, добавляя проверку ограничений, хранение в базе MySQL, логирование и другие функции.

Встраивание проверки лицензии в WordPress плагин

Теперь реализуем функции для клиента плагина, которые будут обращаться к нашему лицензионному серверу. Ниже пример функции проверки лицензии с кэшированием результата для уменьшения количества запросов:

function wplicense_check_license_key($license_key) {
    $cache_key = 'wplicense_license_check_' . md5($license_key);
    $cached = get_transient($cache_key);
    if ($cached !== false) {
        return $cached;
    }
    $response = wp_remote_post('https://your-license-server.ru/license-server.php?action=check', [
        'body' => json_encode(['license_key' => $license_key]),
        'headers' => [
            'Content-Type' => 'application/json'
        ]
    ]);
    if (is_wp_error($response)) {
        return false;
    }
    $body = json_decode(wp_remote_retrieve_body($response), true);
    if (!empty($body['valid'])) {
        set_transient($cache_key, true, 12 * HOUR_IN_SECONDS);
        return true;
    }
    set_transient($cache_key, false, 12 * HOUR_IN_SECONDS);
    return false;
}

Используйте эту функцию в ключевых местах плагина — например, при инициализации, чтобы ограничить функциональность при невалидной лицензии.

Ограничение количества активаций и привязка к домену

Для предотвращения распространения лицензии на множество сайтов, можно добавить в лицензионный сервер привязку к домену при активации. Примерно так:

  • При активации плагина клиент отправляет доменное имя;
  • На сервере проверяется, что количество активаций не превышено;
  • Если всё в порядке, домен сохраняется в базе для этой лицензии;
  • При последующих проверках лицензии сверяется текущий домен с разрешённым.

Вот пример запроса на регистрацию активации с доменом:

$response = wp_remote_post('https://your-license-server.ru/license-server.php?action=activate', [
    'body' => json_encode([
        'license_key' => $license_key,
        'domain' => $_SERVER['SERVER_NAME']
    ]),
    'headers' => [
        'Content-Type' => 'application/json'
    ]
]);

На стороне сервера нужно реализовать логику проверки и сохранения доменов, а также ограничение по количеству активаций.

Пример хранения ограничений в базе данных

Для полноценного решения используйте MySQL таблицу с полями:

  • license_key (varchar)
  • email (varchar)
  • active (bool)
  • max_activations (int)
  • domains (json или отдельная таблица)
  • created_at, updated_at (timestamp)

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

Рекомендуемые плагины для управления лицензиями и безопасности

Если не хотите писать всё с нуля, можно использовать готовые решения и расширять их:

  • Clearfy Pro — для оптимизации и защиты сайта, в том числе от нежелательных запросов;
  • Expert Review — для управления отзывами и обратной связью, можно интегрировать с системой лицензий;
  • WP REST API — встроенный в WordPress механизм для создания собственных REST API маршрутов, который можно использовать для создания серверной части лицензий, если лицензионный сервер тоже на WordPress.

Заключение

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

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