Доставка СДЭК
Доставку СДЭК считает и оформляет сервер платформы на ключах продавца. Витрина показывает виджет СДЭК, передаёт выбор покупателя и выводит цену и срок. Ключи продавца в браузер не попадают.
Путь доставки
Заголовок раздела «Путь доставки»-
Витрина запрашивает
cdekWidgetParamsи открывает виджет СДЭК с этими параметрами.null— СДЭК у магазина не настроен, доставку не предлагайте. -
Покупатель выбирает пункт выдачи или адрес. Виджет ходит за пунктами и ценами в сервис виджета платформы.
-
Витрина вызывает
setCdekDeliveryс выбором. Сервер сам узнаёт у СДЭК цену и назначает заказу доставку. -
Перед оплатой витрина повторяет
setCdekDeliveryс тем же выбором. Сервер пускает заказ в оплату только со свежей ценой. -
После оплаты сервер создаёт отправление в СДЭК (если продавец включил автосоздание) и позже получает номер для отслеживания.
Параметры виджета
Заголовок раздела «Параметры виджета»query CdekWidgetParams { cdekWidgetParams { senderCityCode tariffs { office door } parcels { length width height weight } }}| Поле | Что это |
|---|---|
senderCityCode |
Код города отправки СДЭК |
tariffs.office |
Тарифы до пункта выдачи, которые разрешил продавец |
tariffs.door |
Тарифы до двери |
parcels |
Места текущей корзины с габаритами (см) и весом (г) — для расчёта в виджете |
По умолчанию тарифы — 136 и 234 до пункта выдачи, 137 и 233 до двери. Продавец меняет их в Настройки → Доставка СДЭК.
Места собираются из корзины по правилам продавца: габариты берутся с варианта товара, недостающие — из умолчаний магазина. Небольшой заказ едет по единице на место, крупный укладывается в минимальное число коробок.
Сервис виджета
Заголовок раздела «Сервис виджета»Виджет СДЭК 4.x ищет пункты выдачи и считает цены через сервис на стороне магазина. На платформе это:
https://api.fluttrium.store/cdek/widget?channel=<токен магазина>Передайте адрес виджету в servicePath. Магазин выбирается параметром
channel, а не заголовком. Сервис отвечает заголовком
X-Service-Version: 4.0.0: виджет сверяет мажорную версию и с другой
работать не будет, поэтому версию виджета закрепляйте на 4.x.
Котировки СДЭК кешируются на 10 минут, данные пунктов выдачи — на сутки.
Выбор покупателя
Заголовок раздела «Выбор покупателя»mutation SetCdekDelivery($input: SetCdekDeliveryInput!) { setCdekDelivery(input: $input) { __typename ... on Order { code shippingWithTax totalWithTax cdekDelivery { mode tariffCode tariffName periodMin periodMax doorAddress trackingNumber deliveryPoint { code name address city cityCode postalCode workTime } } } ... on CdekDeliveryError { errorCode message reason } }}{ "input": { "mode": "OFFICE", "tariffCode": 136, "deliveryPointCode": "MSK123" } }До двери — mode: "DOOR" и address: { address, city, postalCode }. Город
и индекс передавайте, если они есть: по ним СДЭК точнее определяет адрес, и
цена не расходится. Мутация отправляется в сессии покупателя, работает с его
активным заказом.
Ошибки приходят данными, в поле reason:
reason |
Когда |
|---|---|
NOT_CONFIGURED |
У магазина нет ключей или настроек СДЭК |
SHIPPING_METHOD_MISSING |
Способ доставки СДЭК в магазине не включён или недоступен для этого заказа |
NO_ACTIVE_ORDER, EMPTY_ORDER |
Нет корзины или она пуста |
TARIFF_NOT_ALLOWED |
Магазин не предлагает этот тариф |
TARIFF_UNAVAILABLE |
Тариф недоступен по этому направлению |
POINT_NOT_FOUND |
Пункт выдачи не выбран или не найден |
ADDRESS_REQUIRED |
Для доставки до двери не передан адрес |
CDEK_UNAVAILABLE |
СДЭК не ответил, стоит повторить |
Выбранная доставка всегда доступна в заказе: activeOrder { cdekDelivery { … } }.
Проверка перед оплатой
Заголовок раздела «Проверка перед оплатой»При переходе заказа в ArrangingPayment сервер проверяет доставку СДЭК.
Переход отклоняется ошибкой с понятным покупателю текстом, если:
- пункт выдачи или адрес не выбран;
- у адреса нет имени и телефона получателя — без них СДЭК не примет отправление;
- цена в заказе разошлась с актуальной ценой СДЭК на текущих условиях (котировка старше 30 минут или изменились корзина, тариф, адрес).
Повторите setCdekDelivery с тем же выбором прямо перед переходом к оплате
— тогда котировка свежая, и проверка проходит без лишнего запроса в СДЭК.
Отправления и отслеживание
Заголовок раздела «Отправления и отслеживание»| Что | Когда |
|---|---|
| Отправление создаётся | После оплаты, если в настройках включено автосоздание. При сбое — до 8 повторов. Иначе вручную кнопкой в заказе |
| Номер отслеживания | Сразу, если СДЭК присвоил его при создании, иначе фоновая задача дозапрашивает каждые 10 минут |
| Покупатель видит номер | Order.cdekDelivery.trackingNumber |
| Письмо «передан в СДЭК» | Когда появился номер, если у магазина включены письма о заказе |
Ссылка на отслеживание в письме —
https://www.cdek.ru/ru/tracking?order_id=<номер>.
В Admin API для админки есть cdekCreateShipment(orderId) — создать
отправление, в том числе повторно после неудачи, и
cdekRefreshShipment(orderId) — подтянуть номер и статус.
Учебный режим
Заголовок раздела «Учебный режим»В настройках СДЭК есть тестовый режим: сервер работает с учебным API СДЭК
(api.edu.cdek.ru), отправления не уходят в настоящую доставку. Ключи для
него — тестовые ключи СДЭК, а не боевые.