Дубли и данные
Заказ сохраняется без товаров: проверка транзакции
Заказ появился в панели, но внутри нет товаров. Разберём, как проверить целостность сохранения и не принять пустую запись за нормальную покупку.
Что происходит и с чего начать
Заказ обычно состоит из нескольких связанных записей: общей информации, позиций, сумм и других данных. Если они сохраняются несогласованно, ошибка на одном шаге может оставить пустую оболочку заказа. Поэтому сначала выясните, отсутствуют ли товары в базе или только не отображаются в панели. Это разные ситуации. Сохраните номер, время и состав исходной корзины. Не добавляйте позиции вручную до фиксации: такая правка может скрыть причину и не объяснить, какие суммы уже ушли в оплату.
Что можно проверить самостоятельно
- Запишите номер заказа, время и исходный состав корзины. Уточните, видел ли покупатель успех, ошибку или переход на оплату, и произошло ли реальное списание.
- Сравните пустой заказ с обычным тестовым: товары, обязательные варианты, скидки и способ оформления. Отметьте, касается ли проблема конкретной позиции или всех покупок.
- Проверьте, видны ли товары в других представлениях заказа, например уведомлении или интеграции. Не считайте письмо окончательным доказательством сохранения: оно могло формироваться из исходной корзины.
Как понять результаты проверки
Транзакция позволяет сохранять связанные изменения базы как единое целое: либо весь согласованный набор, либо откат при ошибке. Но её границы должны включать нужные записи и не подменять контроль внешних операций. Например, уже созданный платёж не исчезнет автоматически от отката базы. Разработчик проверяет порядок сохранения и запуск побочных действий. Заказ не должен объявляться готовым, если обязательные позиции ещё не записаны. При этом ошибка отображения устраняется отдельно и не требует повторного создания существующих товаров заказа.
Что проверяет разработчик
Для этой части понадобятся доступ к настройкам, журналам ошибок или коду. Её можно передать специалисту вместе с результатами предыдущих шагов.
- Сравните входные данные checkout с сохранённым заказом. Уточните, существовали ли позиции перед записью или потерялись ещё при чтении корзины.
- Найдите исключение между созданием заказа и сохранением товаров. Проверьте ограничения базы, ссылки на товар и обязательные поля позиции.
- Посмотрите границы транзакции и обработку ошибок. Перехваченное исключение может ошибочно превращаться в успешный ответ пользователю.
На что обратить внимание
Если заголовок сохраняется отдельно, а запись позиций падает, база остаётся в промежуточном состоянии. Сходный результат возможен при очистке корзины до завершения сохранения.
Как исправляют причину
Обеспечьте атомарность связанных записей и очищайте корзину только после подтверждённого результата. Для внешних действий используйте отдельный согласованный механизм: транзакция базы не откатывает уже отправленный запрос провайдеру.
Как убедиться, что проблема решена
На копии вызовите ошибку при сохранении одной позиции. Незавершённый заказ не должен выглядеть успешно оформленным, а повтор должен сохранить весь состав без дубля.
После исправления проверьте обычную корзину и сценарий отказа одной позиции в тестовой среде. В первом случае состав и сумма должны совпадать на всех этапах, во втором не должен оставаться ложный завершённый заказ. Старые пустые записи сверяйте с оплатой отдельно. Приёмка должна подтверждать целостную покупку, а не только появление хотя бы одной строки в панели магазина.