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

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

Зачем нужен автоматический отзыв лицензии

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

  • Защитить авторские права и монетизировать продукт
  • Минимизировать риск использования устаревших или пиратских версий
  • Автоматизировать процессы поддержки и контроля пользователей

Реализовать такую систему можно несколькими способами, в зависимости от архитектуры вашей системы лицензирования.

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

1. Проверка лицензии при каждом обновлении плагина

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

Пример функции для проверки статуса лицензии на сервере (с префиксом wplicense_):

function wplicense_check_license_status($license_key) {
    $response = wp_remote_post('https://wplicense.ru/api/check_license', [
        'body' => [
            'license_key' => $license_key
        ]
    ]);
    if (is_wp_error($response)) {
        return false; // Ошибка подключения
    }
    $data = json_decode(wp_remote_retrieve_body($response), true);
    return isset($data['status']) && $data['status'] === 'active';
}

Эту функцию вызывают в хук обновления плагина, чтобы разрешить или запретить обновление.

2. Регулярная проверка лицензии через cron

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

Для этого регистрируем cron задачу:

function wplicense_schedule_license_check() {
    if (!wp_next_scheduled('wplicense_daily_license_check')) {
        wp_schedule_event(time(), 'daily', 'wplicense_daily_license_check');
    }
}
add_action('wp', 'wplicense_schedule_license_check');

function wplicense_check_license_cron() {
    $license_key = get_option('wplicense_license_key');
    if (!$license_key || !wplicense_check_license_status($license_key)) {
        update_option('wplicense_license_status', 'revoked');
        // Можно добавить деактивацию функционала плагина
    } else {
        update_option('wplicense_license_status', 'active');
    }
}
add_action('wplicense_daily_license_check', 'wplicense_check_license_cron');

3. Отзыв лицензии по событию с сервера (webhook)

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

Пример приема webhook-запроса:

function wplicense_handle_license_revoke() {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        status_header(405);
        exit;
    }
    $input = json_decode(file_get_contents('php://input'), true);
    if (empty($input['license_key'])) {
        status_header(400);
        exit;
    }
    $current_license = get_option('wplicense_license_key');
    if ($input['license_key'] === $current_license) {
        update_option('wplicense_license_status', 'revoked');
        // Можно добавить деактивацию плагина
    }
    status_header(200);
    exit;
}
add_action('rest_api_init', function () {
    register_rest_route('wplicense/v1', '/revoke', [
        'methods' => 'POST',
        'callback' => 'wplicense_handle_license_revoke',
        'permission_callback' => '__return_true',
    ]);
});

Реализация деактивации функционала после отзыва лицензии

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

  • Блокировка обновлений
  • Отключение премиум-функций
  • Вывод сообщения в админке

Пример условной проверки в функциях плагина:

function wplicense_is_license_active() {
    return get_option('wplicense_license_status') === 'active';
}

function wplicense_some_premium_feature() {
    if (!wplicense_is_license_active()) {
        return; // Отключаем функцию
    }
    // Основной код премиум-функции
}

Использование плагина Clearfy Pro для управления лицензиями

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

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

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

  • Обязательно защищайте API ключи и сервер лицензирования от несанкционированного доступа
  • Используйте HTTPS для всех запросов
  • Проверяйте подлинность приходящих webhook-запросов (например, по подписи или токену)
  • Логируйте случаи отзыва лицензии для анализа и поддержки

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

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