Skip to content

Заказ

Быстрый заказ забирает текущую корзину браузера. Перед запросом в корзине должен лежать хотя бы один товар. Обязательны телефон, способ доставки, способ оплаты и все поля, которые магазин пометил обязательными в оформлении заказа.

Id доставки и оплаты шаблон берёт из account.delivery_variants и account.payment_gateways. Способ оплаты должен быть разрешён для выбранной доставки, доставка должна быть доступна в регионе покупателя.

Успешный заказ

Согласие на обработку персональных данных передаётся полем client[consent_to_personal_data] со значением 1, если магазин сделал это поле обязательным.

POST/fast_checkout.json
Параметр Описание
client[name] необязательный
строка
Имя. Набор обязательных полей у каждого магазина свой.
client[phone] обязательный
строка
Телефон.
client[email] необязательный
строка
Email.
client[consent_to_personal_data] обязательный
строка
Согласие на обработку персональных данных. Значение 1, если магазин требует это поле.
order[delivery_variant_id] обязательный
число
id доставки из account.delivery_variants.
order[payment_gateway_id] обязательный
число
id оплаты из account.payment_gateways. Способ должен быть разрешён для выбранной доставки.
const csrfToken = document.querySelector('meta[name="csrf-token"]').content;
const body = new URLSearchParams({
  "client[email]": "buyer@example.com",
  "client[name]": "Антон",
  "client[phone]": "+7 (111) 111-11-11",
  "client[consent_to_personal_data]": "1",
  "order[delivery_variant_id]": "17",
  "order[payment_gateway_id]": "6101770"
});

const response = await fetch("/fast_checkout.json", {
  method: "POST",
  credentials: "same-origin",
  headers: {
    Accept: "application/json",
    "Content-Type": "application/x-www-form-urlencoded",
    "X-CSRF-Token": csrfToken
  },
  body
});
const data = await response.json();

Ответ · 200

{
  "status": "ok",
  "location": "/orders/b98a9351fc48974e1c9f6719366b374d",
  "order": {
    "id": 5,
    "number": 1004,
    "key": "b98a9351fc48974e1c9f6719366b374d",
    "items_price": 84990.0,
    "delivery_price": 300.0,
    "total_price": 85290.0,
    "delivery_title": "Курьером",
    "payment_title": "Наличными или картой при получении"
  }
}

location — адрес страницы заказа, в нём ключ заказа. В order есть номер, суммы, order_lines, client, shipping_address, скидки и статусы.

Ошибка проверки

Тот же запрос без согласия:

{
  "status": "unprocessable_entity",
  "errors": {
    "client.consent_to_personal_data": [
      "Не заполнено обязательное поле \"Согласие на обработку персональных данных\""
    ]
  },
  "client_errors": {
    "consent_to_personal_data": [
      "Не заполнено обязательное поле \"Согласие на обработку персональных данных\""
    ]
  },
  "shipping_address_errors": {}
}

errors — сводка по заказу. client_errors и shipping_address_errors разбирают поля покупателя и адреса. Набор обязательных полей у каждого магазина свой: имя, телефон и согласие в этом примере не универсальный список.

Собственные поля оформления заказа передаются их id, шаблонизатор их не печатает.

Заказ в один клик

POST /quick_checkout.json создаёт заказ из формы «в один клик», не из основной корзины. Общий вид тела — поля client[...] и состав variants. На магазине, где форма не настроена, этот адрес отвечает страницей ошибки, а не JSON. Подключайте его только там, где в бэк-офисе есть форма быстрого заказа.

Альтернативный адрес той же операции в темах — POST /orders/create_with_quick_checkout.json.