Как создать собственную систему активации лицензий для WordPress плагинов

В этой статье мы подробно разберем, как создать собственную систему активации лицензионных ключей для 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.

Как создать уникальный лицензионный ключ для WordPress плагина
01.11.2025
Как отладить проблемы с активацией лицензий WordPress плагинов в разных условиях
11.03.2026
Как создать автоматический отчет по использованию лицензий WordPress плагинов с распределением по пользователям
27.03.2026
Оптимальные настройки WordPress для управления лицензиями плагинов
02.12.2025
Как установить ограничение на использование лицензии WordPress плагинов по IP адресу
02.01.2026