В управлении лицензиями WordPress плагинов важно не только выдавать их корректно, но и уметь автоматически отзывать при наступлении определённых условий. Например, если пользователь нарушил условия использования, просрочил платеж или нарушена политика лицензирования. В этой статье рассмотрим, как создать систему автоматического отзыва лицензий по различным шаблонам и условиям, используя PHP и возможности WordPress.
Зачем нужен автоматический отзыв лицензий
Ручной отзыв лицензий при большом количестве пользователей становится проблемой. Автоматизация помогает:
- Снизить нагрузку на службу поддержки.
- Своевременно блокировать доступ к плагину для нарушителей.
- Обеспечить гибкую настройку правил отзыва по разным критериям (срок, IP, домен, регион и др.).
- Улучшить безопасность и контроль использования вашего продукта.
Кроме того, автоматизация позволяет интегрировать отзыв с системой отчетности и уведомлений.
Создание шаблонов для условий отзыва лицензий
Основная идея — создать набор шаблонов (правил), которые проверяются на каждую лицензию, и если условие выполняется, лицензия отзывается.
Пример шаблонов:
- Просроченные по дате лицензии
- Лицензии, активированные на запрещённых доменах
- Лицензии с превышением лимита активных установок
- Лицензии с подозрительной активностью по IP или геолокации
Пример структуры шаблона в PHP
interface Wplicense_ConditionInterface {
public function check(array $licenseData): bool;
public function getReason(): string;
}
class Wplicense_ExpiredCondition implements Wplicense_ConditionInterface {
public function check(array $licenseData): bool {
return strtotime($licenseData['expiry_date']) < time();
}
public function getReason(): string {
return 'Лицензия просрочена';
}
}
class Wplicense_DomainRestrictionCondition implements Wplicense_ConditionInterface {
private $forbiddenDomains = ['badsite.ru', 'piratecopy.com'];
public function check(array $licenseData): bool {
return in_array($licenseData['domain'], $this->forbiddenDomains);
}
public function getReason(): string {
return 'Использование на запрещённом домене';
}
}
Такой подход позволяет легко расширять и комбинировать условия.
Автоматизация отзыва лицензий через WP-Cron
Для регулярной проверки лицензий и применения шаблонов удобно использовать WP-Cron — встроенный планировщик задач WordPress.
Пример регистрации задачи:
add_action('wplicense_cron_check_licenses', 'wplicense_cron_check_licenses_callback');
if (!wp_next_scheduled('wplicense_cron_check_licenses')) {
wp_schedule_event(time(), 'hourly', 'wplicense_cron_check_licenses');
}
function wplicense_cron_check_licenses_callback() {
$licenses = wplicense_get_all_licenses(); // Функция получения лицензий из БД
$conditions = [
new Wplicense_ExpiredCondition(),
new Wplicense_DomainRestrictionCondition(),
// Добавляйте другие условия
];
foreach ($licenses as $license) {
foreach ($conditions as $condition) {
if ($condition->check($license)) {
wplicense_revoke_license($license['id'], $condition->getReason());
break; // Отзываем сразу при первом срабатывании
}
}
}
}
Функции wplicense_get_all_licenses() и wplicense_revoke_license() вы реализуете согласно структуре вашей базы данных и API.
Пример функции отзыва лицензии
Рассмотрим пример простой функции для отзыва лицензии с записью причины и времени:
function wplicense_revoke_license($license_id, $reason) {
global $wpdb;
$table = $wpdb->prefix . 'wplicenses';
$wpdb->update(
$table,
[
'status' => 'revoked',
'revoke_reason' => $reason,
'revoked_at' => current_time('mysql')
],
['id' => $license_id],
['%s', '%s', '%s'],
['%d']
);
// Можно добавить уведомление пользователя или администратора
}
Дополнительные рекомендации и плагины
Для более сложных сценариев можно использовать Clearfy Pro — плагин с расширенными настройками безопасности и контроля, который помогает управлять лицензиями и доступом.
Также полезно интегрировать с системами логирования для аудита отзыва лицензий.
Обработка уведомлений пользователей при отзыве
При отзыве лицензии важно информировать пользователя о причине и дальнейших шагах. Можно организовать отправку email или push-уведомлений.
Пример добавления уведомления по email:
function wplicense_notify_user_revoke($user_email, $reason) {
$subject = 'Ваша лицензия была отозвана';
$message = 'Здравствуйте!\n\nВаша лицензия была отозвана по причине: ' . $reason . ".\nЕсли у вас есть вопросы, свяжитесь с поддержкой.";
wp_mail($user_email, $subject, $message);
}
Вызывайте эту функцию внутри wplicense_revoke_license() с email пользователя.
Заключение
Автоматический отзыв лицензий по шаблонам — мощный инструмент для управления лицензиями WordPress плагинов. Правильно реализованный механизм позволяет уменьшить риски пиратства, улучшить контроль и повысить качество поддержки пользователей. Следуйте принципам модульности и расширяемости при создании своих условий и автоматизации.