Для многих разработчиков плагинов и тем на WordPress важна возможность выдавать лицензии пользователям автоматически. Это помогает управлять активацией продуктов, контролировать количество установок и защищать авторские права. В этой статье мы подробно разберём, как создать собственный автоматический генератор лицензий в WordPress с учетом безопасности и удобства использования.
Почему нужен автоматический генератор лицензий для WordPress продуктов
Если вы продаёте плагин или тему, важно защитить свой продукт от нелегального распространения. Автоматический генератор лицензий позволяет:
- Автоматически создавать уникальные ключи для каждого покупателя.
- Проверять статус лицензии на вашем сервере.
- Ограничивать количество активаций по одной лицензии.
- Упрощать процесс обновления продукта через встроенный в WordPress механизм.
Реализовать это можно самостоятельно или с помощью готовых решений. Ниже рассмотрим оба варианта.
Обзор плагинов для генерации и проверки лицензий
Easy Digital Downloads Software Licensing
Если вы продаете продукты через Easy Digital Downloads (EDD), их расширение Software Licensing — это мощный инструмент для создания лицензий, управления ими и интеграции с WP-CLI для автоматизации. Он позволяет создавать уникальные ключи, проверять их и отключать при необходимости.
WooCommerce API Licenses
Для WooCommerce есть плагины, которые добавляют генерацию лицензий. Например, WooCommerce API Licenses позволяет создавать ключи и управлять ими через панель администратора.
Custom License Manager
Для более гибкой настройки можно использовать плагины типа Custom License Manager, которые позволяют интегрироваться с собственным API для проверки лицензий.
Создание собственного генератора лицензий: подробный пример кода
Рассмотрим пример, как создать простой генератор лицензий с проверкой через AJAX. Для этого создадим плагин с основными функциями.
1. Создание функции генерации уникального ключа
Ключ должен быть уникальным и достаточно сложным. Используем хеширование с рандомом и временем:
function wptricks_generate_license_key($user_id) {
$random = wp_generate_password(16, false, false);
$time = time();
$key = hash('sha256', $user_id . $random . $time);
return strtoupper(substr($key, 0, 25));
}Эта функция создаёт 25-символьный ключ на основе ID пользователя, случайной строки и текущего времени.
2. Сохранение ключа и привязка к пользователю
При покупке или регистрации лицензии нужно сохранить ключ в базе данных. Используем метаполе пользователя:
function wptricks_save_license_key($user_id, $license_key) {
update_user_meta($user_id, '_wptricks_license_key', $license_key);
}3. Создание AJAX обработчика для проверки лицензии
Пользователь или ваш плагин может отправлять запросы для проверки статуса лицензии. Пример AJAX хука:
add_action('wp_ajax_wptricks_check_license', 'wptricks_check_license_callback');
add_action('wp_ajax_nopriv_wptricks_check_license', 'wptricks_check_license_callback');
function wptricks_check_license_callback() {
$license_key = sanitize_text_field($_POST['license_key'] ?? '');
if (!$license_key) {
wp_send_json_error('License key is required');
}
$user_query = new WP_User_Query(array(
'meta_key' => '_wptricks_license_key',
'meta_value' => $license_key,
'number' => 1,
));
if (empty($user_query->results)) {
wp_send_json_error('Invalid license key');
} else {
$user = $user_query->results[0];
wp_send_json_success(array('user_id' => $user->ID, 'status' => 'valid'));
}
wp_die();
}Как интегрировать генератор лицензий с механизмом обновлений WordPress
Для обновления плагина или темы по лицензии необходимо реализовать API, который будет отдавать информацию о новой версии только для валидных ключей. Пример базового подхода:
- Создайте endpoint на вашем сервере, который принимает ключ лицензии и возвращает данные о версии.
- В плагине добавьте фильтр
site_transient_update_pluginsилиsite_transient_update_themes, проверяющий ключ и добавляющий обновление. - При запросе обновления плагин проверяет ключ через ваш API.
Это повысит лояльность клиентов и упростит поддержку.
Пример фильтра для плагина
add_filter('site_transient_update_plugins', 'wptricks_check_plugin_update');
function wptricks_check_plugin_update($transient) {
if (empty($transient->checked)) {
return $transient;
}
$license_key = get_option('wptricks_license_key');
$response = wp_remote_post('https://example.com/api/check_update', array(
'body' => array('license_key' => $license_key, 'plugin' => 'my-plugin-slug'),
));
if (is_wp_error($response)) {
return $transient;
}
$data = json_decode(wp_remote_retrieve_body($response));
if ($data && version_compare($data->new_version, $transient->checked['my-plugin-slug/my-plugin.php'], '>')) {
$transient->response['my-plugin-slug/my-plugin.php'] = (object) array(
'slug' => 'my-plugin-slug',
'new_version' => $data->new_version,
'url' => $data->url,
'package' => $data->package,
);
}
return $transient;
}Дополнительные советы по безопасности и масштабируемости
При создании генератора лицензий обращайте внимание на следующие моменты:
- Храните ключи шифрованными, если возможно.
- Ограничивайте количество активаций ключа, чтобы предотвратить злоупотребления.
- Используйте nonce и проверку прав пользователей в AJAX запросах.
- Реализуйте логи активаций для контроля.
- Позаботьтесь о резервном копировании базы с лицензиями.
Также полезно интегрировать генератор с системами оплаты и CRM для автоматизации выдачи ключей.
Заключение
Создание собственного автоматического генератора лицензий в WordPress — задача вполне решаемая, которая позволит вам контролировать распространение своих продуктов и упростить поддержку клиентов. Используйте примеры кода выше как стартовую точку и расширяйте функционал под свои задачи.
Если хотите ускорить разработку или получить готовые решения, обратите внимание на Clearfy Pro — один из инструментов для оптимизации и безопасности WordPress.