В процессе разработки и поддержки коммерческих 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-запросов (например, по подписи или токену)
- Логируйте случаи отзыва лицензии для анализа и поддержки
Таким образом, автоматический отзыв лицензии — это мощный инструмент контроля и защиты вашего продукта, который при правильной реализации значительно облегчает управление пользователями и снижает риски.