Как создать собственную систему активации лицензий для 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.

Решение проблем со сборкой лицензии для WooCommerce плагинов на WordPress
29.04.2026
Как удалить старые лицензии WordPress плагинов из базы данных
18.03.2026
Как создать автоматический отчет по использованию лицензий WordPress плагинов с распределением по пользователям
27.03.2026
Автоматический отзыв лицензий WordPress плагинов по срокам
12.01.2026
Решение проблем с проверкой лицензии в WooCommerce плагинах WordPress
25.04.2026