Приложение купонов и накопительных скидок для CrowdGames
CrowdGames
Одновременное применение купонов и накопительных скидок на InSales для CrowdGames. Формула: (Цена - Купон) - Накопительная скидка. API интеграция.
Задача
CrowdGames — интернет-магазин на InSales, где одновременно работают две независимые механики лояльности: разовые купоны на скидку и накопительные скидки, привязанные к группе клиента. Штатное поведение платформы устроено так, что при оформлении заказа применяется только одна скидка — наибольшая из доступных. Если покупатель вводил купон, накопительная скидка его группы игнорировалась, и наоборот. Для постоянной аудитории CrowdGames это выглядело как обман ожиданий: клиент с уже заработанным процентом не получал никакой дополнительной выгоды от промо-купона.
Магазину требовалось складывать обе скидки в рамках одного заказа и делать это по строго определённому порядку расчёта, а не «как получится». Порядок здесь принципиален: от него напрямую зависит итоговая сумма, поэтому логику нужно было зафиксировать один раз и держать одинаковой сразу в трёх местах — в живой корзине, в уже оформленном заказе и в статистике. Любое расхождение между тем, что видит покупатель, и тем, что попадает в заказ, для магазина недопустимо.
Формула расчёта
(Цена товара - Купон) - Накопительная скидка
Сначала от цены товара вычитается сумма купона, и только затем от уже уменьшенной суммы считается процент накопительной скидки группы клиента. Такой порядок выбран осознанно: купон работает как фиксированное списание с цены, а накопительный процент — как надбавка лояльности поверх акции, а не наоборот. Это исключает ситуацию, когда процент «съедает» часть выгоды купона или когда две скидки начинают конкурировать за одну и ту же базу расчёта.
Пример
Товар стоит 1000₽. Купон дает скидку 200₽. Цена после купона: 800₽. Накопительная скидка клиента: 10%. Итоговая цена: 800₽ - 80₽ = 720₽. Клиент сэкономил 280₽.
Как устроен расчёт
InSales самостоятельно не умеет складывать эти скидки, поэтому весь расчёт вынесен во внешнее приложение, которое обращается к API InSales. Встроенные скидки магазина мы отключили — иначе платформа продолжала бы подставлять собственную «максимальную» скидку и конфликтовать с нашей логикой. После доработки единственным источником итоговой цены остаётся внешняя система. Приложение пересчитывает корзину при каждом значимом действии покупателя: добавлении товара, его удалении, изменении количества и вводе купона. Пока идёт пересчёт, кнопка «Оформить» блокируется, а рядом показывается индикатор загрузки — так покупатель физически не может отправить заказ со «старой», ещё не пересчитанной суммой.
- Внешнее приложение — расчет скидок через API InSales
- Отключение стандартных скидок — работает только внешняя система
- Автоматический пересчет — при добавлении/удалении товаров, вводе купона
- Интерфейс управления — добавление/удаление купонов, статистика использования
- UX улучшения — индикатор загрузки, блокировка кнопки "Оформить" на время пересчета
Купоны и учёт накопительных скидок
Купонами администратор управляет из отдельного интерфейса: их можно добавлять и удалять, а по каждому купону видна статистика использования. Данные о применённом купоне записываются прямо в поле заказа, поэтому по конкретной покупке всегда понятно, какой купон сработал и какая накопительная скидка легла поверх него. Всю статистику применения можно выгрузить в таблицу — это даёт CrowdGames возможность оценивать эффективность акций, сопоставлять их с накопительными процентами разных групп клиентов и настраивать скидки гибко, не трогая код магазина.
Технические детали
- JavaScript + API InSales + PHP
- Размещено на VPS клиента
- Подключено через "Расширения" в InSales
- Запись данных о купонах в поле заказа
- Выгрузка статистики в таблицу
Результат
- Одновременное применение купонов и накопительных скидок
- Формула расчета: (Цена - Купон) - Накопительная скидка
- Интерфейс управления купонами
- Статистика использования
- Гибкая настройка скидок