Промокод принят, но сумма заказа отличается от обещанной: скидка не складывается с акцией, доставка внезапно становится платной или итог меняется при оформлении. Сначала зафиксируйте правила расчёта и ожидаемую сумму для одной корзины, затем найдите первый шаг расхождения. Исправление принимают по сочетаниям условий, а не по одному удачному заказу.
Кому это актуально
Разбор предназначен владельцу интернет-магазина и разработчику, если неверно считается скидка в корзине или перед акцией нужно согласовать новую механику. Результат — небольшая таблица проверок: исходные цены, применённые правила, доставка и ожидаемый итог.
Это не инструкция по настройке конкретного модуля. Сочетания акций зависят от платформы, версии и расширений; сначала нужно определить, что магазин обещает покупателю.
Какие риски закрывает проверка
Завышенная сумма мешает завершить покупку, а лишняя скидка уменьшает выручку с заказа. Различия между корзиной, сохранённым заказом и платёжной формой затрудняют сверку. Правка текста на витрине не устраняет ошибку серверного расчёта.
Не меняйте правила действующей акции наугад и не проводите реальные списания ради проверки. Для оформления и передачи суммы используйте согласованный тестовый контур с отключёнными реальными уведомлениями и внешними заказами.
Владелец может безопасно записать состав корзины, условия акции и последовательность действий. Изменение кода, пересчёт уже оплаченных заказов и повторная отправка финансовых операций требуют отдельного согласования.
Сначала опишите порядок правил
Для каждой скидки укажите базу: исходная цена, акционная цена или остаток после предыдущей скидки. Затем определите исключённые товары, совместимость с другими промокодами и способ выбора между несовместимыми предложениями.
Не складывайте проценты автоматически. При последовательном уменьшении цены на 10% и ещё на 10% от 1000 рублей останется 810 рублей. Скидка 20% от исходной цены дала бы 800 рублей. Это разные условия, и выбор должен следовать обещанию акции.
В официальном руководстве WooCommerce по купонам отдельно описаны процентная скидка, фиксированная скидка на корзину и на товар, запрет сочетания купонов и исключение акционных товаров. Обычный купон на товары не уменьшает стоимость доставки; для бесплатной доставки предусмотрена отдельная настройка. Эти положения относятся к WooCommerce, а поведение другого движка или расширения нужно сверять с его документацией.
Письменно согласуйте ещё три условия:
- Когда проверяется порог бесплатной доставки: до скидок или после них; какие товары входят в порог.
- На каком этапе округляется сумма: единица товара, строка с количеством или весь заказ; по какому правилу.
- Что происходит после изменения количества, удаления товара, входа в аккаунт или окончания срока акции.
При ограничении «один раз» дополнительно нужен безопасный тест повторного применения. Смена часового пояса или статуса покупателя — гипотезы для проверки условий, а не готовый диагноз.
Таблица сочетаний с ожидаемой суммой
Ниже учебный пример, не данные магазина или результат работ. Товар А стоит 1000 рублей, товар Б — 500 рублей, по одной штуке. Доставка — 300 рублей; цены уже включают применимые налоги, отдельного пересчёта налогов в примере нет. Бонусы, валюта и платёжные комиссии исключены.
Сначала применяется акция на товар А, затем разрешённый промокод. Порог бесплатной доставки — 1400 рублей по стоимости товаров после всех скидок, без доставки. Каждая строка таблицы — самостоятельный сценарий; бесплатная доставка включена только в двух последних строках.
| Условия | Товары после скидок, ₽ | Доставка, ₽ | К оплате, ₽ |
|---|---|---|---|
| Без скидок | 1500 | 300 | 1800 |
| Только акция: −10% на А | 1400 | 300 | 1700 |
| Только промокод −10% на оба товара | 1350 | 300 | 1650 |
| Акция на А, затем −10% на оба товара | 1260 | 300 | 1560 |
| Акция на А, промокод −10% только на Б: акционный А исключён | 1350 | 300 | 1650 |
| Акция на А, затем фиксированный промокод −200 ₽ на корзину; сочетание разрешено | 1200 | 300 | 1500 |
| Акция на А, без промокода; бесплатная доставка от 1400 ₽ | 1400 | 0 | 1400 |
| Акция на А и −10% на оба товара; тот же порог доставки | 1260 | 300 | 1560 |
Четвёртая строка рассчитывается так: А — 900 рублей после акции, Б — 500; после промокода товары стоят 810 + 450 = 1260 рублей. В последней строке эта сумма ниже порога, поэтому доставка платная. Если правила магазина обещают порог до скидок, ожидаемый итог будет другим — таблицу нужно изменить до разработки.
Для округления нужен отдельный пример. При трёх единицах по 99,90 рубля и скидке 15% получается 84,915 рубля за единицу. Если округлять половину копейки вверх на каждой единице, товары стоят 84,92 × 3 = 254,76 рубля. Если сначала посчитать всю строку и округлить её тем же способом, получится 254,745 → 254,75 рубля. Разница в копейку сама по себе не определяет правильный вариант: его задаёт согласованное правило.
Как найти место расхождения и принять исправление
Повторите выбранную строку таблицы на тестовой копии. Зафиксируйте версию движка и модуля скидок, состав корзины, статус покупателя, время с часовым поясом и ожидаемый расчёт. Снимки экрана очищайте от контактов покупателей, ключей и платёжных данных.
Сравнивайте значения по цепочке: карточка товара → корзина → выбор доставки → сохранённый заказ → тестовая платёжная форма. На каждом шаге записывайте товары после скидок, доставку и итог. Первая неверная величина помогает сузить поиск.
Проверяйте гипотезы по одной:
- Не та база скидки. Сопоставьте расчёт от исходной и акционной цены; подтверждение — расхождение начинается именно при добавлении второй акции.
- Исключение или несовместимость. Возьмите разрешённый и исключённый товар; отсутствие скидки может соответствовать настройке, а не быть ошибкой.
- Порог доставки. Проверьте сумму ровно на пороге, на копейку ниже и выше при одинаковом адресе и способе доставки.
- Округление. Сравните цену единицы, итог строки и распределение скидки; не маскируйте расхождение ручной поправкой общего итога.
- Устаревший пересчёт. Удалите промокод, измените количество и вернитесь к оформлению. Старый итог в одном интерфейсе требует проверки обновления данных, но не доказывает причину без сверки сервера.
Исправление принято, когда согласованные строки и граничные суммы проходят, удаление промокода восстанавливает расчёт, повторное открытие корзины не добавляет скидку снова, а итог сохранённого заказа совпадает с суммой тестового платежа. Возврат или частичная отмена требуют отдельного сценария распределения скидки, если магазин поддерживает эти операции.
Если вместе с расчётом пропадают товары или заказы, полезен отдельный разбор локализации ошибок OpenCart. Если итог верен, но платёж не завершается, следующий участок описан в разборе сбоев оплаты.
Что запросить у подрядчика
Нужны схема расчёта с приоритетами и исключениями, заполненная таблица «ожидание — факт», перечень версий и первая подтверждённая точка расхождения. Для выпуска согласуйте проверку соседних сценариев и способ отката изменения.
Одного видео с правильной суммой недостаточно. В протоколе должны быть исходные условия и результат каждого сценария, чтобы другая команда могла повторить проверку. Пароли и персональные данные для такого протокола не нужны.
Как это решает OpenStart
OpenStart принимает задачи по корзине, оформлению заказа и существующему коду: сначала уточняет симптом и ожидаемый результат, затем согласует диагностику или доработку и критерии приёмки. Объём зависит от состояния проекта и того, какие модули участвуют в расчёте.
Если ваша команда может воспроизвести сценарии и исправить настройку на тестовой копии, таблицы достаточно для самостоятельной работы. Помощь уместна, когда несколько расширений меняют одну сумму, причина не локализована или нужен контролируемый выпуск изменения.
Для оценки задачи подготовьте один обезличенный пример корзины, условия акции, ожидаемую и фактическую сумму. Передайте задачу на доработку OpenStart: команда уточнит вводные и согласует объём проверки до начала работ.
Частые вопросы
Почему два промокода по 10% не дают скидку 20%?
При последовательном применении второй процент считают от уменьшенной базы: от 1000 рублей остаётся 810. Возможность сочетания и порядок расчёта нужно сверить с условиями конкретной акции.
Промокод принят, но доставка платная — это ошибка?
Не обязательно. Нужно отдельно проверить право на бесплатную доставку и базу её порога. Скидка на товары сама по себе не означает скидку на доставку.
Можно ли исправить только сумму на экране?
Только если серверный расчёт уже верен и подтверждён. Иначе сохранённый заказ или тестовый платёж продолжат получать другое значение; нужна проверка всей цепочки.
Когда нужна доработка, а когда достаточно настройки?
Если штатные условия выражают нужное правило и контрольные сценарии проходят после настройки, отдельный код может не потребоваться. Если механика не поддерживается либо модули конфликтуют, сначала локализуют причину и согласуют изменение.