Проверка лицензий в WordPress плагинах — важный аспект, который часто вызывает сложности у разработчиков. Неправильная реализация лицензирования может привести к ошибкам активации, проблемам с обновлениями и негативному опыту пользователей. В этой статье мы разберём, как грамотно реализовать проверку лицензий в плагинах WordPress, чтобы избежать типичных ошибок.
Почему важна проверка лицензий в WordPress плагинах
Лицензии используются для контроля распространения платных продуктов и предоставления обновлений только легальным пользователям. Без правильной проверки лицензий вы рискуете:
- потерять доход из-за пиратских копий,
- создать у пользователей проблемы с обновлениями,
- получать лишнюю нагрузку на сервер из-за постоянных запросов от нелегальных копий.
Поэтому реализация надёжной и оптимальной проверки лицензий — это обязательная часть разработки коммерческого плагина.
Основные подходы к проверке лицензий
Существует несколько способов реализовать проверку лицензий:
- Локальная проверка. Хранение лицензии и её статуса в базе данных плагина. Простой метод, но уязвим к взлому.
- Удалённая проверка. Проверка лицензии через API удалённого сервера. Надёжнее, но требует стабильного сервера и правильной оптимизации.
- Гибридный метод. Комбинация локальной и удалённой проверки, когда удалённая проверка проводится периодически, а локальная отвечает за временный доступ.
Для большинства коммерческих плагинов оптимален гибридный метод.
Пример реализации проверки лицензии с удалённым API
Рассмотрим пример, как реализовать удалённую проверку лицензии с помощью собственного API. Для примера создадим функцию wpfind_check_license(), которая будет делать запрос к вашему серверу и проверять статус лицензии.
function wpfind_check_license($license_key) {
$api_url = 'https://your-license-server.com/api/check_license';
$response = wp_remote_post($api_url, [
'body' => [
'license_key' => $license_key,
'site_url' => get_site_url(),
],
'timeout' => 15,
]);
if (is_wp_error($response)) {
return false; // Ошибка подключения
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if (!empty($data['valid']) && $data['valid'] === true) {
return true; // Лицензия действительна
}
return false; // Лицензия недействительна
}
В этом коде мы отправляем POST-запрос на API сервера лицензий с ключом лицензии и URL сайта. Сервер должен вернуть JSON с полем valid, указывающим на статус лицензии.
Как хранить и проверять лицензию локально
После успешной проверки стоит сохранить статус лицензии в базе данных WordPress, чтобы не делать запросы слишком часто. Например, можно хранить дату последней проверки и разрешать повторный запрос не чаще одного раза в сутки.
function wpfind_save_license_status($status) {
update_option('wpfind_license_status', $status);
update_option('wpfind_license_checked_at', time());
}
function wpfind_should_check_license() {
$last_checked = get_option('wpfind_license_checked_at', 0);
return (time() - $last_checked) > 86400; // 24 часа
}
Как интегрировать проверку лицензии в плагин
Оптимально проверять лицензию в момент активации плагина и периодически — например, при загрузке админки:
register_activation_hook(__FILE__, 'wpfind_activate_plugin');
function wpfind_activate_plugin() {
$license_key = get_option('wpfind_license_key');
if (!$license_key || !wpfind_check_license($license_key)) {
deactivate_plugins(plugin_basename(__FILE__));
wp_die('Лицензия недействительна. Плагин деактивирован.');
}
}
add_action('admin_init', 'wpfind_periodic_license_check');
function wpfind_periodic_license_check() {
if (wpfind_should_check_license()) {
$license_key = get_option('wpfind_license_key');
$status = wpfind_check_license($license_key);
wpfind_save_license_status($status);
if (!$status) {
add_action('admin_notices', function() {
echo '<div class="notice notice-error"><p>Лицензия плагина недействительна. Пожалуйста, обновите ключ.</p></div>';
});
}
}
}
Такой подход позволяет своевременно информировать пользователя и защищать плагин от нелегального использования.
Использование готовых решений и плагинов для лицензирования
Если вы не хотите писать собственный сервер лицензий, можно воспользоваться готовыми сервисами:
- Clearfy Pro — плагин с расширенными возможностями оптимизации и управления лицензиями.
- Easy Digital Downloads Software Licensing — популярное решение для продажи и проверки лицензий.
- WooCommerce Software Add-On — если плагин продаётся через WooCommerce.
Эти инструменты берут на себя большую часть работы, включая интеграцию с WooCommerce, автоматические обновления и управление лицензиями.
Пример интеграции с Clearfy Pro
Clearfy Pro предлагает API для проверки лицензий и управления ими. В документации https://wpshop.ru/plugins/clearfy-pro/ описано, как подключить проверку лицензий к вашему плагину. Использование Clearfy Pro особенно полезно, если вы уже используете его функции оптимизации и безопасности.
Оптимизация производительности проверки лицензий
Частые запросы к серверу лицензий могут замедлять работу сайта. Чтобы этого избежать:
- Кэшируйте результат проверки в базе данных, как показано выше.
- Используйте транзиенты для временного хранения статуса лицензии.
- Минимизируйте количество запросов, проверяя лицензию только при необходимости, например, при обновлениях плагина.
Пример использования транзиентов:
function wpfind_check_license_cached($license_key) {
$cache_key = 'wpfind_license_status';
$cached = get_transient($cache_key);
if ($cached !== false) {
return $cached;
}
$valid = wpfind_check_license($license_key);
set_transient($cache_key, $valid, 12 * HOUR_IN_SECONDS);
return $valid;
}
Обработка ошибок и UX при проверке лицензии
Важно не только проверить лицензию, но и корректно обработать ошибки и уведомлять пользователя:
- Если сервер лицензий недоступен, не блокируйте работу плагина сразу, а предупредите пользователя.
- Давайте понятные сообщения, чтобы пользователь мог сам исправить проблему.
- Добавьте в настройки плагина поле для ввода и обновления ключа лицензии.
Пример уведомления при ошибке подключения:
if (is_wp_error($response)) {
add_action('admin_notices', function() {
echo '<div class="notice notice-warning"><p>Не удалось проверить лицензию. Проверьте подключение к интернету.</p></div>';
});
return false;
}
Выводы и рекомендации по проверке лицензий в плагинах
Правильная реализация проверки лицензий — залог успешного распространения коммерческого плагина и положительного опыта пользователей. Рекомендуется:
- использовать удалённую проверку с кэшированием результатов,
- предоставлять понятные уведомления,
- оптимизировать частоту запросов,
- рассмотреть использование готовых решений, например, Clearfy Pro.
Следуя этим рекомендациям, вы сможете избежать большинства проблем с лицензированием и улучшить безопасность и стабильность вашего плагина.