Skip to content

Доставка

Расчёт доставки для виджета. Запрос идёт с cookie витрины и токеном CSRF.

Расчёт доставки

Метод отвечает, только если в магазине включён виджет доставки. Иначе статус 403 без тела.

address_data обязателен. В него кладут результат подсказки адреса: город, индекс, код КЛАДР. variant_id считает доставку для одной модификации. Несколько модификаций передают объектом variants: ключ — id модификации, значение — количество.

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

POST/front_api/deliveries/calculate.json
Параметр Описание
address_data обязательный
объект
Результат подсказки адреса: город, индекс, код КЛАДР.
variant_id необязательный
число
Считать доставку для одной модификации.
variants необязательный
объект
Несколько модификаций: ключ — id, значение — количество.
const csrfToken = document.querySelector('meta[name="csrf-token"]').content;

const response = await fetch("/front_api/deliveries/calculate.json", {
  method: "POST",
  credentials: "same-origin",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/json",
    "X-CSRF-Token": csrfToken
  },
  body: JSON.stringify({
    variant_id: 2176487200,
    address_data: {
      city: "Москва",
      zip: "101000",
      kladr_id: "7700000000000"
    }
  })
});
const data = await response.json();

Ответ · 200

{
  "deliveries": [
    {
      "id": 9,
      "position": 0,
      "title": "Самовывоз",
      "description": "<p>На пункте выдачи</p>",
      "price": 0,
      "show_price": true,
      "charge_up_to": null,
      "delivery_interval": {
        "min_days": null,
        "max_days": null,
        "description": ""
      },
      "errors": [],
      "warnings": []
    },
    {
      "id": 17,
      "position": 1,
      "title": "Курьером",
      "description": "<p>Доставка курьером&nbsp;</p>",
      "price": 300,
      "show_price": true,
      "delivery_interval": {
        "min_days": null,
        "max_days": null,
        "description": ""
      },
      "errors": [],
      "warnings": []
    }
  ]
}

У способа с диапазоном цены вместо price приходят price_min и price_max. show_price: false значит, что цену в виджете показывать не нужно. errors не прячет способ: виджет может показать текст ошибки.

Запрос не записывает адрес в корзину. Он только считает стоимость.