В этой статье подробно разберём, как реализовать механизм отзыва лицензии в WordPress плагине с помощью REST API. Отзыв лицензии — это важный функционал для разработчиков, которые хотят эффективно управлять активациями своих продуктов и предотвращать несанкционированное использование.
Почему отзыв лицензии важен для WordPress плагинов
Отзыв лицензии позволяет разработчику деактивировать лицензию на стороне сервера, если пользователь нарушил условия использования или переустановил плагин на другом сайте без покупки дополнительной лицензии. Это особенно актуально для плагинов с ограничением по количеству активаций.
Реализация отзыва лицензии через REST API даёт гибкость и позволяет взаимодействовать с сервером без необходимости сложных запросов через стандартные формы. REST API хорошо интегрируется с современными плагинами и темами WordPress.
Кроме того, такой подход позволяет оперативно информировать пользователя о статусе лицензии и предотвращать использование плагина с отозванной лицензией.
Создание REST API эндпоинта для отзыва лицензии
Первым шагом создадим собственный REST API маршрут, который будет принимать запросы на отзыв лицензии. В файле плагина добавим следующий код:
add_action('rest_api_init', function () {
register_rest_route('wplicense/v1', '/revoke-license', array(
'methods' => 'POST',
'callback' => 'wplicense_revoke_license_callback',
'permission_callback' => function () {
return current_user_can('manage_options'); // только администраторы
},
));
});
function wplicense_revoke_license_callback(WP_REST_Request $request) {
$license_key = $request->get_param('license_key');
if (empty($license_key)) {
return new WP_Error('no_license_key', 'License key is required', array('status' => 400));
}
// Здесь должна быть логика отзыва лицензии
$result = wplicense_revoke_key_in_database($license_key);
if ($result) {
return array('success' => true, 'message' => 'Лицензия успешно отозвана');
} else {
return new WP_Error('revoke_failed', 'Не удалось отозвать лицензию', array('status' => 500));
}
}
function wplicense_revoke_key_in_database($key) {
global $wpdb;
$table_name = $wpdb->prefix . 'wplicenses';
$updated = $wpdb->update(
$table_name,
array('status' => 'revoked'),
array('license_key' => $key),
array('%s'),
array('%s')
);
return $updated !== false && $updated > 0;
}В данном примере мы создаём REST маршрут /wp-json/wplicense/v1/revoke-license, который принимает POST-запрос с параметром license_key. Для безопасности доступ ограничен только для администраторов.
Функция wplicense_revoke_key_in_database меняет статус лицензии на revoked в базе данных. Для работы этого кода необходимо заранее создать таблицу wp_wplicenses с полями license_key и status.
Пример создания таблицы базы данных для хранения лицензий
Для хранения информации о лицензиях создадим таблицу при активации плагина:
register_activation_hook(__FILE__, 'wplicense_create_license_table');
function wplicense_create_license_table() {
global $wpdb;
$table_name = $wpdb->prefix . 'wplicenses';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
license_key varchar(64) NOT NULL,
status varchar(20) NOT NULL DEFAULT 'active',
PRIMARY KEY (id),
UNIQUE KEY license_key (license_key)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
}Эта таблица позволит хранить уникальные ключи лицензий и их статус. По умолчанию статус — active. При отзыве меняем его на revoked.
Клиентская часть: отправка запроса на отзыв лицензии
Для отправки запроса на отзыв лицензии из административной части сайта или внешнего сервиса можно использовать стандартные средства PHP или JavaScript.
Пример на PHP с использованием wp_remote_post:
$response = wp_remote_post(site_url('/wp-json/wplicense/v1/revoke-license'), array(
'method' => 'POST',
'headers' => array(
'Authorization' => 'Bearer ' . $token, // если требуется авторизация
'Content-Type' => 'application/json',
),
'body' => json_encode(array('license_key' => $license_key)),
));
if (is_wp_error($response)) {
error_log('Ошибка отзыва лицензии: ' . $response->get_error_message());
} else {
$data = json_decode(wp_remote_retrieve_body($response), true);
if (!empty($data['success'])) {
error_log('Лицензия успешно отозвана');
} else {
error_log('Не удалось отозвать лицензию');
}
}Если нужно, чтобы отзыв лицензии происходил из интерфейса плагина в админке, можно добавить кнопку и через JavaScript отправлять AJAX-запросы к REST API.
Пример AJAX запроса на JavaScript
jQuery(document).ready(function($) {
$('#revoke-license-button').on('click', function() {
var licenseKey = $('#license-key-input').val();
$.ajax({
url: wpApiSettings.root + 'wplicense/v1/revoke-license',
method: 'POST',
beforeSend: function(xhr) {
xhr.setRequestHeader('X-WP-Nonce', wpApiSettings.nonce);
},
data: { license_key: licenseKey },
success: function(response) {
alert(response.message);
},
error: function(response) {
alert('Ошибка: ' + response.responseJSON.message);
}
});
});
});Для работы приведённого кода в админке необходимо локализовать скрипт и передать wpApiSettings с nonce и корнем REST API. Это стандартный способ взаимодействия с API WordPress.
Дополнительные рекомендации по безопасности и управлению лицензиями
При реализации отзыва лицензии важно учитывать безопасность:
- Ограничивайте доступ к отзыву лицензий только доверенным пользователям (администраторам или сервисам с проверкой токенов).
- Используйте nonce и другие методы проверки запросов.
- Логируйте все операции отзыва для возможности аудита.
Также можно интегрировать механизм отзыва с популярными плагинами для управления лицензиями, например, с WPGPT или Clearfy Pro, если они используются для управления лицензиями и оптимизации безопасности.
Тестирование и отладка
После реализации обязательно протестируйте работу отзыва лицензии:
- Проверьте, что при отправке запроса статус лицензии меняется в базе.
- Убедитесь, что плагин корректно реагирует на статус
revoked— например, блокирует функционал. - Проверьте, что неавторизованные пользователи не могут вызывать REST API метод.
Для отладки удобно использовать плагины, например, WPRemark, позволяющие просматривать логи и запросы.
Заключение по реализации отзыва лицензии через REST API
Использование REST API для отзыва лицензии — современный и удобный способ централизованно управлять активациями плагинов. Он позволяет быстро реагировать на нарушения и улучшать контроль за использованием продукта.
В статье приведён полный пример создания REST API, базы данных и клиентской части для отзыва лицензии. Настраивайте безопасность, адаптируйте под свои требования и интегрируйте с другими системами управления лицензиями.