В этой статье мы подробно разберем, как создать собственную систему активации лицензионных ключей для WordPress плагинов. Это решение поможет вам контролировать использование ваших продуктов, ограничивать нелегальное распространение и управлять обновлениями.
Почему нужна собственная система активации лицензий
Многие разработчики используют сторонние сервисы для управления лицензиями, но собственное решение дает больше гибкости и контроля. Вы можете настроить логику проверки лицензий под свои бизнес-процессы, интегрировать систему с сайтом и клиентской поддержкой, а также снизить зависимость от сторонних сервисов.
Кроме того, собственная система позволит реализовать уникальные сценарии, например, ограничение активаций по IP, времени или функционалу плагина.
Основные возможности системы лицензирования
- Генерация уникальных лицензионных ключей;
- Проверка валидности ключа при активации;
- Ограничение количества активаций;
- Деактивация ключей;
- Автоматическое обновление статуса лицензии;
- Интеграция с WordPress плагином через API.
Создаем серверную часть для управления лицензиями
Для хранения и управления лицензиями нам потребуется простой API на PHP с базой данных MySQL. Рассмотрим пример минимальной реализации.
Создадим таблицу wp_license_keys с полями:
id— уникальный идентификатор;license_key— строка ключа;status— статус (активен, деактивирован, просрочен);activations_count— количество активаций;max_activations— максимальное число активаций;created_atиupdated_at— даты;user_id— ID покупателя (если требуется).
Пример SQL-запроса для создания таблицы:
CREATE TABLE wp_license_keys ( id INT AUTO_INCREMENT PRIMARY KEY, license_key VARCHAR(64) NOT NULL UNIQUE, status ENUM('active','inactive','expired') NOT NULL DEFAULT 'active', activations_count INT DEFAULT 0, max_activations INT DEFAULT 1, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, user_id INT NULL );Далее реализуем API для проверки лицензии. Например, файл license-api.php:
<?php header('Content-Type: application/json'); $license_key = $_GET['license_key'] ?? ''; if (empty($license_key)) { echo json_encode(['success' => false, 'message' => 'License key is required']); exit; } $pdo = new PDO('mysql:host=localhost;dbname=your_db', 'user', 'pass'); $stmt = $pdo->prepare('SELECT * FROM wp_license_keys WHERE license_key = :key'); $stmt->execute([':key' => $license_key]); $license = $stmt->fetch(PDO::FETCH_ASSOC); if (!$license) { echo json_encode(['success' => false, 'message' => 'License key not found']); exit; } if ($license['status'] !== 'active') { echo json_encode(['success' => false, 'message' => 'License key is not active']); exit; } if ($license['activations_count'] >= $license['max_activations']) { echo json_encode(['success' => false, 'message' => 'Maximum activations reached']); exit; } // Увеличим счетчик активаций $stmt = $pdo->prepare('UPDATE wp_license_keys SET activations_count = activations_count + 1 WHERE id = :id'); $stmt->execute([':id' => $license['id']]); echo json_encode(['success' => true, 'message' => 'License key is valid']);Интеграция проверки лицензии в WordPress плагин
Теперь подключим проверку лицензии в плагин. Создадим функцию wplicense_check_license(), которая будет отправлять запрос к API и обрабатывать ответ.
function wplicense_check_license($license_key) { $api_url = 'https://yourdomain.com/license-api.php?license_key=' . urlencode($license_key); $response = wp_remote_get($api_url, ['timeout' => 10]); if (is_wp_error($response)) { return ['success' => false, 'message' => 'Unable to connect to license server']; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if (!$data) { return ['success' => false, 'message' => 'Invalid response from license server']; } return $data;}Для активации лицензии можно добавить страницу настроек в админке плагина, где пользователь вводит ключ и нажимает кнопку «Активировать».
Пример формы и обработки активации
В файле настроек плагина:
<form method="post" action=""> <label for="license_key">Введите лицензионный ключ:</label><br> <input type="text" name="license_key" id="license_key" value="<?php echo esc_attr(get_option('wplicense_license_key')); ?>" required><br> <input type="submit" name="activate_license" value="Активировать"></form>Обработка в том же файле:
if (isset($_POST['activate_license'])) { $license_key = sanitize_text_field($_POST['license_key']); $result = wplicense_check_license($license_key); if ($result['success']) { update_option('wplicense_license_key', $license_key); echo '<div class="updated">Лицензия успешно активирована.</div>'; } else { echo '<div class="error">' . esc_html($result['message']) . '</div>'; }}Расширенные возможности и безопасность
Для повышения безопасности рекомендуется:
- Использовать HTTPS для API;
- Добавлять подписи или токены для подтверждения запросов;
- Ограничивать IP или user-agent на сервере лицензий;
- Реализовать деактивацию лицензий с сайта пользователя;
- Добавить проверку обновлений плагина с учетом лицензии.
Также можно использовать плагин Clearfy Pro для дополнительной оптимизации и защиты плагина.
Пример функции для деактивации лицензии
function wplicense_deactivate_license($license_key) { $api_url = 'https://yourdomain.com/license-api.php?action=deactivate&license_key=' . urlencode($license_key); $response = wp_remote_get($api_url, ['timeout' => 10]); if (is_wp_error($response)) { return false; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); return $data['success'] ?? false;}На сервере в API добавьте обработку параметра action=deactivate, чтобы уменьшать счетчик активаций и менять статус лицензии.
Выводы
Создание собственной системы активации лицензий для WordPress плагинов — задача вполне посильная и дающая полный контроль над распространением вашего продукта. В статье мы рассмотрели базовую архитектуру, пример API и интеграцию с плагином. Дальше можно расширять функционал в зависимости от требований.
Если хотите более удобных инструментов для управления лицензиями и оптимизации плагинов, рекомендуем ознакомиться с решениями на WPSHOP.RU.