Разделите интеграцию на четыре процесса

  1. получение/обновление справочника ПВЗ;
  2. расчёт доступных тарифов;
  3. создание отправления после заказа;
  4. синхронизация статусов и трек-номера.

Что лучше не делать в реальном времени

ОперацияРекомендация
ПВЗкэшировать локально
Расчёт тарифазапрашивать по актуальной корзине
Создание отправленияпосле фиксации заказа
Статусыwebhook/polling по регламенту
Справочники городовлокальный кэш/обновление
Повтор созданиязащищать external order id

Checkout должен пережить временный сбой API

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

Пример структуры локального заказа

JSON
{
  "order_id": 12345,
  "delivery_provider": "cdek",
  "delivery_tariff_id": 999,
  "pickup_point_code": "ABC1",
  "delivery_price": 450,
  "external_delivery_id": null,
  "delivery_status": "pending_create"
}

ПВЗ и тариф должны соответствовать друг другу

После выбора ПВЗ перепроверяйте, что пункт доступен для нужного типа отправления и тарифа. Не доверяйте только данным, которые пришли из браузера: сервер должен валидировать delivery price и выбранный ПВЗ.

Отслеживание статуса

Храните внешний идентификатор отправления и историю ключевых статусов. Клиенту полезнее видеть понятные стадии заказа, чем внутренние коды API.

Что проверять перед запуском

СценарийПроверка
Несколько товароввес/габариты считаются правильно
ПВЗ закрыт/изменёнвыбор обновляется
API timeoutзаказ не теряется
Повтор созданиянет второй накладной
Статус доставкиобновляется в заказе
Изменение состава корзинытариф пересчитан

Связанные материалы