Корзина посетителя
GET /shopping возвращает состояние покупок. POST /cart/items добавляет выбранный вариант. PUT /cart заменяет состав корзины. Cookie связывает корзину с посетителем; чужая корзина не становится доступной по ID.
POST /api/v1/cart/items
{
"generationId": "<из GET /session>",
"variantId": "<из карточки товара>",
"quantity": 1
}Оформление и повторные нажатия
POST /checkout принимает состав, покупателя, доставку, согласия и idempotencyKey. Ключ повторного запроса сохраняется для одной попытки оформления: повтор с теми же данными возвращает тот же заказ. Для нового заказа нужен новый ключ.
Сервер проверяет контакты, оба согласия, доступность и цену. Курьерская доставка и самовывоз имеют разные обязательные поля. GET /checkout возвращает стоимость курьерской доставки.
- generationId — актуальное состояние стенда.
- items — варианты и количество.
- customer и delivery — контакты и способ получения.
- acceptedPrivacy и acceptedDataProcessing — два отдельных согласия.
- idempotencyKey — защита одной операции от дублирования.
Оплата, отказ и возврат
На этом стенде используются локальные тестовые платежные профили. Подтверждение оплаты, отказ, повтор и возврат отражаются в заказе и тестовых чеках. Настоящие деньги и фискальные документы здесь не обрабатываются.
В коммерческом запуске подключаем согласованный эквайринг и фискализацию, проверяем подписи уведомлений, повторные события и сценарии возврата. Это отдельный этап интеграции.
Один заказ — одна ссылка
В списке работают поиск по номеру, покупателю и товару, фильтры по статусу, оплате, источнику и периоду. Условия сохраняются в адресе страницы. Столбцы можно включать, переставлять и менять по ширине; CSV выгружает весь отфильтрованный список.
Покупатель открывает /orders/{id}, оператор — /admin/orders/{id}. В карточке находятся состав, доставка, источник перехода, платежи, чеки и статусы. API возвращает только заказ, доступный текущему посетителю, либо требует административного доступа.
Посмотреть заказыЛюбой период и согласованные показатели
История содержит 3 006 подготовленных заказов за 365 дней. В заказах, обзоре и аналитике можно выбрать сегодня, вчера, последние 7, 30, 90 или 365 дней, текущий или прошлый месяц, текущий год, все время либо свои даты.
Начальная и конечная даты включены полностью, по московскому времени. Выборка считается по дате создания заказа; посетители — по первому визиту. График, суммы и переход к заказам используют тот же период. Поиск, источник, оплата и статус дополнительно сужают список и его показатели. Выбранные условия сохраняются в ссылке, а CSV включает все найденные строки.
API принимает from и to в формате ГГГГ-ММ-ДД или days=all / число дней. Обратный диапазон, неверная дата и интервал больше 10 лет возвращают 400 с кодом invalid_period. Новая история добавляется без повторного списания складских остатков и без изменения существующих заказов.
GET /api/v1/admin/orders?from=2026-10-01&to=2026-10-31
GET /api/v1/admin/analytics?from=2026-10-01&to=2026-10-31
GET /api/v1/admin/overview?days=365