Если стоимость доставки считается неправильно, магазин теряет деньги при заниженном тарифе или заказы при завышенной сумме. Ошибка часто проявляется только для определенного города, способа доставки, набора товаров или порога бесплатной доставки.
Нужно воспроизвести конкретную корзину и сохранить все входные параметры расчета. Сравнение только итоговой суммы не показывает, где разошлись вес, зона, надбавка или округление.
Соберите контрольные корзины
Подготовьте несколько сценариев на границах правил и сравните сайт с ручным расчетом.
- Цена отличается для одного города или пункта выдачи.
- После добавления второго товара доставка неожиданно дешевеет.
- Бесплатная доставка включается раньше или позже порога.
- Сумма в корзине отличается от суммы в оформленном заказе.
Почему возникает проблема
Расчет зависит от каталога, адреса, тарифной сетки и последовательности применения скидок.
- У товара отсутствует вес, объем или единица измерения.
- Адрес сопоставлен с неправильной зоной или индексом.
- API службы доставки использует другой тип тарифа.
- Порог бесплатной доставки считается до скидки вместо суммы после скидки.
- Старый тариф хранится в кеше или настройках CMS.
Пошаговая диагностика
Логируйте обезличенные входные данные и промежуточные этапы формулы.
- Зафиксируйте состав корзины, вес, габариты, адрес и выбранный метод.
- Получите исходный запрос и ответ API доставки.
- Сверьте тариф, валюту, НДС, надбавки и округление.
- Проверьте порядок скидки, промокода и бесплатного порога.
- Повторите расчет без кеша и сравните frontend с backend.
Один расчет должен выполняться на backend
Frontend может показывать предварительную оценку, но итоговая сумма должна формироваться единой серверной логикой.
- Корзина передает стабильные ID товаров и количество.
- Вес и габариты нормализуются в одной системе единиц.
- Адрес проходит одинаковую нормализацию.
- Ответ службы доставки сохраняется для аудита заказа.
Как исправить проблему
Исправляйте данные каталога и формулу до изменения итоговой цены вручную.
- Заполните обязательные логистические параметры товаров.
- Исправьте сопоставление зон, индексов и методов доставки.
- Унифицируйте серверную формулу и порядок скидок.
- Обновите тарифы и очистите адресный кеш.
- Добавьте тесты на граничные суммы и смешанные корзины.
Как проверить результат
- Контрольные корзины совпадают с ручным расчетом.
- Цена не меняется между корзиной и заказом без причины.
- Порог бесплатной доставки работает на границах.
- Ошибки API дают понятный fallback, а не нулевую стоимость.
Типичные ошибки
- Считать итог независимо на frontend и backend.
- Подставлять нулевой вес для отсутствующих данных.
- Кешировать цену без адреса и состава корзины.
- Исправлять один город общей надбавкой для всех.
Как предотвратить повторение
- Валидируйте вес и габариты при публикации товара.
- Храните версию тарифов и ответ API в заказе.
- Добавьте набор автоматических контрольных корзин.
- Мониторьте резкие отклонения средней стоимости доставки.
Когда нужна помощь
Если сайт неверно считает доставку, я разберу входные данные, API перевозчика, зоны, тарифы и формулу корзины, исправлю расчет и добавлю контрольные тесты.