Eid Al Etihad 55: 20% off websites and 55% off the first month of SEO, from 25 November.See the offers
Все статьи
WordPress

Лицензирование плагина или темы WordPress: ключи, активации и обновления

Автор: Zaki International · 26 Sept
Licensing Your WordPress Plugin or Theme: Keys, Activations, and Updates

Чтобы продавать плагин или тему премиум-класса, недостаточно просто написать качественный код и настроить страницу оформления заказа. Вам нужна надежная инфраструктура для управления лицензированием плагинов WordPress, отслеживания активных установок и доставки безопасных обновлений прямо в панель управления. Без надлежащей системы лицензирования ваша интеллектуальная собственность может легко оказаться в открытом доступе на форумах с взломанными версиями, а ваши платящие клиенты столкнутся с проблемами при обновлении и уязвимостями в системе безопасности.

В Zaki International мы разрабатываем индивидуальное программное обеспечение и платформы электронной коммерции для клиентов в ОАЭ, Египте и Европе. Разрабатывая коммерческие продукты и управляя Zaki Academy, мы не раз сталкивались с тем, что разработчики теряли значительную часть дохода просто потому, что полагались на неработающие механизмы проверки лицензий или сложные сторонние инструменты, которые не выдерживали нагрузки при высоком трафике. Независимо от того, запускаете ли вы свой первый утилитарный плагин или расширяете линейку тем, вот как разработать систему проверки лицензий и обновлений, которая защитит ваш бизнес и при этом будет учитывать интересы пользователей.

Основные компоненты архитектуры лицензирования

Надежная система лицензирования состоит из трех отдельных компонентов: центрального сервера лицензирования, клиентского кода, встроенного в ваш продукт, и API обновлений WordPress. Если какой-либо из этих трех элементов выходит из строя, это мгновенно сказывается на качестве обслуживания ваших клиентов.

Ваш сервер лицензирования выступает в качестве «источника правды». На нём хранятся записи о покупках клиентов, уникальные лицензионные ключи и данные о каждом активированном домене. Когда пользователь вводит свой ключ на странице настроек, плагин отправляет защищённый API-запрос на ваш сервер. Если ключ действителен и не превысил лимит активаций, сервер выдаёт криптографический токен или статус подтверждения.

Если вы не хотите создавать эту инфраструктуру с нуля, такие инструменты, как WP License Guard, предоставляют безопасную и готовую к использованию платформу для бесперебойного управления активациями и обновлениями клиентов. Использование специализированного решения позволяет избежать типичных узких мест на сервере и гарантирует, что проверки обновлений не будут замедлять работу административных панелей ваших клиентов.

Генерация и управление лицензионными ключами

Ваши лицензионные ключи должны быть уникальными, криптографически защищёнными и удобными для копирования и вставки. Избегайте использования последовательных чисел, таких как ID 1001, так как они подвергают ключи риску подбора методом перебора и несанкционированного распространения.

Вместо этого генерируйте случайные строки, состоящие из заглавных и строчных букв, а также цифр, отформатированные в удобные для чтения фрагменты, разделенные дефисами (например: ZAKI-7894-AB34-99KL). Каждый ключ должен быть привязан к конкретным метаданным в вашей базе данных:

  • Идентификатор заказа из WooCommerce или Easy Digital Downloads.
  • Адрес электронной почты клиента и идентификатор пользователя.
  • Лимит активации (например, один сайт, 5 сайтов или без ограничений).
  • Срок действия, привязанный к циклу продления подписки.
  • Флаг статуса, указывающий, является ли ключ активным, просроченным или отозванным.

Обработка удаленной активации и деактивации

Процесс активации должен проходить без сбоев. Когда клиент вводит свой ключ на сайте WordPress, ваш плагин должен отправить на ваш сервер HTTPS-запрос методом POST, содержащий лицензионный ключ и текущий URL-адрес сайта (home_url()).

Затем ваш сервер проверяет три условия:

  1. Существует ли ключ и активен ли он?
  2. Истек ли срок действия ключа?
  3. Зарегистрирован ли текущий URL-адрес сайта уже под этим ключом, или есть возможность для новой активации?

