
В рамках технической поддержки сервиса Автозагрузки (https://autozagruzki.ru/) полностью переделал систему оформления подписок.
Было
Одна общая подписка на все таблицы — продлевалась разом, негибко. За время роста сервис многократно дорабатывали, накопились баги:
- кто-то ухитрялся продлевать тариф бесплатно (дыра в бизнес-логике);
- кто-то пользовался таблицами сверх оплаченного лимита;
- дополнительное место на диске нельзя было тарифицировать — выдавалось по запросу и не приносило прибыль;
- Робокасса перестала корректно обрабатывать вебхуки — менеджерам приходилось вручную продлевать подписки, проверять каждый платёж и править статусы.
Это съедало часы рабочего времени и создавало риск ошибок.
Стало
Независимые подписки на каждую таблицу. Клиент покупает подписку на одну таблицу и в любой момент перекидывает её на другую без обращения в техподдержку. Каждая подписка продлевается отдельно — не нужно тянуть весь пакет.
Менеджеры больше не занимаются ручными продлениями — всё автоматизировано:
- Робокасса стабильно передаёт статусы оплат;
- баги с бесплатными продлениями и превышением лимитов устранены — система жёстко контролирует доступ;
- все старые активные тарифы автоматически перенесены в новую модель — клиентам не пришлось ничего делать.


С чем пришлось повозиться
- Миграция данных — перевёл всех пользователей со старой системы на новую без потери истории и дат окончания. Скрипт перенёс всё автоматически и подсветил проблемные места — дыры в прежней бизнес-логике.
- Разделение логики — раньше подписка была жёстко привязана к таблице, переписал ядро: подписка стала самостоятельной сущностью, переброс на другую таблицу — в 2 клика.
- Продление HDD — дополнительное место потребовало отдельной логики: передача объёма в ГБ в корзину и обработка при активации заказа через мета-поля.
- Интерфейс — кнопки «Привязать» и «Отвязать»: привязка яркая и на видном месте, отвязка спрятана в меню, чтобы случайно не потерять подписку.



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

Часть клиентов вместо продления существующей подписки покупала новые в пул: думали, что продлили старую, а она истекала. Пришлось добавить яркий алерт с пояснением и провести дополнительный инструктаж.

Стек
- Backend: PHP (WordPress), WooCommerce (кастомные типы подписок), ACF, собственные REST-эндпоинты, файловое кеширование.
- Frontend: нативный JavaScript (ES6), jQuery, noUiSlider, SweetAlert2, модалки на Bootstrap.
- Интеграции: Робокасса (статусы оплат через вебхуки), внутреннее API подписок.
- Архитектура: бизнес-логика вынесена в отдельный плагин, интеграция с темой через хуки и глобальный класс.