Если персональный промокод доступен другим клиентам, скидка перестает быть персональной, а магазин теряет деньги и контроль над акциями. Чаще всего проверка промокода слишком общая.
Промокод нужно проверять не только по строке кода, но и по владельцу, сегменту, сроку, статусу заказа, лимиту применений и условиям корзины.
Коротко: что сделать
- Проверить таблицу промокодов и связь с пользователем
- Проверить применение промокода в корзине и при оформлении
- Проверить кеш правил скидок
- Проверить лимиты на пользователя и общий лимит
- Проверить повторное использование после отмены заказа
Основные причины
У таких сбоев редко бывает одна универсальная причина. Надежнее идти от факта к факту: где ошибка проявляется, какие данные проходят через систему, что изменилось перед поломкой и на каком шаге цепочка перестает работать.
- Backend ищет промокод только по code
- Поле user_id или customer_id не учитывается
- Промокод кешируется как общий
- Проверка на frontend отличается от проверки backend
- После отмены заказа лимит возвращается неправильно
Пошаговая диагностика
Диагностику лучше проводить на одном воспроизводимом примере. Так проще увидеть не общий шум, а конкретное место, где интерфейс, сервер, интеграция или внешняя служба начинают вести себя неправильно.
- Создать два тестовых аккаунта и применить один код
- Проверить SQL или сервис валидации промокода
- Посмотреть, где рассчитывается скидка: корзина, checkout, backend
- Проверить кеш и TTL правил акций
- Проверить заказ после оплаты и отмены
Как исправить проблему
Исправление должно закрывать первопричину, а не только маскировать симптом. Если затронуты доступы, платежи, данные клиентов или серверные настройки, сначала сделайте резервную копию и проверьте правку на тестовом сценарии.
- Добавить проверку владельца промокода на backend
- Хранить применение промокода отдельно от текста кода
- Сбрасывать кеш правил при изменении акции
- Единообразно проверять промокод в корзине и заказе
- Добавить аудит использования персональных кодов
Безопасный план решения
Сначала закройте применение чужих персональных кодов на backend, затем проверяйте интерфейс. Frontend-подсказки удобны, но не должны быть единственной защитой.
Чего не стоит делать
- Не полагаться на скрытое поле user_id в браузере
- Не считать промокод персональным только по названию
- Не применять скидку до финальной серверной проверки
- Не удалять историю применений промокодов
Что подготовить перед исправлением
- Пример промокода
- ID клиента, которому он предназначен
- Заказ, где код применил другой клиент
- Правила акции и лимиты
FAQ
Где должна быть главная проверка промокода?
На backend при расчете корзины и создании заказа. Frontend может только показывать подсказку.
Нужно ли учитывать отмененные заказы?
Да. Нужно явно решить, возвращается ли лимит после отмены и при каких статусах.
Что делать с уже использованными чужими кодами?
Сначала остановить новые случаи, затем выгрузить историю и решить, нужны ли корректировки заказов.
Когда стоит обратиться за помощью
Обращаться стоит, если промокоды используются в маркетинге, рассылках, партнерках или персональных предложениях.
Итог
Проверьте backend-валидацию, владельца кода, кеш и лимиты. Если нужно исправить персональные промокоды без потери истории, пишите в Telegram @rabotator_support.