Если сайт уже зарегистрирован, верните ответ об успешном выполнении операции, чтобы обновление страницы не занимало дополнительное место для активации. Если лимит на количество сайтов исчерпан, отобразите понятное и полезное сообщение об ошибке, объясняющее, как можно деактивировать старый сайт или перейти на более дорогой тарифный план.

Деактивация не менее важна. Когда пользователь нажимает «Деактивировать лицензию» в панели управления WordPress, ваш плагин должен отправить запрос на ваш сервер, чтобы удалить этот конкретный домен из списка активных, освободив место для будущего использования.

Обеспечение безопасных автоматических обновлений

WordPress имеет встроенную систему временных данных обновлений, которая проверяет наличие новых версий плагинов и тем. Чтобы подключить ваш премиум-продукт к этой встроенной процедуре обновления, необходимо перехватить фильтры `site_transient_update_plugins` или `pre_set_site_transient_update_plugins`.

Когда WordPress проверяет наличие обновлений, ваш продукт должен отправлять лицензионный ключ вместе с запросом. Ваш сервер проверяет ключ перед тем, как вернуть URL-адрес для скачивания пакета. Если срок действия ключа истек или он недействителен, ваш сервер должен вернуть нулевой ответ, не позволяя неавторизованным пользователям скачать последнюю версию zip-файла.

Кроме того, убедитесь, что ваши URL-адреса для скачивания являются временными и ограниченными по времени. Никогда не публикуйте постоянную прямую ссылку на ваш ZIP-файл, иначе он немедленно попадет в открытые файлообменные сети.

Плавное переключение на резервные варианты при сбоях сервера

Серверы выходят из строя. Хостинг-провайдеры перезагружают оборудование, а записи DNS обновляются. Если ваш сервер лицензирования перестает работать, ваши платные клиенты не должны сталкиваться с блокировкой доступа к своим сайтам или с фатальными ошибками PHP.

Реализуйте уровень временного кэширования на стороне клиента. После успешной проверки лицензии кэшируйте этот статус действительности локально на срок от 24 до 72 часов. Если ваш сервер не отвечает во время последующей фоновой проверки, плагин должен корректно обработать сбой, предположить, что лицензия по-прежнему действительна на основе данных кэша, и записать в журнал незаметное предупреждение, а не выводить пользователя из строя.

Ключевые выводы

  • Используйте случайные отформатированные строки в качестве ключей и привязывайте их непосредственно к ID заказов электронной коммерции и лимитам активации.
  • Всегда кэшируйте успешные проверки лицензий локально на срок от 24 до 72 часов, чтобы предотвратить простои сайта во время сбоев на сервере.
  • Перехватывайте встроенные временные данные обновлений WordPress, чтобы обеспечить безопасную загрузку пакетов с проверкой лицензии.
  • Отображайте в панели управления WordPress чёткие и практические сообщения об ошибках при достижении лимитов активации.

Часто задаваемые вопросы

Как не дать пользователям делиться своими лицензионными ключами?

Вы не сможете полностью искоренить пиратство, но можете ограничить его последствия, установив строгие ограничения на количество активаций для каждого ключа и отслеживая внезапные всплески регистрации доменов. Если один ключ активируется на пятидесяти разных сайтах за один день, ваша система должна автоматически пометить его или приостановить его действие.

Что произойдет с сайтом клиента, если срок его подписки истечет?

Продуманная стратегия лицензирования плагинов WordPress отделяет срок действия лицензии на обновления от основной функциональности. По истечении срока подписки плагин должен продолжать работать на сайте клиента, но автоматические обновления и доступ к поддержке должны прекратиться.

Стоит ли создавать собственный сервер лицензирования или использовать готовый инструмент?

Если вы управляете набором продуктов с большим объемом продаж, использование специализированного решения, такого как WP License Guard, или проверенного расширения для электронной коммерции сэкономит сотни часов на индивидуальной разработке и усилении безопасности.

#wordpress#plugins#licensing#php#developer