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

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

Коротко: что сделать

  • Проверить таблицу промокодов и связь с пользователем
  • Проверить применение промокода в корзине и при оформлении
  • Проверить кеш правил скидок
  • Проверить лимиты на пользователя и общий лимит
  • Проверить повторное использование после отмены заказа

Основные причины

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

  • 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.