Как добавить проверку лицензии в WordPress плагин

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

Зачем нужна проверка лицензии в плагинах WordPress

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

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

Без встроенной проверки лицензии разработчик рискует потерять доход и контроль над распространением продукта.

Основные методы проверки лицензий в WordPress плагинах

Существует несколько подходов к внедрению проверки лицензий:

  • Локальная проверка ключа — сравнение ключа с шаблоном или хэшом, не требующая подключения к серверу. Недостаток — низкая безопасность.
  • Удаленная проверка через API — плагин отправляет запрос на сервер, который валидирует ключ и возвращает результат. Самый популярный и надежный метод.
  • Интеграция с сервисами лицензирования — например, Easy Digital Downloads, WooCommerce Software Add-ons, которые предоставляют готовые решения для лицензирования и обновлений.

В этой статье мы рассмотрим реализацию удаленной проверки через собственный API.

Создаем простой сервер лицензий для проверки ключей

Для начала нам понадобится простой API на PHP, который будет принимать ключ и возвращать статус лицензии.

Пример кода для сервера лицензий:

<?php
// license-server.php
header('Content-Type: application/json');

$licenses = [
    'ABC123-XYZ789' => 'valid',
    'FREE-KEY-0000' => 'expired',
];

$key = $_GET['license_key'] ?? '';

if (array_key_exists($key, $licenses)) {
    echo json_encode(['status' => $licenses[$key]]);
} else {
    echo json_encode(['status' => 'invalid']);
}
?>

Этот скрипт принимает параметр license_key через GET и возвращает JSON с полем status, указывающим состояние лицензии: valid, expired или invalid.

Интеграция проверки лицензии в плагин WordPress

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

В файле основного плагина добавим следующий код:

function wplicense_check_license_status($license_key) {
    $api_url = 'https://wplicense.ru/license-server.php';
    $response = wp_remote_get(add_query_arg('license_key', $license_key, $api_url), ['timeout' => 15]);

    if (is_wp_error($response)) {
        return 'error';
    }

    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);

    if (empty($data['status'])) {
        return 'invalid';
    }

    return $data['status'];
}

Эта функция отправляет GET-запрос с ключом лицензии на сервер и возвращает статус лицензии.

Автоматическая проверка при активации плагина

Чтобы проверять лицензию при активации плагина, добавим хук:

register_activation_hook(__FILE__, 'wplicense_activate_plugin');

function wplicense_activate_plugin() {
    $license_key = get_option('wplicense_license_key');
    if (!$license_key) {
        deactivate_plugins(plugin_basename(__FILE__));
        wp_die('Пожалуйста, введите лицензионный ключ перед активацией.');
    }

    $status = wplicense_check_license_status($license_key);
    if ($status !== 'valid') {
        deactivate_plugins(plugin_basename(__FILE__));
        wp_die('Лицензионный ключ недействителен или просрочен.');
    }
}

Таким образом, плагин не активируется без корректного ключа.

Добавляем форму для ввода лицензии в админке

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

add_action('admin_menu', 'wplicense_add_license_menu');

function wplicense_add_license_menu() {
    add_options_page('Лицензия плагина', 'Лицензия плагина', 'manage_options', 'wplicense-license', 'wplicense_license_page');
}

function wplicense_license_page() {
    if (isset($_POST['wplicense_license_key'])) {
        check_admin_referer('wplicense_license_save', 'wplicense_license_nonce');
        $license_key = sanitize_text_field($_POST['wplicense_license_key']);
        update_option('wplicense_license_key', $license_key);
        echo '<div class="updated">Ключ лицензии сохранен.</div>';
    }

    $license_key = get_option('wplicense_license_key', '');
    echo '<form method="post" action="">';
    wp_nonce_field('wplicense_license_save', 'wplicense_license_nonce');
    echo '<label for="wplicense_license_key">Введите лицензионный ключ:</label><br>';
    echo '<input type="text" name="wplicense_license_key" id="wplicense_license_key" value="' . esc_attr($license_key) . '" size="40" /><br>';
    echo '<input type="submit" value="Сохранить" class="button button-primary" />';
    echo '</form>';
}

Эта страница в меню настроек позволяет пользователю легко управлять своим ключом.

Рекомендации по безопасности и производительности

При реализации проверки лицензий нужно учитывать несколько важных аспектов:

  • Кэширование результата. Чтобы не делать запрос на сервер при каждом действии, стоит кэшировать статус лицензии, например, в transient на 12 часов.
  • Обработка ошибок. В случае недоступности сервера лицензирования плагин может временно разрешать работу или уведомлять пользователя.
  • Шифрование и проверка целостности. Для защиты ключей и данных можно использовать хэширование и SSL.
  • Регулярные обновления. Следите за обновлениями безопасности и меняйте алгоритмы, чтобы предотвратить взлом.

Пример кеширования статуса лицензии

Улучшенная версия функции проверки с кешем:

function wplicense_check_license_status_cached($license_key) {
    $cache_key = 'wplicense_license_status_' . md5($license_key);
    $status = get_transient($cache_key);
    if ($status !== false) {
        return $status;
    }

    $status = wplicense_check_license_status($license_key);
    if ($status !== 'error') {
        set_transient($cache_key, $status, 12 * HOUR_IN_SECONDS);
    }
    return $status;
}

Так мы уменьшаем нагрузку на сервер и ускоряем работу плагина.

Выводы и советы

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

Реализуя собственный сервер лицензирования, вы получаете полный контроль, но при этом берете на себя ответственность за безопасность и стабильность. Для простых плагинов подойдет базовая проверка с удаленным API, как показано в статье.

Если же вы хотите готовое решение с интеграцией обновлений, рассмотрите использование популярных сервисов лицензирования, таких как Easy Digital Downloads или Freemius.

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

Как сделать ограничение активации лицензии WordPress плагина по стране
18.03.2026
Как удалить все посты из WordPress с помощью кода
28.11.2025
Как установить ограничение на количество активаций лицензии WordPress плагинов по ролям пользователей
12.04.2026
Решение проблем с лицензионными ключами WooCommerce плагинов при миграции сайта
31.05.2026
Как сделать автоматический отзыв лицензии в WordPress плагине
14.12.2025