Описать проблему ↗

Дубли и данные

Заказ сохраняется без товаров: проверка транзакции

Заказ появился в панели, но внутри нет товаров. Разберём, как проверить целостность сохранения и не принять пустую запись за нормальную покупку.

Редакция «починимсайт» · Обновлено · 3 мин. чтения

Что происходит и с чего начать

Заказ обычно состоит из нескольких связанных записей: общей информации, позиций, сумм и других данных. Если они сохраняются несогласованно, ошибка на одном шаге может оставить пустую оболочку заказа. Поэтому сначала выясните, отсутствуют ли товары в базе или только не отображаются в панели. Это разные ситуации. Сохраните номер, время и состав исходной корзины. Не добавляйте позиции вручную до фиксации: такая правка может скрыть причину и не объяснить, какие суммы уже ушли в оплату.

Что можно проверить самостоятельно

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

Как понять результаты проверки

Транзакция позволяет сохранять связанные изменения базы как единое целое: либо весь согласованный набор, либо откат при ошибке. Но её границы должны включать нужные записи и не подменять контроль внешних операций. Например, уже созданный платёж не исчезнет автоматически от отката базы. Разработчик проверяет порядок сохранения и запуск побочных действий. Заказ не должен объявляться готовым, если обязательные позиции ещё не записаны. При этом ошибка отображения устраняется отдельно и не требует повторного создания существующих товаров заказа.

Что проверяет разработчик

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

  1. Сравните входные данные checkout с сохранённым заказом. Уточните, существовали ли позиции перед записью или потерялись ещё при чтении корзины.
  2. Найдите исключение между созданием заказа и сохранением товаров. Проверьте ограничения базы, ссылки на товар и обязательные поля позиции.
  3. Посмотрите границы транзакции и обработку ошибок. Перехваченное исключение может ошибочно превращаться в успешный ответ пользователю.

На что обратить внимание

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

Как исправляют причину

Обеспечьте атомарность связанных записей и очищайте корзину только после подтверждённого результата. Для внешних действий используйте отдельный согласованный механизм: транзакция базы не откатывает уже отправленный запрос провайдеру.

Как убедиться, что проблема решена

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

После исправления проверьте обычную корзину и сценарий отказа одной позиции в тестовой среде. В первом случае состав и сумма должны совпадать на всех этапах, во втором не должен оставаться ложный завершённый заказ. Старые пустые записи сверяйте с оплатой отдельно. Приёмка должна подтверждать целостную покупку, а не только появление хотя бы одной строки в панели магазина.