Для разработчиков WordPress плагинов, которые предлагают платные продукты с лицензиями, очень важно реализовать механизм автоматического отзыва лицензий по истечении срока действия. Это позволяет управлять активациями, защищать авторские права и поддерживать честную модель распространения.
Почему автоматический отзыв лицензий по срокам важен
Ручное управление лицензиями неудобно и часто приводит к ошибкам: просроченные лицензии остаются активными, пользователи продолжают пользоваться продуктом без оплаты, а разработчики теряют доходы. Автоматизация процесса позволяет точно контролировать статус лицензий и своевременно блокировать доступ к плагинам или обновлениям.
Кроме того, автоматический отзыв по срокам повышает доверие со стороны клиентов, ведь они получают четкие уведомления и понимают условия использования продукта.
Основные подходы к реализации отзыва лицензии
Существует несколько способов реализовать автоматический отзыв лицензий в WordPress плагинах:
- Проверка срока действия при каждом запросе плагина к серверу лицензий.
- Автоматическое удаление или деактивация лицензии по cron-задаче.
- Ограничение доступа к функциям плагина через локальную проверку срока лицензии.
Чаще всего используют комбинацию серверной проверки и локальной логики в плагине для максимальной надежности.
Пример cron-задачи для отзыва лицензий
Создадим функцию wplicense_check_expired_licenses, которая будет запускаться ежедневно и отзывать просроченные лицензии.
function wplicense_check_expired_licenses() {
global $wpdb;
$today = current_time('Y-m-d');
$table = $wpdb->prefix . 'wplicenses';
// Получаем все лицензии с истекшим сроком
$expired = $wpdb->get_results($wpdb->prepare(
"SELECT id FROM $table WHERE expiry_date < %s AND status = 'active'",
$today
));
if ($expired) {
foreach ($expired as $license) {
// Обновляем статус лицензии на 'revoked'
$wpdb->update($table, ['status' => 'revoked'], ['id' => $license->id]);
}
}
}
// Регистрируем cron событие
if (!wp_next_scheduled('wplicense_daily_expiry_check')) {
wp_schedule_event(time(), 'daily', 'wplicense_daily_expiry_check');
}
add_action('wplicense_daily_expiry_check', 'wplicense_check_expired_licenses');Этот код проверяет таблицу с лицензиями, которых срок действия истек, и меняет их статус на "revoked". Можно дополнительно уведомлять пользователей по email о деактивации.
Проверка лицензии в плагине с учетом статуса и срока
Чтобы плагин корректно реагировал на отзыв лицензии, нужно реализовать функцию проверки, которая учитывает статус и дату окончания лицензии.
function wplicense_validate_license($license_key) {
$response = wp_remote_post('https://example.com/api/check_license', [
'body' => [
'license_key' => $license_key
]
]);
if (is_wp_error($response)) {
return false; // Ошибка связи с сервером
}
$data = json_decode(wp_remote_retrieve_body($response));
if ($data->status !== 'active') {
return false; // Лицензия отозвана или неактивна
}
$expiry = strtotime($data->expiry_date);
if ($expiry < time()) {
return false; // Лицензия истекла
}
return true; // Лицензия валидна
}Эту функцию можно интегрировать в загрузчик плагина, блокируя работу при невалидной лицензии.
Дополнительные инструменты для управления лицензиями
Для упрощения работы с лицензиями рекомендуем использовать специализированные плагины и сервисы:
- Clearfy Pro – плагин для оптимизации и защиты WordPress, включает инструменты по управлению лицензиями.
- Expert Review – поможет автоматизировать сбор отзывов и анализировать использование лицензий.
Также стоит рассмотреть интеграцию с REST API для более гибкой работы с лицензиями и уведомлениями.
Рекомендации по безопасности при отзыве лицензий
При реализации автоматического отзыва лицензий важно обеспечить безопасность передачи данных и предотвращение обхода проверки со стороны клиентов.
Используйте HTTPS для всех запросов к серверу лицензий, шифруйте ключи и данные, применяйте nonce и проверку прав пользователей в админке. Локально не храните открытые ключи и проверяйте лицензии как можно чаще.
Контроль частоты проверок и кеширование
Частые запросы к серверу лицензий могут нагрузить сервер и замедлить работу плагина. Организуйте кеширование результатов проверки, например, на 1 час, чтобы снизить нагрузку.
function wplicense_check_license_cached($license_key) {
$cache_key = 'wplicense_license_' . md5($license_key);
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$valid = wplicense_validate_license($license_key);
set_transient($cache_key, $valid, HOUR_IN_SECONDS);
return $valid;
}Так вы уменьшите количество обращений к серверу, сохраняя при этом актуальность данных.