Заказ
Быстрый заказ забирает текущую корзину браузера. Перед запросом в корзине должен лежать хотя бы один товар. Обязательны телефон, способ доставки, способ оплаты и все поля, которые магазин пометил обязательными в оформлении заказа.
Id доставки и оплаты шаблон берёт из account.delivery_variants и account.payment_gateways. Способ оплаты должен быть разрешён для выбранной доставки, доставка должна быть доступна в регионе покупателя.
Успешный заказ
Согласие на обработку персональных данных передаётся полем client[consent_to_personal_data] со значением 1, если магазин сделал это поле обязательным.
| Параметр | Описание |
|---|---|
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.