Кактус: для разработчиков
Адрес API: https://app.kak2c.ru/ Адрес API тестового контура: https://app-test.kak2c.ru/
- Базовая схема интеграции с Кактусом
- Варианты интеграции с сайтом (подключение собственного интернет-магазина)
- Виджет корзины
- Руководство для разработчиков виджета корзины
- Настройка Google Analytics и Yandex Metrica для корзины
- Стилизация корзины
- Замена иконки корзины по умолчанию на собственную
- Интеграция в Ecwid
- Интеграция в Tilda
- Открытие попапа корзины при каждом добавлении в нее товара
- Интеграция в LPMotor
- Интеграция в WordPress
- Интеграция с Platforma LP
- Интеграция с MODX
- Интеграция с Shop-Script
- Интеграция с Magento
- Интеграция с Insales
- Карта ПВЗ
- Витрина Кактус
- Авторизация
- Аккаунт
- /api/lite/pub/register
- /api/lite/pub/email/quote
- /api/lite/registration_init
- /api/lite/pub/password_reset
- /api/lite/pub/password_reset_confirm
- /api/lite/notifications
- /api/lite/account_info
- /api/lite/privileges
- Товары
- Комментарии по синхронизации товаров и остатков
- /api/lite/products
- /api/lite/products/attributes
- /api/lite/products/features
- /api/lite/products/filters
- /api/lite/products/image
- /api/lite/products/variants
- /api/lite/file/image
- /api/lite/pub/products
- /api/lite/pub/products/filters
- /api/lite/products/templates/items
- /api/lite/products/additional_descriptions
- /api/lite/products/reviews
- /api/lite/pub/products/reviews
- /api/lite/products/features/appearance
- /api/lite/pub/products/features/appearance
- /api/lite/products/export_ff
- /api/lite/products/accounting_attributes
- /api/lite/products/stock_revise
- /api/lite/products/wb_categories
- /api/lite/products/delete_barcodes_ff
- /api/lite/products/history
- /api/lite/products/history/diff
- /api/lite/products/batch
- /api/lite/products/batch/accounting/stocks
- /api/lite/products/variants/batch
- API загрузки уникальных номеров номенклатуры в Кактус
- /api/lite/products/variants/eshop_settings
- /api/lite/products/warehouse/categories
- /api/lite/products/stocks
- Коллекции
- Заказы
- Комментарии по выгрузке заказов в Кактус
- /api/lite/orders
- /api/lite/orders/cancelled
- /api/lite/orders/confirm
- /api/lite/orders/payment
- /api/lite/orders/delivery_result
- /api/lite/orders/history
- /api/lite/orders/invoice_and_stiсker
- /api/lite/orders/items
- /api/lite/orders/nearest
- /api/lite/orders/receiver
- /api/lite/orders/refresh-reserve
- /api/lite/orders/statuses
- /api/lite/orders/packing
- /api/lite/orders/packing_control
- /api/lite/orders/tag
- /api/lite/orders/calc_insurance_sum
- /api/lite/tag
- /api/lite/report/order
- /api/lite/pub/orders
- /api/lite/pub/order-discount
- /api/lite/pub/payment
- /api/lite/pub/orders/discount
- /api/lite/orders/copy
- /api/lite/pub/promocode/conditions/check
- /api/lite/orders/receiver/address
- /api/lite/orders/file
- /api/lite/orders/file/edit
- /api/lite/orders/discounts
- /api/lite/orders/email/repeat
- /api/lite/orders/sync_ff
- /api/lite/orders/delivery
- /api/lite/orders/comments
- /api/lite/orders/diff_history
- /api/lite/orders/packing_export
- /api/lite/orders/add_wb_barcodes
- Комментарии по анализу возвратов от фулфилмента
- /api/lite/pub/save_dadata_address
- /api/lite/bitrix/address
- /api/lite/orders/shipped/report
- /api/lite/orders/history/status
- /api/lite/orders/shipped/report/packings
- /api/lite/orders/shipped/report/cod
- /api/lite/orders/shipped/report/no/delivery/statuses
- /api/lite/orders/discounts
- Поставка на склад (Заказы поставщику)
- /api/lite/purchase_orders
- /api/lite/purchase_orders/history
- /api/lite/purchase_orders/confirm
- /api/lite/purchase_orders/accept_diff
- /api/lite/purchase_orders/set_in_process
- /api/lite/purchase_orders/completed
- /api/lite/purchase_orders/items/fact
- /api/lite/purchase_orders/file
- /api/lite/purchase_orders/file/edit
- /api/lite/purchase_orders/history/status
- Отгрузка заказов
- /api/lite/pickup_dates
- /api/lite/pickup_dates/planned
- /api/lite/takeout_list
- /api/lite/takeout_list/print
- Настройки аккаунта
- /api/lite/pub/settings/checkout
- /api/lite/settings/organization
- /api/lite/settings/catalog
- /api/lite/settings/checkout
- /api/lite/settings/counteragents
- /api/lite/settings/delivery-info-list
- /api/lite/settings/domainAlias
- /api/lite/settings/email/order
- /api/lite/settings/email/personal
- /api/lite/settings/offer-id-type
- /api/lite/settings/payment/payu
- /api/lite/settings/payment/robokassa
- /api/lite/settings/payment/yandex
- /api/lite/settings/payment-methods
- /api/lite/settings/pickup
- /api/lite/settings/promocode
- /api/lite/settings/user_notification
- /api/lite/settings/warehouses
- /api/lite/settings/price-types
- /api/lite/brief_report
- /api/lite/settings/countries
- /api/lite/settings/payment/portmone
- /api/lite/settings/email/templates
- /api/lite/settings/email/templates/init
- /api/lite/settings/users/roles
- /api/lite/settings/users
- /api/lite/settings/checkout/payment
- /api/lite/settings/checkout/delivery-region-settings
- /api/lite/settings/regions
- /api/lite/settings/adAttachments
- Тарификация
- Комментарии к использованию методов Тарификации
- /api/prompter/address
- /api/prompter/street
- /api/prompter/location
- /api/prompter/iplocation
- /api/lite/pub/check_pickup_location
- /api/lite/pub/products/dimensions
- /api/lite/pub/dimensions (deprecated)
- /api/lite/pub/dimensions-by-package
- /api/dlv/tariffs
- /api/dlv/delivery_points
- /api/dlv/delivery_point
- /api/lite/tariffs
- /api/lite/delivery_points
- /api/lite/delivery_point
- /api/prompter/region
- /api/prompter/countries
- Описание методов (old)
- Описание методов (old)
- /api/lite/pub/settings/catalog
- Методы API для системы "Кактус"
- /api/lite/pub/order
- Копия /api/lite/file/image
- Импорт/экспорт
- /api/lite/import/upload
- /api/lite/import/preview
- /api/lite/import/task
- /api/lite/import/process
- /api/lite/import/field_list
- /api/lite/export/sku
- /api/lite/import/templates/sku
- /api/lite/export/order
- Шаблоны подписок
- /api/lite/export/purchase_order
- /api/lite/import/order_field_list
- /api/lite/export/sku/movements/json
- /api/lite/export/sku/movements
- /api/lite/export/order/count
- /api/lite/import/templates/order
- /api/lite/export/order/now
- /api/lite/export/order/invoice
- api/lite/export/supply
- /api/lite/export/supply/count
- Дэшборд
- Личный кабинет покупателей
- /api/customer/account/register
- /api/customer/auth
- /api/customer/account/password_reset
- /api/customer/account/password_reset_confirm
- api/customer/info
- (POST) api/customer/info
- api/customer/orders
- api/customer/orders/cancelled
- Покупатели
- /api/lite/customers/
- /api/lite/customers/{email}
- POST /api/lite/customers/
- DELETE /api/lite/customers/
- customers.enable=true
- Фиды для Я.Маркета
- /api/lite/feed/settings
- /api/lite/feed/settings/download_yml
- /api/lite/feed/market_attributes
- /api/lite/feed/refresh
- FBO WB/OZON API
- /api/lite/orders/worksheet/form_template
- /api/lite/orders/worksheet
- /api/lite/orders/packing/fbm/sticker/file
- /api/lite/orders/packing/fbm/sticker
- /api/lite/orders/upload_fbm_docs_ff
- /api/lite/orders/pallet/fbm/sticker/file
- /api/lite/orders/pallet/fbm/sticker
- /api/lite/orders/packing/fbm/sticker/xls
- /api/lite/orders/fbo/delivery/warehouses
- Сервис уведомлений (Кактус)
- /api/lite/domain_notification
- GET /api/lite/domain_notification
- DELETE /api/lite/domain_notification
- /api/lite/domain_notification/{id}
- /api/lite/domain_notification/types
- /api/lite/domain_notification/channels
- Физические наборы
- /api/lite/physical_set_orders
- /api/lite/products/physical_sets
- /api/lite/products/sku_sets
- /api/lite/pub/products/sku_sets
- Наложенные платежи
- API osTicket
- Общее описание
- /api/tickets.json
- /api/tickets/get.json
- /api/tickets/thread.json
- /api/tickets/getunreaded.json
- /api/tickets/message.json
- /api/tickets/unreaded.json
- /api/tickets/gettopics.json
- /api/tickets/threads.json
- Биллинг
- Интеграции
- CAM
- Требования к передаче заказов
- Задание на стикерование
- Инструменты администратора
- Настройки интеграций с магазинами и маркетплейсами
- /api/lite/admin/settings/delivery-info - информация о доставке
- /api/lite/admin/settings/payment-method - информация о способе оплаты
- /api/lite/admin/settings/checkout - настройки чекаута
- /api/lite/admin/settings/lite - настройки lite
- /api/lite/admin/settings/warehouses - настройки склада
- /api/lite/admin/settings/stock-correction - коррекция остатков
- /api/lite/admin/settings/order-type - установка типа заказа
- /api/lite/products/find/barcodes - поиск вариантов товаров по ШК
- Маржинальность
- /api/lite/products/prices/margin/history - История изменения средней цены закупки.
- /api/lite/report/margin - пересчёт отчета по маржинальности.
- /api/lite/products/margin - расчёт отчёта по маржинальности для товара.
- Консолидация
- Упаковочные материалы
Базовая схема интеграции с Кактусом
Ниже представлен план запуска нового клиента
Схема движения товара
Общая схема интеграции
План действий для запуска нового клиента по API
Ниже описан поэтапный план запуска клиента по руководству для разработчика:
1. Создание аккаунта в Кактусе
https://lk.kak2c.ru/sign_up
2. Авторизация в API
Основной раздел "Авторизация"
Инструкция "/api/lite/auth"
3. Синхронизация номенклатуры
Инструкция "Запрос списка продуктов" (/api/lite/products)
4. Настройка вызова тарификатора и списка ПВЗ
Инструкция "Расчет тарифа" (/api/dlv/tariffs)
Инструкция "Список постоматов / ПВЗ (/api/dlv/delivery_points)
5. Расчет ориентировочных суммарных габаритов для заказа более чем с 1 вложимым
Инструкция "Получение габаритов условного минимального упакованного места"
или
Инструкция "Получение габаритов упаковки товаров по перечню параметров упаковок"
6. Карта ПВЗ
Если требуется вывод ПВЗ на карту на сайте - можно воспользоваться нашим компонентом:
Инструкция "Карта ПВЗ"
7. Настройка выгрузки поставок и мониторинг их статусов
Инструкция "Запрос списка поставок на склад (заказов поставщиков)"
Мониторинг статусов удобнее делать с использованием метки изменений: updated_from
Инструкция "Подтверждение поставки для ее выгрузки на склад"
8. Настройка выгрузки заказов и мониторинг их статусов
Инструкция "Запрос списка заказов"
Мониторинг статусов удобнее делать с использованием метки изменений: updated_from
Варианты интеграции с сайтом (подключение собственного интернет-магазина)
Варианты расположены по степени сложности - от самого простого до самого сложного (и более гибкого) варианта
Создание сайта | Интерфейс каталога товаров | Загрузка товаров в кактус | Корзина | Выгрузка заказов в кактус | |
1. Создание сайта используя витрину "Кактус" |
Сайт делается на витрине "Кактус" без помощи программиста |
Каталог товаров уже интегрирован с "Кактус" |
Товары изначально создаются в "Кактус" |
Умная корзина уже интегрирована |
Заказы автоматически выгружаются в "Кактус" |
2. Создание сайта на CMS (к примеру Wordpress/Bitrix/Tilda) и вставка каталога "Кактус" через IFrame |
Сайт делается программистом на CMS |
Каталог товаров уже интегрирован с "Кактус" |
Товары изначально создаются в "Кактус" |
Умная корзина уже интегрирована |
Заказы автоматически выгружаются в "Кактус" |
3. Создание сайта на CMS (к примеру Wordpress/Bitrix/Tilda) и подключение умной корзины "Кактус" |
Сайт делается программистом на CMS |
Каталог товаров необходимо верстать в CMS |
Товары необходимо заполнять как в CMS, так и в "Кактус" |
Умная корзина легко интегрируется в сайт |
Заказы автоматически выгружаются в "Кактус" |
4. Создание сайта на CMS (к примеру Wordpress/Bitrix) без подключения умной корзины |
Сайт делается программистом на CMS |
Каталог товаров необходимо верстать в CMS |
Товары необходимо заполнять как в CMS, так и в "Кактус" |
Необходимо настроить своё оформление заказа, которое затем разработчик должен подключить по API тарификации |
Необходимо настроить выгрузку заказов в "Кактус"
|
Виджет корзины
Руководство для разработчиков виджета корзины
Инициализация корзины:
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
document.addEventListener("DOMContentLoaded", function (){
var kak2c_domain = "shopXXXXXX"; // Укажите здесь Ваш идентификатор магазина
//Необязательные обработчики событий корзины. Могут использоваться например для генерации событий аналитики, вывода сообщений пользователю
//типа "товар добавлен в корзину" и т.п.
document.addEventListener("kaktusEvent", function (e){
//Здесь можно обработать любые изменения набора товаров в корзине, выбора доставки и т.п. Например вывести количество и сумму покупки в
//свою кастомную иконку корзины и это количество и сумма будут изменяться при любых действиях пользователя с корзиной.
var cart = kaktusWidget.getCart();
console.log(cart.items); //Получение товаров в корзине
console.log(cart.promocode); //Получение учтенного в цене заказа валидного промокода
//...
//Для обработки более специфичных событий, например отдельно только добавления товара в корзину, можно анализировать вид события: e.detail.type
//Добавление товара в корзину. Не важно - добавление нового или же увеличение количество уже существующего
if (e.detail.type == 'cart_item_add') {
//В e.detail.content.fromOutsidePopup содержится булево занчение, указывающее что товар был добавлен в корзину не при помощи
//кнопок "+" и "-" внутри попапа корзины. Может быть полезен поскольку сообщение "товар добавлен в корзину" не надо выводить,
//когда корзина уже открыта.
//Данные добавляемого товара (включая добавленное количество) находятся в e.detail.content.item.
//e.detail.content.item.count - количество, добавленное за данную операцию, а не всего в корзине
}
//удаление товара из корзины. Кнопкой удаления или клавишей минус. Не важно, удален ли товар или только уменьшено его количество.
if (e.detail.type == 'cart_item_removed') {
//Данные события аналогичны cart_item_add
}
//Другие события:
//init_complete - корзина инициализирована
//item_removed - удаление товара из корзины. Выполнятеся вместе с cart_item_removed, но только в том случае если товар полностью удален,
//а не только уменьшено количество
//order_created - создан заказ
});
//Собственно инициализация виджета корзины
kaktusWidget({
domain: kak2c_domain,
//Если это значение указано, корзина будет работать не с продакшн, а с тестовым сервером Кактус. При создании аккаунта на продакшн,
//на тестовом одноименный аккаунт автоматически не создается. Это надо учитывать при указании domain совместно с ключем host
host: '//app-test.kak2c.ru',
//Необязательные значения по умолчанию
default: {
city: 'Москва', // выбранный город доставки по умолчанию
promocode: 'promocodeName' // промокод, который будет применяться по умолчанию
},
//Необязательные коллбэки. Назначение похоже на события выше.
basketClickCallback: function(){
//Вызывается при открытии попапа корзины
},
newOrderCreatedCallback: function(){
//Вызывается при создании заказа
}
});
};
</script>
Добавление или удаление товар из корзины:
kaktusWidget.changeCart({
variantId: 12345, //ID варианта товара. Можно посмотреть в ЛК2. Если у товара не задано несколько вариантов id единственного варианта будет равен id товара.
//variantExtId: 'AB123CD', - можно указать вместо variantId. Тогда поиск варианта товара будет выполняться не по id а по полю "Внешинй Id".
//которому в ЛК можно задать любое произвольное значение. Например указать его равным артикулу товара. И таким образом реализовать добавление товара по артикулу.
count: 1, //Количество добавляемых или удаляемых товаров
operation: 'ADD' //или 'DELETE'
});
Автоматическое добавление промокода:
kaktusWidget.setDefaultPromocode('promocodeName'); // 'promocodeName' заменить на имя промокода
Примером использования событий и коллбэков корзины может служить работа с аналитикой.
Визуальная настройка иконки корзины описана здесь.
Полная замена иконки корзины на кастомную. Тоже может служить примером работы с событиями для обновления количества товаров в кастомной корзине, а также вывода сообщения "товар добавлен в корзину".
Настройка Google Analytics и Yandex Metrica для корзины
Базовая настройка аналитики:
kaktusWidget({
domain: kak2c_domain,
basketClickCallback: function(){
//События аналитики при открытии корзины
yaCounter53862778.reachGoal('checkout_started');
gtag('event', 'checkout_started', {
'event_category' : 'ecommerce'
});
},
newOrderCreatedCallback: function(){
//События аналитики при формированиии заказа
var goalParams = {
order_price: kaktusWidget.totalSum,
currency: "RUB"
}
yaCounter53862778.reachGoal('checkout_finished', goalParams);
gtag('event', 'checkout_finished', {
'event_category' : 'ecommerce'
});
},
});
dataLayer для расширенной электронной торговли Google Analytics совместно с Google Tag Manager корзина формирует автоматически. Также использование этого dataLayer можно настроить в Яндекс.Метрике: https://yandex.ru/support/metrica/data/e-commerce.html . Если к Вашей странице не подключена библиотека gtm.js и не настроен данный режим Яндекс.Метрики, это не на что не влияет. Однако если Вы собираетесь формировать эти события вручную, данный автоматический функционал можно отключить. Для этого при инициализации kaktusWidget укажите параметр enableDataLayer: false;
Кроме описанных выше событий открытия корзины и формирования заказа также можно использовать события добавления и удаления товаров в корзину. Для этого перед инициализацией виджета корзины добавьте следующий код:
document.addEventListener("kaktusEvent", function (e){
if (e.detail.type == 'cart_item_add') {
//Добавление товара в корзину. Данные добавляемого товара (включая добавленное количество) находятся в e.detail.content.item
}
if (e.detail.type == 'cart_item_removed') {
//Удаление товара из корзины. Данные товара (включая удаляемое количество) находятся в e.detail.content.item
}
});
В таком же обработчике событий можно реализовать более продвинутую google аналитику при оформлении заказа, которая передает не только сам факт покупки но и всю информацию о товарах в заказе. Для этого перед инициализацией виджета добавьте следующий код
document.addEventListener("kaktusEvent", function (e){
//создан заказ
if (e.detail.type == 'order_created') {
var content = e.detail.content;
var cart = kaktusWidget.getCart();
var items = cart.items.map(function (item) {
return {
"id": item.productId,
"name": item.name,
"price": item.price,
"quantity": item.count,
"brand": item.brandName,
}
});
var tansaction = {
"transaction_id": content.orderId,
"value": content.totalOrderSum,
"currency": "RUB",
"items": items,
}
gtag('event', 'purchase', tansaction);
}
});
Стилизация корзины
Иконка корзины имеет следующую структуру
<div className="basket-round">
<span className="basket-count">1</span>
<span className="basket-money">1234 ₽</span>
</div>
где
-
.basket-round
- собственно иконка -
.basket-count
- кружочек с количеством товаров в корзине -
.basket-money
- общая сумма товаров в корзине. Появляется в момент добавления в корзину товара и гаснет через некоторое время.
Задавая стили для этих классов в файле css Вашего сайта можно изменить внешний вид корзины. Например заменить цвет иконки корзины с черного на зеленый, а кружочек с количеством покупок из нижнего правого угла перенести в верхний левый:
.basket-round {
background-color: green !important;
}
.basket-count {
top: 0 !important;
left: 0;
right: auto !important;
}
Также имеется возможность полностью заменить иконку корзины на кастомную, например вписанную в заголовок Вашего сайта.
Замена иконки корзины по умолчанию на собственную
Для заменя иконки корзины по умолчанию на свою собственную, достаточно:
- Скрыть существующую иконку корзину (скрыть класс
.basket-round
) - Создать свои иконку корзины с любым другим дизайном и указать для неё класс
.custom-shopping-cart
- Если необходимо, в иконку корзины можно добавить иконку количества. Чтобы количество в ней обновлялось при любых действиях в корзине, нужно при событии
kaktusEvent
получать данные о товарахkaktusWidget.getCart().items
и обновлять цифру в иконке количества - Если необходимо, возможно сделать свой собственный попап "Товар добавлен в корзину". Для этого возможно при типе события
cart_item_add
отобразить свой попап.
Пример страницы с кастомной корзиной со всеми вышеперечисленными функциями:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Кастомная корзина</title>
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<style>
/*Скрывает иконку корзины по умолчанию. Примечание: используя этот же css-класс корзину можно не скрывать, а изменить ее дизайн. */
.basket-round {
display: none;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function (){
var kak2c_domain = "XXXXXX"; // Укажите здесь Ваш идентификатор магазина
document.addEventListener("kaktusEvent", function (e){
//Отображение количества товаров в корзине при любых его изменениях. Если Вашв иконка корзины не предусматривает отображения количества товаров - не обязетельно. ВНИМАНИЕ! 'custom-cart-quantity' заменить на ID элемента Вашей иконки корзины, в которой будет отображаться количество товаров.
var quantityEl = document.getElementById('custom-cart-quantity');
if (quantityEl) {
var cart = kaktusWidget.getCart().items;
if (cart) {
var count = cart.reduce(function(count, item) {
return count + item.count;
}, 0);
} else {
count = 0;
}
quantityEl.innerHTML = count;
};
//Сообщение "товар добавлен в корзину". Не обязательно.
if (e.detail.type == 'cart_item_add' && e.detail.content.fromOutsidePopup) {
alert('Товар добавлен в корзину');
}
});
kaktusWidget({
domain: kak2c_domain
});
//ВНИМАНИЕ! 'custom-shopping-cart' замените на атрибут ID Вашей кастомной иконки, при клике на которую Вы хотите открывать попап корзины.
document.getElementById('custom-shopping-cart').addEventListener("click", function (){
document.getElementsByClassName('basket-round')[0].click();
});
});
</script>
</head>
<body>
<!--BODY документа здесь служит исключительно для примера. Вместо него предусмотрите логику добавления товара в корзину в зависисмости от используемой Вами интеграции с сайтом магазина. Также сверстайте свой кастомный элемент корзины. Для примера это просто ссылка с отображением количества товаров. -->
<h1>Кастомная корзина</h1>
<div>
<a href="javascript: void(0);" id="custom-shopping-cart">Корзина (всего товаров <span id="custom-cart-quantity">0</span>)</a>
</div>
<button onclick="kaktusWidget.changeCart({
variantId: 'BR00T-000132',
count: 1,
operation: 'ADD'
});">Добавить в корзину</button>
</body>
</html>
Интеграция в Ecwid
1. В настройках внешнего вида сайта Ecwid включите отображение артикула на странице товара. Это важно для правильной работы виджета корзины Кактус. Если Вы не хотите чтобы артикул отображался покупателю, его можно скрыть (см. комментарии в коде ниже). Но тем не менее включать в настройках его все равно обязательно.
Войдите в редактирование внешнего вида сайта.
Затем магазин/страница товара
2. В поле "мета-теги для верификации сайта" после уже имеющегося там кода добавьте код интеграции виджета корзины Кактус. При этом вместо "XXXXX" не забудьте указать свой ID аккауната, который можно посмотреть в настройках ЛК Кактуса.
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<style>
.details-product-purchase__checkout, .float-icons__icon--cart, .ec-footer {
display: none !important;
}
/* Необязательная возможность скрыть поле артикула на страницы товара. При надобности раскомментируйте */
/*.product-details__product-sku {
display: none !important;
} */
</style>
<script>
document.addEventListener("DOMContentLoaded", function (){
var kak2c_domain = "shopXXXXXX"; // Укажите здесь Ваш идентификатор магазина
kaktusWidget({
domain: kak2c_domain
});
document.body.addEventListener('click', function(e) {
if (e.target.closest('.details-product-purchase__add-to-bag, .details-product-purchase__add-more')) {
var sku = document.querySelector('.product-details__product-sku').textContent.replace(/артикул/gui, '').trim();
kaktusWidget.changeCart({
variantExtId: sku,
count: 1,
operation: 'ADD'
});
event.stopPropagation();
event.preventDefault();
}
}, {capture: true});
});
</script>
3. В ecwid задайте артикулы всем товарам. Если Вы не ведете артикулы, можно задать любое значение, лишь бы оно было уникально для каждого товара. Для товаров с вариантами нужно задать уникальный артикул для каждого варианта. И то же самое значение нужно указать в поле "Внешний ID" товара или варианта в ЛК Кактуса.
Интеграция в Tilda
1. Из ЛК Кактус перейдите в редактор интернет-магазина
Кликнув по иконке с изображением шестеренки откройте панель настроек витрины
Выберите вкладку "Интеграции"
В данной вкладке настройте счетчики Яндекс.Метрики и Google Analytics (не обязательно).
Переключатель "Режим работы по внешнему ID варианта" отвечает за то, какой код товара следует задавать в качестве "Артикула" в Тильде. Если он выключен - указывается ID товара из ЛК Кактуса. Если включен - внешний ID.
ID товара автоматически создается системой и его нельзя изменить. В качестве внешнего ID Вы можете задать любое значение. Например артикул. Главное чтобы оно было уникальным у всех товаров. А для товаров с вариантами - у всех вариантов всех товаров.
Примечание
При изменении любого значения во вкладке Интеграции, чтобы оно отразилось в Вашем магазине на Тильде надо заново скопировать в Тильду код виджета (см. п. 2)
2. Скопируйте содержимое поля "Виджет корзины для конструктора Тильда" из вкладки "интеграции" витрины в Html-код для вставки внутрь HEAD в Тильде.
Войдите в настройки сайта.
Далее "еще", "Html-код для вставки внутрь HEAD"
После редактирования кода обязательно заново опубликуйте все страницы сайта!
3. Для всех товаров в Тильде в поле артикул задайте значение Id или внешнего Id (в зависимости от настроек из п.1) со страницы соответствующего товара ЛК Кактус.
Для товаров с вариантами надо задать артикул каждого варианта в Тильде равный Id (или внешнему Id) соответствующего варианта в ЛК Кактус.
4.Для того, чтобы связать товары в кактусе и в тильде по ID следует:
А. Перейти на редактирование страницы сайта.
В разделе где расположены товары нажать на кнопку «Контент».
В карточке товара, который нужно связать следует нажать на «Еще: кнопка, метка, параметры».
Найти поле «Подзаголовок или артикул» и вписать в него ID товара из кактуса.
Б. Перейти в раздел товаров.
Выбрать товар который нужный связать и нажать на него.
В разделе товара нажать на кнопку "Контент".
Найти поле «Подзаголовок или артикул» и вписать в него ID товара из кактуса.
Открытие попапа корзины при каждом добавлении в нее товара
Полное описание интеграции корзины находится здесь. Нужно добавить следующий фрагмент кода:
<script>
document.addEventListener("kaktusEvent", function (e){
if (e.detail.type == 'cart_item_add' && e.detail.content.fromOutsidePopup) {
document.getElementsByClassName('basket-round')[0].click();
}
});
</script>
Примечание: Если у Вас уже есть обработчик события kaktusEvent с другой логикой, рекомендуется еще один не создавать, а добавить в конец существующего (если параметр обработчика у Вас называется не "e", не забудьте заменить его имя в коде ниже):
if (e.detail.type == 'cart_item_add' && e.detail.content.fromOutsidePopup) {
document.getElementsByClassName('basket-round')[0].click();
}
Интеграция в LPMotor
Подключение виджета умной корзины Кактус
Войдите в общие настройки сайта
В поле "Вставка в тэг head" добавьте следующий код
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
var kak2c_domain = "shopXXXXXX";
document.addEventListener("DOMContentLoaded", function (){
kaktusWidget({
domain: kak2c_domain,
});
var buttons=document.querySelectorAll('a[href^="#order"]');
if (buttons.length) {
buttons.forEach(function(elem) {
elem.addEventListener('click', function(event) {
event.preventDefault();
event.stopPropagation();
var article = $(this).attr('href').replace(/^#order:?/gi, '').trim();
if (article) {
kaktusWidget.changeCart({
variantId: article,
count: 1,
operation: 'ADD'
});
}
})
});
}
});
</script>
Внимание! В строке
var kak2c_domain = "shopXXXXXX";
XXXXXX заменить на ID аккаунта, который можно посмотреть в настройках ЛК Кактус.
Создание кнопки для добавления товара в корзину
Войдите в редактор страницы IPMotor. Добавьте на Вашу страницу новую кнопку.
Кликните на эту кнопку, затем войдите в ее редактирование. Выберите Действие - "Переход по ссылке"
В качестве ссылки задайте следующую строку (начиная со знака "#", без пробелов)
#order:XXXX
Вместо XXXX укажите ID товара, который должна добавлять в корзину эта кнопка. ID товара можно посмотреть в личном кабинете Кактуса:
Примечание: для товаров с вариантами нужно указывать ID варианта.
Вместо ID товара или варианта можно использовать артикул, который в этом случае указывается в поле "Внешний ID" ЛК Кактуса. Для этого нужно изменить код из предыдущего раздела: фрагмент
kaktusWidget.changeCart({
variantId: article,
count: 1,
operation: 'ADD'
});
Заменить на
kaktusWidget.changeCart({
variantExtId: article,
count: 1,
operation: 'ADD'
});
Интеграция в WordPress
При наличии WooCommerce (или одной из тем, базирующихся на нем)
1. Зайти в редактор тем WP и найти там файл, содержащий head всех страниц. Обычно он называется header.php
2. Добавить в <head> страницы следующий код:
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
var kak2c_domain = "shopXXXX";
document.addEventListener('DOMContentLoaded', function () {
kaktusWidget({
domain: kak2c_domain,
//Аналитика. Это примерный код. Вместо YYYY подставьте ID вашего счетчика Яндекс.
//Если Вы используете счетчик, отричный от Яндекс.Метрики замените этот код на код Вашей метрики.
//Необязательно. Если аналитика вообще не нужна, удалите франмент до комментария "Конец аналитики"
basketClickCallback: function(){
//События аналитики при открытии корзины
yaCounterYYYY.reachGoal('checkout_started');
},
newOrderCreatedCallback: function(){
//События аналитики при формированиии заказа
var goalParams = {
order_price: kaktusWidget.totalSum,
currency: "RUB"
}
yaCounterYYYY.reachGoal('checkout_finished', goalParams);
},
//Конец Аналитики
});
//Лисенер клика по кнопке "купить"
jQuery('body').on('click', "a[href='#buy']", function(e){
e.preventDefault();
var varForm = jQuery(this).closest('.variations_form');
var article = '';
if (varForm.length) {
//Товар с вариантами
var variations = JSON.parse(varForm.attr('data-product_variations'));
var variationId = varForm.find('input.variation_id').val();
if (!variationId) {
return;
}
variations.some(function(variation) {
if(variation.variation_id == variationId) {
article = variation.sku;
return true;
}
});
} else {
article = jQuery(this).data('itemId');
}
if (article) {
kaktusWidget.changeCart({
variantExtId: article,
count: 1,
operation: 'ADD',
});
}
});
});
</script>
Внимание! Вместо "XXXXX" не забудьте указать свой ID аккауната, который можно посмотреть в настройках ЛК Кактуса.
Вместо YYYY - ID Вашего счетчика в Яндекс.Метрике. Или если Вы не используете Яндекс.Метрику - удалите код аналитики (см. комментарии по коду). Подробное руководство по подключению аналитики.
3. Найдите в коде темы все кнопки, при нажатии на которые товар должен добавляться в корзину. Файлы в которых они расположены зависят от темы. Возможно этих файлов вообще нет в теме, тогда их надо создать скопировав из кода плагина Woocommerce (см. документацию WP по созданию тем). И модифицируйте их код наподобие следующего:
<a href="#buy" data-item-id="<?php echo $product->sku ?>" name="add-to-cart" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></a>
Выделенный жирным фрагмент (включая, что кнопка должна представлять из себя именно тег <a>) важен для правильной работы кнопки. Остальной код рекомендуется не копировать отсюда а оставить тот который есть в теме, чтобы сохранить внешний вид кнопки. Или кастомизировать на свое усмотрение.
4. В каталоге товаров WP проставьте для всех товаров Артикул (или любой другой удобный Вам идентификатор лишь бы он был уникален для каждого товара и варианта). Для простого товара:
Для вариантного товара. Важно! Это нужно сделать отдельно для каждого варианта:
5. Такие же артикулы нужно проставить в полях "Внешинй ID" товаров (или вариантов для товаров с вариантами) в ЛК Кактуса. Важно! Сопоставление товаров в ЛК Кактус выполняется именно по полю "Внешний ID", а не Артикул.
Без WooCommerce (каталог товаров отсутствует, кнопка "Добавить в корзину" добавляется вручную к верстке и вручную привязывается ко внешнему ID товара в Кактусе)
В п.2 добавить следующий код:
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
var kak2c_domain = "shopXXXXXX";
document.addEventListener("DOMContentLoaded", function (){
kaktusWidget({
domain: kak2c_domain,
});
var buttons=document.querySelectorAll('a[href^="#buy"]');
if (buttons.length) {
buttons.forEach(function(elem) {
elem.addEventListener('click', function(event) {
event.preventDefault();
event.stopPropagation();
var article = $(this).attr('href').replace(/^#buy:?/gi, '').trim();
if (article) {
kaktusWidget.changeCart({
variantExtId: article,
count: 1,
operation: 'ADD'
});
}
})
});
}
});
</script>
Внимание! Вместо "XXXXX" не забудьте указать свой ID аккауната, который можно посмотреть в настройках ЛК Кактуса.
Код приведен без аналитики. Если она нужна, она будет аналогична варианту с Woocommerce, можно скопировать оттуда. Подробное руководство по подключению аналитики.
3. В верстку добавить кнопки добавления товара в корзину
<a href="#buy:NNNNNN">Добавить в корзину</a>
где вместо NNNNNN указать Внешний ID товара или варианта (для товара с вариантами) из ЛК Кактус. Код приведен в минимально необходимом для работы кнопки виде. Скорее всего к нему следует добавить классы или стили для придания кнопке желаемого вида. А также заменить текст кнопки.
пп.4 не нужен. Но нужно задать всем товарам и вариантам в ЛК Кактус внешний ID, как это описано в п.5.
Внимание! Весь код в этом руководстве сильно зависит от используемой темы WP и может потребоваться его модификация.
Интеграция с Platforma LP
Для интеграции корзины Кактус необходимо зайти в админку сайта на Platforma LP и открыть настройки необходимой страницы.
В разделе Метрика и скрипты нажать кнопку "Добавить плагин".
В открывшемся списке выбрать "Произвольный код".
Плагину нужно задать имя, и в "Произвольный код HEAD" вставить следующее:
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
var kak2c_domain = "shopXXXXXXX";
document.addEventListener("DOMContentLoaded", function (){
kaktusWidget({
domain: kak2c_domain,
});
});
function add2cart(item) {
kaktusWidget.changeCart({
variantId: item,
count: 1,
operation: 'ADD'
});
}
</script>
shopXXXXXXX необходимо заменить на ID магазина в формате shop + ID аккаунта в Кактусе (можно найти в настройках).
Сохранить плагин и проверить, что он включён.
Далее открыть редактор страницы.
Для кнопки "Купить" выбрать действие "Выполнить Javascript" и в соответствующее поле вставить:
add2cart('1040');
1040 -- ID товара в Кактусе, который можно найти в ЛК Кактус в разделе Товары.
Интеграция с MODX
Установка корзины Кактус в CMS MODX
В панели управления MODX перейти в Элементы - Шаблоны. Составляющие вашего магазина на MODX можно кастомизировать по своему усмотрению. В случае, на примере которого описана инструкция, необходимо зайти в шаблон Home.
В открывшемся поле с кодом шаблона в тег head вставить следующее:
<!-- умная корзина kak2c -->
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
document.addEventListener("DOMContentLoaded", function (){
var kak2c_domain = "shopXXXXXX";
kaktusWidget({
domain: kak2c_domain,
//Необязательные коллбэки. Назначение похоже на события выше.
basketClickCallback: function(){
//Вызывается при открытии попапа корзины
},
newOrderCreatedCallback: function(){
//Вызывается при создании заказа
}
});
$(".open-cart").on('click', function(event) {
event.stopPropagation();
event.preventDefault();
var productId = $(this).data('productId');
console.log('productId: ' + productId);
kaktusWidget.changeCart({
variantId: productId,
count: 1,
operation: 'ADD'
});
setTimeout(function () {
$(".basket-round").click();
}, 1000);
});
});
</script>
<!-- /умная корзина kak2c -->
shopXXXXXX необходимо заменить на ID аккаунта, который можно найти в ЛК Кактус в Настройках.
Установка кнопки "Купить"
Зайдите в раздел Элементы - Чанки и выберите необходимый чанк, в котором будет размещаться кнопка.
Код кнопки:
<a href="javascript:void(0);" class="shop__btn btn add_item open-cart quick-order__link" data-product-id="[[+productId]]">Купить</a>
Связка товаров
Для корректной интеграции товаров необходимо поле идентификатора, связывающее товары, заведённые в MODX, с товарами в Кактусе.
В разделе Элементы - Дополнительные поля необходимо создать новое поле идентификатора- в нашем случае добавить дополнительную колонку к существующей форме товаров.
Создать новое дополнительное поле tvproductId
Инструкцию о создании дополнительных полей в MODX можно найти здесь.
После чего данное поле необходимо добавить в существующую форму товара.
После этого в разделе с товарами появится искомая колонка.
ID товара можно найти в Личном кабинете Кактуса в разделе Товары - Все товары в карточке искомого товара.
Интеграция с Shop-Script
Для установки умной корзины Кактус в магазин на Shop-Script зайдите в админку магазина, перейдите во вкладку Сайт и откройте Настройки сайта.
В поле "Дополнительный JavaScript-код для вставки перед закрывающим тегом </head>" вставьте приведённый ниже код.
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
var kak2c_domain = "shopXXXXXXX";
document.addEventListener("DOMContentLoaded", function (){
kaktusWidget({
domain: kak2c_domain,
});
//
$('.js-submit-button').on('click', function(event) {
event.stopPropagation();
event.preventDefault();
var productExtId = $('input[name ="product_id"]').val();
console.log("product_id: " + productExtId);
add2cart(productExtId)
});
});
function add2cart(item) {
kaktusWidget.changeCart({
variantExtId: item,
count: 1,
operation: 'ADD'
});
}
</script>
shopXXXXXXX нужно взять в ЛК Кактус в Настройках, где XXXXXXX -- это ID вашего аккаунта.
После этого в админке Shop-Script перейти во вкладку Магазин, выбрать раздел Товары -- Все товары. ID товара в Shop-Script необходимо скопировать во Внешний ID товара в Кактусе.
Интеграция с Magento
Установка корзины
Зайдите в админку вашего сайта на Magento. На панели управления выберите "Система", и в выпадающем списке выберите "Конфигурация".
В Конфигурации выбрать Дизайн.
В разделе Дизайн выбрать HTML заголовок, после чего выбрать Разнообразные скрипты.
Вставить в поле следующее:
<!-- Kak2c checkout -->
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
document.addEventListener("DOMContentLoaded", function (){
var kak2c_domain = "shop4547084"; // Укажите здесь Ваш идентификатор магазина
//Собственно инициализация виджета корзины
kaktusWidget({
domain: kak2c_domain,
//Необязательные коллбэки. Назначение похоже на события выше.
basketClickCallback: function(){
//Вызывается при открытии попапа корзины
},
newOrderCreatedCallback: function(){
//Вызывается при создании заказа
}
});
var add2cartButtons = document.getElementsByClassName("addtocart");
for (var i = 0; i < add2cartButtons.length; i++) {
//add2cartButtons[i].addEventListener('click', add2cart, false);
addSomeEvent('click', add2cartButtons[i], add2cart);
}
var add2cartButtons2 = document.getElementsByClassName("btn-cart");
for (var i = 0; i < add2cartButtons2.length; i++) {
//add2cartButtons2[i].addEventListener('click', add2cart2, false);
addSomeEvent('click', add2cartButtons2[i], add2cart2);
}
});
function getProductExtId(onClickString) {
var startIndex = onClickString.indexOf('/product/') + 9;
var endIndex = onClickString.indexOf('/form_');
return onClickString.substring(startIndex, endIndex);
}
function addSomeEvent(evnt, elem, func) {
if (elem.addEventListener) // W3C DOM
elem.addEventListener(evnt,func,false);
else if (elem.attachEvent) { // IE DOM
elem.attachEvent("on"+evnt, func);
}
else { // No much to do
elem["on"+evnt] = func;
}
}
var add2cart = function() {
var attribute = this.getAttribute('onclick');
var extId = getProductExtId(attribute);
console.log(extId);
kaktusWidget.changeCart({
variantExtId: extId,
count: 1,
operation: 'ADD'
});
};
var add2cart2 = function() {
var offerFormAction = document.getElementById("product_addtocart_form").getAttribute('action');
var qtyVal = parseInt(document.getElementById("qty").value);
var extId = getProductExtId(offerFormAction);
console.log(extId);
kaktusWidget.changeCart({
variantExtId: extId,
count: qtyVal,
operation: 'ADD'
});
};
//# sourceURL=kak2cInit.js
</script>
<!-- /Kak2c checkout -->
Внимание! В shopXXXXXXX вместо XXXXXXX нужно указать ваш идентификатор магазина в ЛК Кактус в разделе Настройки -- Общие.
Связка товаров
В админке сайта зайти в Каталог и найти товары. Значения ИД из Magento скопировать в поле Внешний ID в ЛК Кактус.
Внешний ID можно найти непосредственно в карточке товара в ЛК Кактус.
Интеграция с Insales
Установка корзины Кактус в Insales
В админ панели Insales перейти в Настройки > Настройки сайта > Счётчики и коды.
В поле "JavaScript-код для вывода на всех страницах магазина" вставить следующее:
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
document.addEventListener("DOMContentLoaded", function (){
kaktusWidget({
domain: "shopXXXXXXX",
});
$('.header__cart').hide();
$('.add-cart-counter__btn').on('click', function(event) {
event.stopPropagation();
event.preventDefault();
var extId = $('.sku-value').text();
if (extId) {
console.log('extId: ' + extId)
kaktusWidget.changeCart({
variantExtId: extId,
count: 1,
operation: 'ADD'
});
}
});
});
//# sourceURL=kak2c_cart.js
</script>
Код для вставки выше проверялся на работоспособность только с шаблоном дизайна "Fourth". Работоспособность на других шаблонах не гарантируется.
В зависимости от используемого вами шаблона вам может понадобиться изменить определённые детали в скрипте для его корректной работы.
В shopXXXXXXX значение XXXXXXX необходимо заменить на ID аккаунта, который можно найти в ЛК Кактус в Настройках.
Для оптимальной работы корзины поле Внешний ID в карточке товара в Кактусе должно совпадать с Артикулом товара в InSales.
Обратите внимание, что заказы, оформляющиеся через корзину Кактуса, автоматически попадают в ЛК Кактуса, минуя админку InSales.
Карта ПВЗ
Подключение виджета:
<link href="https://static.kak2c.ru/kak2c.pvz-map.css" rel="stylesheet">
<script type="text/javascript" src="https://static.kak2c.ru/kak2c.pvz-map.js"></script>
<script>
//пример функции открытия виджета
function openKaktusWidget(){
window.kaktusMap.openWidget({
city_from: 'Москва',
city_to: 'Санкт-Петербург',
dimensions: {
height: 10, //Размеры, см
width: 10,
depth: 10,
},
weight: 600, //Вес, гр
deliveryServices: ['PARTIAL_DELIVERY', 'TRYING'] //примерный формат выбранных сервисов
});
}
document.addEventListener('DOMContentLoaded', () => {
//Инициализация виджета. Должна вызываться после полной отрисовки страницы.
kaktusMap({
domain: 'shop000000', //здесь нужно указать домен в системе kak2c
host: '//app.kak2c.ru'
});
});
//Пример подписки на события виджета
document.addEventListener('kaktusEvent', function(event) {
console.log(event.detail);
});
</script>
Пример подключенного виджета можно посмотреть здесь:
https://static.kak2c.ru/pvz_map_test.html
2. Событие (kaktusEvent) при выборе ПВЗ пользователем
//Пример подписки на события виджета
document.addEventListener('kaktusEvent', function(event) {
console.log(event.detail);
});
//содержимое event.detail:
{
"type":"get_delivery_point",
"content":{
"address":{
"country":"Россия",
"countryCode":"RU",
"region":"Москва",
"area":null,
"city":"Москва",
"settlement":null,
"street":null,
"house":null,
"block":null,
"building":null,
"flat":null,
"fullAddress":"117148, Москва г, Брусилова ул, д.39, корпус 1",
"fullCity":null,
"rawData":null,
"zip":null,
"regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias":null,
"cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias":null
},
"code": "17719", //ИД ПВЗ
"courier": "Boxberry",
"courierCode": "BOXBERRY",
"courierPostamatType": "СПВЗ",
"deliveryServices":[
"TRYING",
"CHECK_CONTENT",
"PARTIAL_DELIVERY"
], //доступные доп.опции доставки в данном пвз
"description": "Остановка - 4-й микрорайон Щербинки.\nПримерное расстояние от остановки до Отделения - 100 м.\n24-этажный жилой дом.\nРасположение входа в отделение - Отдельный вход со стороны улицы (автостоянки).\nЭтаж - 1.",
"latitude": "55.501896",
"longitude": "37.599239",
"maxSize": "234",
"maxWeight": 15,
"metroStation": "Щербинка",
"paymentMethods":[
"COD_CASH",
"COD_CARD"
],
"type": "PVZ",
"workTime": "Пн 10 00-20 00 Вт 10 00-20 00 Ср 10 00-20 00 Чт 10 00-20 00 Пт 10 00-20 00 Сб 10 00-20 00 Вс 10 00-20 00"
"downloaded":true,
"price":120
}
}
Витрина Кактус
Подключение каталога Кактус через IFrame
В заголовок или в тело страницы добавьте код:
<link href="https://static.kak2c.ru/v2/kak2c.checkout.css" rel="stylesheet">
<script type="text/javascript" src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<script type="text/javascript" src="https://storefront.kak2c.ru/js/iframe-outer.js"></script>
<link href="https://storefront.kak2c.ru/css/iframe-outer.css" rel="stylesheet">
<script>
document.addEventListener("DOMContentLoaded", function (){
cactusStorefront({idshop: 'shopXXXXXX'});
});
</script>
Где вместо shopXXXXXX указать домен Вашего магазина.
Этот код надо добавлять также на страницы сайта где не будет отображаться каталог товаров, но нужно выводить корзину, строку поиска по каталогу или избранную категорию.
В то место верстки, где должен отображаться каталог товаров добавить код:
<iframe id="cactus-container" frameborder=0 scrolling="no" style="width:100%;" data-home-page="/" data-other-page="/catalogue"></iframe>
В атрибутах data-home-page и data-other-page необходимо указать URI страниц Вашего сайта на которых будет отображаться соответственно главная страница каталога и все другие страницы. Т.е. Вы на своем сайте можете сверстать 2 разные страницы для каталога. Одну для главной страницы например с большим баннером. Вторую, более компактную — для всех других страниц каталога: страницы коллекции, страницы товара и пр. Если на Вашем сайте главная и все другие страницы каталога будут отображаться в одинаковом окружении – просто укажите обеим этим атрибутам одно и то же значение. В приведенном выше примере главная страница каталога отображается на корневой странице сайта. А все другие страницы – на странице catalogue. В верстке обеих указанных в атрибутах data-home-page и data-other-page страниц вашего сайта должен быть вставллен приведенный выше код.
Примечание 1: URI — это URL без доменного имени. Т.е. если страница Вашего сайта на которой находится каталог называется http://www.mysite.ru/mykatalog, нужно указать «/mykatalog».
Примечание 2: Для тестового окружения строки
<script type="text/javascript" src="https://storefront.kak2c.ru/js/iframe-outer.js"></script>
<link href="https://storefront.kak2c.ru/css/iframe-outer.css" rel="stylesheet">
Заменить на
<script type="text/javascript" src="https://storefront-test.kak2c.ru/js/iframe-outer.js"></script>
<link href="https://storefront-test.kak2c.ru/css/iframe-outer.css" rel="stylesheet">
Блок избранной коллекции (не обязательно)
<iframe class="cactus-favorite" frameborder=0 scrolling="no" style="width:100%;" data-home-page="/iframe-page" data-other-page="/iframe-page/slave" data-collection-id="XXXX"></iframe>
Блоки избранных коллекций можно размещать как на странице с блоком каталога так и без него. На одной странице может быть несколько таких блоков. На странице которая задана как "неглавная" в атрибутах data-other-page всех блоков обязательно должен быть блок каталога.
Вместо XXXX укажите Id коллекции, которую будет отображать блок.
Описание атрибутов data-home-page и data-other-page см. выше. Внимание! эти атрибуты должны быть заданы одинаково у всех имеющихся на сайте блоков каталога и избранных коллекций. Даже если на одной странице имеется несколько таких блоков, эти атрибуты необходимо задать им всем с одинаковыми значениями.
Строка поиска по каталогу (не обязательно)
<input type="text" id="cactus-search-input" class="cactus-search-autocomplete">
<button id="cactus-search-button" type="button">Искать</button>
<script>
document.addEventListener("DOMContentLoaded", function (){
document.getElementById('cactus-search-button').addEventListener("click", function (){
var val = document.getElementById('cactus-search-input').value;
if (val.trim()) {
window.location.hash = '#/search?query=' + val;
}
});
});
</script>
Код примерный. Элемент ввода строки поиска и элемент собственно запускающий поиск необязательно должны быть input и button. ID элементов может быть произвольный. Чтобы запустить поиск достаточно присвоить странице с витриной хэш #/search?query=искомая строка. Но чтобы работал suggestion (т.е. подсказка, появляющаяся по мере ввода пользователем значения) элемент ввода должен быть input type="text" и иметь класс cactus-search-autocomplete.
Кастомный значок корзины (не обязательно)
Штатный значок корзины можно заменить собственным, который лучше соответствует дизайну Вашего сайта или например является частью его хедера.
Код для примера представляет собой просто надпись «корзина» с количеством товаров. При клике на него откроется штатный попап корзины.
<a href="javascript: void(0);" id="cactus-cart" class='cactus-cart_empty'>
Корзина: <span id="cactus-cart-quantity" class='cactus-cart_empty'>0</span>
</a>
id cactus-cart и cactus-cart-quantity должны быть именно такими, как указаны в примере. cactus-cart — элемент при клике на который должен открываться попап корзины.
сactus-cart-quantity – элемент, в который помещается текущее количество товаров в корзине
Класс cactus-cart_empty добавляется обеим этим элементам когда корзина пуста. Может использоваться для различной стилизации пустой или непустой корзины.
Чтобы скрыть штатную иконку корзины нужно добавить следующий стиль:
<style>
.basket-round {
display: none;
}
</style>
Примечание: описанный здесь способ замены штатного значка корзины будет работать только совместно с витриной Кактус. Если Вы используете виджет корзины отдельно от витрины, воспользуйтесь этим руководством.
Редактирование шаблона сайта
Шаблоны позволяют настроить внешний вид витрины путем правки HTML-верстки и CSS-стилей страниц. В отличие от настроек параметров витрины эта возможность предполагает некоторые знания в верстке и Веб-разработке. Но если результат не будет соответствовать ожидаемому, Вы всегда сможете сбросить шаблоны на значение по умолчанию.
Из ЛК Кактус войдите в редактор Интерннт-магазина, откройте админпанель и выберите в ней вкладку "шаблоны".
Слева имеется список шаблонов, каждый из которых отвечает за отображение определенного компонента витрины. Шаблоны бывают двух видов. Стили - это обычный css:
Для простоты то что возможно рекомендуется делать именно при помощи редактирования стилей. Например чтобы скрыть ненужный элемент проще всего задать ему стиль display: none; Имя CSS-класса соответствующего элемента можно найти в инспекторе браузера, который открывается по F12.
HTML разметка представляет собой шаблоны популярного фреймворка VueJS. Это по сути html-код, но с добавлением полей (красная рамка) и директив (синяя рамка):
Синтаксис шаблонов описан в документации Vue.
Изменения в шаблоне сохраняются в три этапа. Что позволяет Вам разрабатывать и отлаживать свой код сколько угодно времени. А Ваши покупатели при этом будут видеть предыдущую, стабильную, уже отлаженную версию магазина.
Изменения в коде сразу же отображаются во внешнем виде витрины как только редактор кода теряет фокус. Но в таком виде они будут потеряны при закрытии страницы в браузере, что удобно для быстрых экспериментов. Покупатели их не увидят.
Чтобы сохранить шаблон как черновик нажмите кнопку:
Изменения не пропадут при выходе из браузера. Но будут видны только если Вы вошли из ЛК в витрину в режиме редактора. Покупатели их по-прежнему не увидят.
Чтобы сделать изменения видимыми покупателю нажмите кнопку:
Кнопка "сбросить черновик" вернет шаблоны магазина к предыдущей опубликованной версии.
Можно удалить все Ваши изменения шаблона независимо от того опубликованы они или нет и вернуть магазин к версии по умолчанию:
Пример. Правка на странице товара.
Заменим надпись "Весь товар сертифицирован" на ссылку на страницу контактов.
Находим отмеченный красной рамкой шаблон.
Заменяем текст в синей рамке на следующий:
<router-link class="cactus-item__page cactus-color__hover-text"
to="/contacts"
>
<i class="fe-phone cactus-item__page-icon"></i>
<div class="cactus-item__page-title">Контакты</div>
</router-link>
Нажимаем кнопку "Сохранить". Смотрим полученный результат:
Если он нас устраивает, возвращаемся в редактор шаблонов и нажимаем кнопку "Опубликовать", Чтобы результат стал виден покупателям.
Авторизация
Необходимо во всех вызовах, кроме регистрации указывать имя текущего домена в заголовках запроса (Header) в параметре Domain. Значение Domain - shop + ид аккаунта из общих настроек в ЛК. Например, если ид аккаунта 18236, то значение должно быть: shop18236 Подробнее про данный вид авторизации - в разделе "Авторизация по домену в публичных методах апи" Если в вызове нет /pub, /dlv, /prompter - (например /api/lite/products) - то нужно дополнительно указывать токен доступа, полученный в методе регистрации/авторизации (/api/lite/auth)
/api/lite/auth
Авторизация
/api/lite/auth
Для авторизации необходимо выполнить следующий запрос
{
"login":"wow55@mail.ru",
"password":"wow"
}
В ответ возвращается
Успех
{
"success": true,
"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NkBtYWlsLnJ1IiwiZXhwIjoxNTQ2OTc2NzQ5fQ.4Zdev5PSIk1TmsPFxjxHukYwH1wa_efn19cfLIkT8k2g9xEeVMOnYK4A4pTC6NCpsp2kq8_dvygRxAyyEKNwiQ",
"token_type": "bearer",
"login": "wow56@mail.ru",
"expires_in": 14400,
"privileges": [
"ORDERS_READ",
"ORDERS_WRITE"
]
}
где access_token содержит токен для доступа в закрытую часть апи Lite, а
expires_in - количество секунд действительности выданного токена.
Ошибка:
{
"success": false,
"errors": [
{
"code": 401,
"message": "Unauthorized"
}
]
}
с http кодом 401.
Для последующих методов, использовать ключ токена следующим образом:
в запросе должен быть header
и значением вида "Bearer {access_token}"
например Bearer
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NUBtYWlsLnJ1IiwiZXhwIjoxNTQ2ODA3MjU3fQ.1vSO5DXhewQfjKITK76W8JhEZM_Wx2YgyEbdjfg9GDs0ymtRtmRgFuZen_n8fM00H1Uda_i6M2-Y1PbjN4edZA
После истечения срока действительности токена - апи будет выдавать ошибку
{
"success": false,
"errors": [
{
"code": 401,
"message": "Unauthorized"
}
]
}
С http кодом 401
Авторизация для сторонних приложений
Для получения токена авторизации в системе необходимо перенаправить пользователя на адрес
https://lk2.kak2c.ru/third_party_sign_in?redirect_uri={адрес для редиректа}&state={csrf-токен, опционально}
После ввода пользователем своих данных, при успешной авторизации, его перенаправит на указанный адрес с указанием токена в параметре:
{адрес для редиректа}?access_token={access_token полученный при авторизации}&token_type=bearer&expires_in={срок жизни токена}&state={state, полученный из GET параметров, если он был указан}
Авторизация по домену в публичных методах апи
Для авторизации в вызовах, адреса которых содержат /pub, /dlv, /prompter необходимо передавать заголовок Domain
Значение Domain - shop + ид аккаунта из общих настроек в ЛК. Например, если ид аккаунта 18236, то значение должно быть: shop18236
Пример запроса с авторизацией по хедеру:
curl --header "Domain: shopXXXXXXX" https://app.kak2c.ru/api/lite/pub/collections
curl --header "Domain: shopXXXXXXX" https://app.kak2c.ru/api/prompter/countries
Вместо XXXXXXX - необходимо подставить ид аккаунта.
Пример для Postman
Аккаунт
/api/lite/pub/register
Создание нового аккаунта Кактус Lite
/api/lite/pub/register
Для регистрации необходимо выполнить следующий запрос
{
"account":{
"email":"test@test.ru",
"phone":"123456",
"type":"abc" // опциональный параметр кода учетной записи
}
}
В ответ возвращается
Успех
возвращается jwt токен для доступа в админский api созданного аккаунта, после чего необходимо выполнить запрос инициализации аккаунта (/api/lite/registration_init)
{
"success": true,
"authToken": {
"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhYmNkNTRAYWJjLnJ1IiwiZXhwIjoxNTQ3MjIyOTYwfQ.3NkyrZshkAYJWpIvanKuVv5I5Lqh7gCAojszBys9tOnqOdIpTDm5tCDzDWIt71YuxLBCgwlmC5OiH1Sombp2Hg",
"token_type": "bearer",
"login": "abcd54@abc.ru",
"expires_in": 14400,
"init_state": "0"
}
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/email/quote
Отправка email с заявкой на консультацию через бэкенд
/api/lite/pub/email/quote
Отправка письма с заявкой на консультацию.
Защи/api/lite/pub/email/quщено с помощью reCaptcha (пока не реализовано)
Пример запроса:
{
"customerName":"Вася",
"customerPhone": "123456",
"customerEmail":"test@test.ru",
"title":"Заявка на консультацию",
"message":"Мне ничего не понятно, помогите"
}
Пример успешного ответа:
{
"success": true
}
Пример ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Email не валиден"
}
]
}
/api/lite/registration_init
Инициализация нового аккаунта Кактус Lite
/api/lite/registration_init
Для инициализации и заполнения аккаунта начальными данными необходимо выполнить указанный запрос
В ответ возвращается
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Данный аккаунт уже инициализирован"
}
]
}
/api/lite/pub/password_reset
Запрос на сброс пароля Кактус Lite
/api/lite/pub/password_reset
Для запроса сброса необходимо выполнить следующий запрос:
{
"email":"test@test.ru"
}
В ответ возвращается
Успех:
{
"success": true
}
при этом, по указанному email отправляется письмо со ссылкой вида
http://localhost:33043/password_reset_confirm/?t=6aaccd91-1045-4200-b105-b4db79490fee
Где адрес сервера будет взят из текущего адреса, включая домен 3 уровня.
срок действия токена - 1 час
Данная ссылка будет открыта пользователем в браузере GET запросом.
js код должен обработать открытие подобной ссылки и вывести пользователю запрос на ввод нового пароля и подтверждение пароля.
По нажатию кнопки подтверждения на данном экране создания нового пароля следует выполнить POST запрос на адрес /api/lite/pub/password_reset_confirm с передачей токена из ссылки и нового пароля (см следующий метод).
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/password_reset_confirm
Сброс пароля
/api/lite/pub/password_reset_confirm
Для сброса необходимо выполнить запрос с передачей временного токена сброса пароля и нового пароля:
{
"token":"6aaccd91-1045-4200-b105-b4db79490fee",
"password": "abcd"
}
В ответ возвращается
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/notifications
Перечень уведомлений для пользователя
/api/lite/notifications
Возвращает перечень сообщений для пользователя.
По умолчанию, возвращается с указанным количеством (last_count), начиная от самого последнего.
Запрос:
Параметр | Тип / формат | Описание |
last_count | integer | Количество сообщений |
Пример запроса:
{
"last_count":10
}
Результат запроса:
Параметр | Тип / формат | Описание |
notifications | array | Массив уведомлений |
Пример результата запроса:
{
"success": true,
"notifications": [
{
"date":"2019-01-09T20:00:02",
"text":"Уведомление 1"
},
{
"date":"2019-01-09T20:00:01",
"text":"Уведомление 2"
}
]
}
/api/lite/account_info
Запрос данных аккаунта
/api/lite/account_info
Метод возвращает информацию о текущем аккаунте.
Параметр | Тип / формат | Описание |
login |
string |
Логин пользователя |
domains |
array[object] |
Массив доменов, связанных с аккаунтом
|
balance |
object |
Информация о балансе:
|
billingBalance
|
object |
Информация о балансе (биллинг):
|
pickupSettings |
object |
Настройки точки сбора (см описание метода /api/lite/settings/pickup) |
b2bFlagAllowed |
boolean |
Настройка для выгрузки B2B заказов -- если true, то в заказе появится галка "B2B заказ" *Настройка для B2B включается по запросу клиента; по умолчанию не используется. |
Пример результата запроса:
{
"success": true,
"login": "tatiana.bogatel@theroadwear.com",
"domains": [
{
"domain": "shop2151264",
"auto_generated": true,
"external_domain": false
},
{
"domain": "theroadwear",
"auto_generated": false,
"external_domain": false
}
],
"balance": {
"total": 0,
"reserved": 0,
"available": 0
},
"billingBalance": {
"total": -79446.00,
"expired": -2000.00
},
"pickupSettings": {
"person_full_name": "Фарид",
"person_phone": "+79999999999",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская область",
"area": "Чеховский район",
"city": "Чехов",
"settlement": "сельское поселение Баранцевское, в районе деревни Лешино, пром. зона «Лешино»",
"street": "",
"house": "владение 1",
"block": "",
"building": "СТРОЕНИЕ 1",
"flat": null,
"fullAddress": "142326, РФ, Московская область, Чеховский район, сельское поселение Баранцевское, в районе деревни Лешино, промышленная зона «Лешино», владение 1, строение 1",
"fullCity": null,
"rawData": null,
"zip": "142326",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "7eeb876e-7b67-4ed7-91ec-0588712db96c",
"settlementFias": "5f12f12b-42b3-4f89-b214-d8ab9c10e9f8"
}
},
"shopId": "2151264",
"shopName": "ООО «Роуд Продакшн»",
"orderSummary": {
"DELIVERED": 24,
"RETURNED": 2,
"CANCELED": 62
},
"autoBlockAccount":true,
"tempBlockAccount":true,
"tempBlockAccountReason":"Временно заблокирован"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/privileges
Запрос текущих привилегий
/api/lite/privileges
Метод возвращает список текущих привилегий авторизованного пользователя
Пример результата запроса:
{
"privileges": [
"DASHBOARD_DATA_READ",
"SETTINGS_READ",
"ORDERS_READ"
]
}
Товары
Комментарии по синхронизации товаров и остатков
Для создания новых товаров и обновления существующих, следует использовать метод
Каждый продукт обязательно должен содержать хотя бы один вариант. Поэтому, при создании нового продукта, автоматически создается к нему один вариант.
Варианты - это реальные SKU, у них есть вес, размеры, штрихкоды и т.д. Продукт же содержит только общие параметры.
Момент к обсуждению - при синхронизации товаров с Cactus, надо ли выгружать иерархию с вариантами, либо “развернуть” варианты в плоский список в Кактусе (один вариант = один продукт Кактус).
Вариантами можно управлять как из метода products, так и напрямую, методом products/variants.
Кактус имеет систему резервирования. При оформлении заказа, Кактус пытается взять резерв. Это необходимое условие для допуска заказа к отгрузке.
/api/lite/products
Запрос списка продуктов (GET /api/lite/products)
/api/lite/products
Метод возвращает перечень всех продуктов / товарных предложений (активных и неактивных).
Продукт всегда содержит хотя бы один вариант.
Правильно рассматривать Продукт - как виртуальную сущность (группу), а вариант - как физический товар. В рамках одного Продукта может быть несколько Вариантов (например, различные цвета и размеры).
Каждый Вариант имеет набор Опций, характеризующих именно этот вариант (например Цвет=blue, Размер=XL). Не может существовать более одного Варианта с одинаковым набором Опций.
Фильтрация по полям товара
Можно задавать фильтр параметром ?query=test - для фильтрации по полям article, humanId, shortName, fullName, description
Дополнительно можно фильтровать по конкректному продукту параметром ?id=1000
Имеется поддержка фильтрации и по другим полям:
- по Id варианта - ?variantId=1001
- по ШК (штрихкоду товара) - ?barcode=0000000000001
Фильтрация по фильтрам, атрибутам, вариантам товара
Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод:
/pub/products
в виде суммы параметров:
?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке OTHER
?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке ATTRIBUTES
?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке FEATURES
где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для filters.fields.type: "boolean".
Для filters.fields.type: "decimal" также можно передавать диапазон, указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4
Коллекции
Можно задавать фильтр по коллекциям параметром ?collections=1007,1008 - для фильтрации по id коллекций (можно передавать списком)
Архивные карточки
Можно дополнительно выводить архивные карточки товаров параметром deleted=true
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/products?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Максимальное количество продуктов - 100. Даже если указано значение более 100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Сортировка
Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.
Пример сортировки по имени (возрастание): /api/lite/products?order=shortname+asc
Пример сортировки по имени (убывание): /api/lite/products?order=shortname+desc
Доступные коды сортировки:
- shortname
- article
- price
- amount
-
stockUpdateFrom
Пример вызова с одновременной фильтрацией, пейджинацией и сортировкой:
/api/lite/products?query=Поло&order=shortname+asc&page=0&size=200
Структура ответа:
Поле | Тип / формат | Описание |
recordsTotal | num | Общее количество записей в рамках заданной фильтрации. Используется для пейджинации. |
products |
array | Перечень товарных предложений |
id | string | Идентификатор продукта |
extId | string | Дополнительный идентификатор продукта |
extId2 | string | Дополнительный идентификатор продукта |
extId3 | string | Дополнительный идентификатор продукта |
extId4 | string | Дополнительный идентификатор продукта |
extId5 | string | Дополнительный идентификатор продукта |
shortName |
string | Наименование продукта |
description | string | Описание (может содержать html) |
tnvedCode | string | Код ТНВЭД |
internationalDescription | string | Описание на анлийском |
additionalDescriptions | array | Блоки с дополнительным текстовым описанием |
available | boolean | Отображение для продажи в онлайн-магазине |
boxNeeded | boolean | Требуется обрешётка (при отгрузке товара) |
deleted | boolean | Архивная карточка |
type | enum | Тип продукта. SKU/PHYSICAL_SET/SERVICE. Товар, набор товаров, услуга |
vat | enum | НДС товара. NO_VAT/VAT_0/VAT_10/VAT_20 |
reviewScore | decimal | Оценка товара |
variants | array | Массив вариантов |
id | string | Уникальный идентификатор варианта. |
article | string | Артикул (sku) товара |
price | decimal | Цена продажи |
oldPrice | decimal | "Старая" цена. Для визуализации скидки. |
isFfSynchronised
|
boolean | Статус выгрузки товара на ФФ |
ffSyncError
|
string | Ошибка выгрузки товара на ФФ |
isPhysicalSet
|
boolean | Является ли товар физическим набором |
isFfPhysicalSetSynchronized
|
boolean | Статус выгрузки набора на ФФ |
ffPhysicalSetSyncError
|
string | Ошибка выгрузки набора на ФФ |
discountPercent
|
decimal | Скидка, в процентах |
discountFix
|
decimal | Скидка, фикс |
bundleOptionalCount
|
num | Размер опциональной части набора для выбора |
autoPriceCalculation
|
boolean | Авторасчет цены набора |
autoDimensionsCalculation
|
boolean | Авторасчет габаритов набора |
prices | object | Список всех присвоенных цен |
stock | array | Массив данных об остатках (если остатки на складах имеются) |
warehouseCode | string | Код склада |
stockTotal | decimal | Текущее количество на складе хранения |
stockAvailable | decimal | Количество товара, доступного к продаже (stockTotal за минусом резерва) |
stockReserved | decimal | Количество товара, зарезервированного под заказы. |
pos | num | Порядковый номер варианта, относительно |
optionsUsed | array | Массив, указывающий соответствие опции и её значения для конкретного продукта. |
defaultImage | string | Ссылка на изображение из общего массива изображений. Может быть не задан. |
weight | decimal | Вес товара |
dimensions | object | Содержит информацию о размерах |
weightFact | decimal | Вес товара (по данным склада) |
dimensionsFact
|
object | Содержит информацию о размерах (по данным склада) |
canBeRotated
|
boolean | Определяет можно ли товар укладывать на бок при перевозке |
barcodes | object | Список штрихкодов товара |
isDefault | boolean | ШК является по умолчанию |
value | string | Значение ШК |
images | array | Массив изображений продукта. Первое изображение считается основным. |
id | string | Идентификатор изображения |
url | string | URL изображения |
pos | decimal | Позиция изображения в рамках продукта |
collections | array | Массив коллекций, в которые входит продукт |
id | string | Идентификатор коллекции |
attributes | array | Массив значений атрибутов продукта |
code | string | Код атрибута |
type | enum | Тип атрибута (см. описание атрибутов) |
stringValue | string | Значение атрибута (строка) |
decimalValue | decimal | Значение атрибута (число) |
ordering | decimal | Cортировка |
accountingAttributes
|
array | Массив значений атрибутов учета |
code
|
string | Код атрибута |
title | string | Название атрибута |
stringValue | string | Значение атрибута |
subscriptionInfo | object | Описание подписок (Не отображается, если пустой) |
eshopSettings
|
array | Массив внешних кодов для интеграций |
eshopId
|
string | ID интеграции |
eshopType
|
string | Тип интеграции |
eshopName
|
string | Название интеграции |
enabled
|
boolean | Включает товар для интеграции |
zeroStock | boolean | Включает выгрузку нулевых остатков по товару |
extId
|
string | Внешний код товара для интеграции |
useBatchAccounting | boolean |
Флаг использования партионного учета Для ведения учёта сроков годности в партиях необходимо также передать значение USE_EXPIRATION в поле expirationMode и указать срок годности товара в поле expirationMonthsLimit |
expirationMode | enum | NO_EXPIRATION, USE_EXPIRATION - использование сроков годности в партиях |
expirationMonthsLimit | integer | Срок годности в мес |
manufacturedBy | string | Производитель |
composition | string | Состав продукта |
warranty | integer | Срок гарантии в мес |
warehouseCategoryCode
|
string | Код категории товара (из WMS) |
warehouseCategoryTitle
|
string | Наименование категории товара (из WMS) |
Пример результата запроса:
{
"success": true,
"recordsTotal": 1,
"products": [
{
"id": "1000",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"shortName": "Кактус Эуфобия Триангуларис",
"description": "Кактус Эуфобия Триангуларис",
"tnvedCode": "123",
"internationalDescription": "abc",
"additionalDescriptions":[{"title":"some title", "description":"some description"}],
"available": true,
"deleted": false,
"brandName": null,
"countryOfOrigin": null,
"isBestseller": null,
"isNovelty": null,
"type": "SKU",
"vat": "VAT_20",
"reviewScore": 4.0,
"options": null,
"images": null,
"useBatchAccounting": true,
"expirationMode": "USE_EXPIRATION",
"expirationMonthsLimit": 6,
"warranty": 12,
"warehouseCategoryCode": "000000001",
"warehouseCategoryTitle": "Парфюмерия"
"manufacturedBy": "Название производителя",
"composition": "Состав",
"variants": [
{
"id": "1000",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"article": null,
"price": 2190,
"oldPrice": 1590,
"isFfSynchronised": true,
"ffSyncError": null,
"isPhysicalSet": false,
"isFfPhysicalSetSynchronized": false,
"ffPhysicalSetSyncError": null,
"discountPercent": 0,
"discountFix": 0,
"bundleOptionalCount": 0,
"autoPriceCalculation": false,
"autoDimensionsCalculation": false,
"prices":[
{
"priceCode":"Розничная цена",
"priceName":"Розничная цена",
"value":2190
},
{
"priceCode":"Цена до скидки",
"priceName":"Цена до скидки",
"value":1590
}
],
"stock": [
{
"warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
"stockTotal": 111,
"stockAvailable": 111,
"stockReserved": 0
}
],
"ordering": "123.000000000000000",
"defaultImage": null,
"weight": 500,
"dimensions": {
"height": 4,
"width": 20,
"depth": 4
},
"weightFact": 500,
"dimensionsFact": {
"height": 4,
"width": 20,
"depth": 4
},
"canBeRotated": true,
"barcodes": [
{
"value": "42353456345345",
"isDefault": true,
"type": "COMMON"
},
{
"value": "34234232343",
"isDefault": false,
"type": "WILDBERRIES"
}
],
"optionsUsed": null,
"eshopSettings": [
{
"eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
"eshopType": "BERU",
"eshopName": "Магазин на Беру",
"enabled": true,
"zeroStock": false,
"extId": "variant-ext-id-for-beru"
}
]
}
],
"collections": [
"1001"
],
"attributes": null,
"accountingAttributes": [
{
"code": "chestnyznak",
"title": "Честный знак",
"stringValue": "11111"
}
],
"eshopSettings": [
{
"eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
"eshopType": "BERU",
"eshopName": "Магазин на Беру",
"enabled": true,
"extId": "product-ext-id-for-beru"
}
]
"subscriptionInfo": {
"productId": "1002",
"variantId": "1002",
"onlinePaymentType": "recurrent",
"type": "SUBSCRIPTION",
"useShipmentDelayInterval": true,
"items": [
{
"productId": "1002",
"variantId": "1006",
"count": 1,
"subscriptionShipmentNum": 1,
"shipmentDelayIntervalDays": 30,
"subscriptionStartDate": "2020-09-10",
"itemPrice": 120.0
},
{
"productId": "1002",
"variantId": "1007",
"count": 1,
"subscriptionShipmentNum": 1,
"shipmentDelayIntervalDays": 30,
"subscriptionStartDate": "2020-09-10",
"itemPrice": 120.0
},
{
"productId": "1002",
"variantId": "1008",
"count": 1,
"subscriptionShipmentNum": 2,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-09-30",
"itemPrice": 150.0
},
{
"productId": "1002",
"variantId": "1009",
"count": 1,
"subscriptionShipmentNum": 2,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-09-30",
"itemPrice": 150.0
},
{
"productId": "1002",
"variantId": "1010",
"count": 1,
"subscriptionShipmentNum": 3,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-10-20",
"itemPrice": 250.0
}
]
}
}
}
]
}
Выгружать только остатки (специальный режим выгрузки)
Дополнительно можно передать параметр ?only_stock=true. Если он присутствует в запросе, то выгружается минимально необходимое кол-во полей.
Пример: /api/lite/products?only_stock=true
Максимальное количество продуктов в режиме остатков - 1000. Даже если указано значение более 1000
Пример результата запроса(режим остатков):
{
"success": true,
"recordsTotal": 1322,
"products": [
{
"id": "1000",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"variants": [
{
"id": "1000",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"stock": [
{
"warehouseCode": "5a93f7e7-4785-0332-8324-bf3a03ee8211",
"stockTotal": 10,
"stockAvailable": 8,
"stockReserved": 2,
"stockDefective": 0,
"stockDefectiveReserved": 0
}
]
}
]
}
]
}
Создание/обновление продукта (POST /api/lite/products)
/api/lite/products
Создает или обновляет продукт.
Если id указан - проводится обновление продукта с указанным id, если не указан - создается новый.
Если проводится обновление продукта (или варианта) - то обновляются все поля на те, что переданы. Если какие то поля в продукте были непустые, а в запросе они не переданы - то после обновления поля очищаются.
Опционально можно передавать список вариантов товара для обновления, в поле variantsToUpdate. Обновление продукта выполняется первым, если успешно - то начинается обновление вариантов.
Этот список не означает, что коллекция вариантов данного продукта будет приведена к виду в переданном списке вариантов. Будет выполнено только обновление указанных вариантов, безотносительно остальных вариантов их продукта.
Если передан список вариантов - то в ответе в поле variantsResult будет список результатов обновления по каждому варианту, для сопоставления на вызывающей стороне (по полям productId + variantId)
Поле | Тип / формат |
Описание |
id | string |
Идентификатор продукта. Если не указан, создается новый продукт. Если указан, обновляется продукт с данным id или создаётся новый продукт с пользовательским id. |
extId | string | Дополнительный идентификатор продукта |
shortName | string | Наименование продукта |
description | string | Описание (может содержать html) |
tnvedCode | string | Код ТНВЭД |
internationalDescription | string | Описание на анлийском |
available | boolean | Отображение для продажи в онлайн-магазине |
deleted | boolean | Архивная карточка |
type | enum | Тип продукта. SKU/PHYSICAL_SET/SERVICE. Товар, набор товаров, услуга |
vat | enum | НДС товара. NO_VAT/VAT_0/VAT_10/VAT_20 |
collections | array | Массив идентификаторов коллекций, в который входит данный продукт |
attributes | array | Массив значений атрибутов продукта |
code | string | Код атрибута |
stringValue | string | Значение атрибута (строка) |
decimalValue | decimal | Значение атрибута (число) |
accountingAttributes | array | Массив значений атрибутов учета |
code | string | Код атрибута |
stringValue | string | Значение атрибута |
eshopSettings
|
array | Массив внешних кодов для интеграций |
eshopId
|
string | ID интеграции |
enabled | boolean | Включает товар для интеграции |
extId
|
string | Внешний код продукта для интеграции |
variantsToUpdate | объект | Объект варианта товара (см. POST /api/lite/products/variants) |
warehouseCategoryCode | string | Код категории товара (из WMS) |
Пример вызова:
{
"id": "1015",
"extId": "FAQ-D-000112",
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"shortName": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
"description": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
"additionalDescriptions":[{"title":"some title", "description":"some description"}],
"available": true,
"deleted": false,
"brandName": null,
"countryOfOrigin": null,
"tnvedCode": "123",
"internationalDescription": "abc",
"isBestseller": null,
"isNovelty": null,
"type": "SKU",
"vat": "NO_VAT",
"warehouseCategoryCode": "000000001",
"collections": [
"1029",
"1031"
],
"attributes": [
{
"code": "material",
"stringValue": "Хлопок 97%, эластан 3%"
}
],
"accountingAttributes": [
{
"code": "chestnyznak",
"stringValue": "11111"
}
],
"eshopSettings": [
{
"eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
"enabled": true,
"extId": "product-ext-id-for-beru"
}
],
"variantsToUpdate": [
{
"productId":"1002",
"variantId": "1007",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"article": "well done",
"price": 6000, //deprecated
"oldPrice": 6500, //deprecated
"prices":[
{
"priceCode":"Розничная цена",
"value":6000
},
{
"priceCode":"Цена до скидки",
"value":6500
}
],
"stock": [
{
"warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
"stockTotal": 111
}
],
"updateStockTotal": true,
"ordering": "300.000000000000000",
"defaultImage": null,
"weight": 500,
"dimensions": {
"height": 30,
"width": 31,
"depth": 32
},
"canBeRotated": true,
"optionsUsed": [
{
"code": "color",
"stringValue": "синий",
"decimalValue": null,
"name": "Цвет"
}
],
"eshopSettings": [
{
"eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
"enabled": true,
"extId": "variant-ext-id-for-beru"
}
],
"discountType": "PERCENT", // FIX
"discountValue": 50
}
]
}
Пример положительного ответа:
{
"success": true,
"id": "1002"
}
{
"success": true,
"id": "1002",
"product": {
"id": "1002",
"extId": "FAQ-D-000112",
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"shortName": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
"description": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
"additionalDescriptions":[{"title":"some title", "description":"some description"}],
"available": true,
"deleted": false,
"brandName": null,
"countryOfOrigin": null,
"tnvedCode": "123",
"internationalDescription": "abc",
"isBestseller": null,
"isNovelty": null,
"type": "SKU",
"vat": "NO_VAT",
"reviewScore": null,
"options": null,
"images": null,
"variants": [
{
"productId":"1002",
"variantId": "1007",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"article": "well done",
"price": 6000,
"oldPrice": 6500,
"prices":[
{
"priceCode":"Розничная цена",
"priceName":"Розничная цена",
"value":6000
},
{
"priceCode":"Цена до скидки",
"priceName":"Цена до скидки",
"value":6500
}
],
"stock": [
{
"warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
"stockTotal": 111,
"stockAvailable": 111,
"stockReserved": 0
}
],
"ordering": "300.000000000000000",
"defaultImage": null,
"weight": 500,
"dimensions": {
"height": 30,
"width": 31,
"depth": 32
},
"barcodes": null,
"vat": "NO_VAT",
"type": "SKU",
"optionsUsed": [
{
"code": "color",
"stringValue": "синий",
"decimalValue": null,
"name": "Цвет"
}
]
}
],
"collections": [
"1029",
"1031"
],
"attributes": [
{
"code": "material",
"stringValue": "Хлопок 97%, эластан 3%"
}
],
"accountingAttributes": [
{
"code": "chestnyznak",
"title": "Честный знак",
"stringValue": "11111"
}
],
},
"variantsResult": [
{
"success": true,
"productId": "1002",
"variantId": "1003"
}
]
}
Пример положительного ответа с ошибкой сохранения по указанному варианту:
{
"success": true,
"id": "1002",
"variantsResult": [
{
"success": false,
"errors": [
{
"code": 0,
"message": "Вариант с указанным id не найден"
}
],
"productId": "1002",
"variantId": "100343"
}
],
"product": {
"id": "1002",
"extId": "FAQ-D-000112",
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"shortName": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
"description": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
"available": true,
"deleted": false,
"brandName": null,
"countryOfOrigin": null,
"tnvedCode": "123",
"internationalDescription": "abc",
"isBestseller": null,
"isNovelty": null,
"type": "SKU",
"vat": "NO_VAT",
"reviewScore": null,
"options": null,
"images": null,
"variants": [
{
"productId":"1002",
"variantId": "1007",
"extId": null,
"extId2": null,
"extId3": null,
"extId4": null,
"extId5": null,
"article": "well done",
"price": 6000,
"oldPrice": 6500,
"stock": [
{
"warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
"stockTotal": 111,
"stockAvailable": 111,
"stockReserved": 0
}
],
"ordering": "300.000000000000000",
"defaultImage": null,
"weight": 500,
"dimensions": {
"height": 30,
"width": 31,
"depth": 32
},
"barcodes": null,
"vat": "NO_VAT",
"type": "SKU",
"optionsUsed": [
{
"code": "color",
"stringValue": "синий",
"decimalValue": null,
"name": "Цвет"
}
]
}
],
"collections": [
"1029",
"1031"
],
"attributes": [
{
"code": "material",
"stringValue": "Хлопок 97%, эластан 3%"
}
],
"accountingAttributes": [
{
"code": "chestnyznak",
"title": "Честный знак",
"stringValue": "11111"
}
],
}
}
Обновление отдельных полей продукта (PATCH /api/lite/products)
/api/lite/products
Обновляет одно или несколько полей продукта, значения отсутствующих в запросе полей при этом не изменяются.
Тело запроса аналогично POST /api/lite/products
id - необходимо указывать обязательно
Пример вызова:
{
"id": "1015",
"shortName": "Limited Edition Паста (помада) для укладки волос",
"internationalDescription": "abc"
}
ответ аналогичен POST /api/lite/products
Копирование продукта
/api/lite/products/copy
id - код существующего продукта для копирования
Запрос
{
"id": "1234"
}
Пример успешного ответа
{
"success": true,
"id": "1234-copy"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/attributes
Атрибуты – дополнительные характеристики для описания номенклатуры. Используются для более полного отображения информации и продукте - в карточке продукта, а также для возможности фильтрации в каталоге товаров. Не являются обязательными к заполнению.
Справочник атрибутов является общим для аккаунта.
Атрибуты бывают строковыми и числовыми (в том числе могут быть дробными).
Значения атрибутов задаются в информации о продуктах.
Запрос справочника атрибутов
/api/lite/products/attributes
Метод возвращает список всех доступных атрибутов.
Поле | Тип / формат | Описание |
id | string | Идентификатор атрибута. |
code | string | Код атрибута - латиницей |
title | string | Наименование атрибута |
type | enum |
Тип значения атрибута:
|
Пример результата запроса:
{
"success": true,
"attributes": [
{
"id": "12345679",
"code": "roasting",
"title": "Степень обжарки",
"type": "string",
"ordering": 12,
"values": [
{
"stringValue": "XXL",
"ordering": 4
},
{
"stringValue": "XL",
"ordering": 3
}
]
},
{
"id": "12345",
"code": "coffee_strength",
"title": "Крепость кофе",
"type": "decimal",
"ordering": 1211,
"values": [
{
"decimalValue": 1.3,
"ordering": 100
},
{
"decimalValue": 2.5,
"ordering": 200
}
]
}
]
}
Создание/обновление атрибута
/api/lite/products/attributes
Создает или обновляет атрибут.
ID атрибута при создании/обновлении - обязательное поле, он задается явно для каждого атрибута.
Пример создания/обновления атрибута:
{
"code": "roasting",
"title": "Степень обжарки",
"type": "string",
"ordering": 1211,
"values": [
{
"stringValue": "XXL",
"ordering": 4
},
{
"stringValue": "XL",
"ordering": 3
}
]
}
/api/lite/products/features
По продуктам можно задавать варианты, и есть справочник опций и их значений на каждого клиента, по которым можно для продуктов устанавливать варианты.
Создать/обновить вариант со значением опции, не указанными в таком справочнике - можно, новое значение опции не попадет в общий справочник
Запрос списка опций
/api/lite/products/features
Метод возвращает справочник всех опций и их значений для клиента
Поле | Тип / формат | Описание |
id | string | Идентификатор опции |
code | string | Читаемый код опции |
title | string | Читаемое наименование опции |
type | string | Тип опции (string/decimal) |
values | array | Список значений опции |
stringValue | string | Значение опции (строка) |
decimalValue | decimal | Значение опции (число) |
ordering | decimal | сортировка |
Пример результата запроса:
{
"success": true,
"features": [
{
"id": "a2ebf183-f30d-417b-af89-e3ff86d2cca7",
"code": "size",
"title": "Размер",
"type": "string",
"values": [
{
"stringValue": "XXL",
"ordering": 4
},
{
"stringValue": "XL",
"ordering": 3
}
]
},
{
"id": "a2ebf183-f30d-417b-af89-e3ff86d2cca8",
"code": "coef",
"title": "Тестовый коэффициент",
"type": "decimal",
"values": [
{
"decimalValue": 1.3,
"ordering": 100
},
{
"decimalValue": 2.5,
"ordering": 200
}
]
}
]
}
Создание/обновление опции
/api/lite/products/features
Создает или обновляет опцию.
Поле code опции при создании/обновлении - обязательное поле, он задается явно для каждой опции.
Список значений опции при создании - необязателен
Пример создания/обновления атрибута:
{
"id": "a2ebf183-f30d-417b-af89-e3ff86d2cca7",
"code": "size",
"title": "Размер",
"type": "string",
"values": [
{
"stringValue": "XXL",
"ordering": 4
},
{
"stringValue": "XL",
"ordering": 3
}
]
}
/api/lite/products/filters
Получение блоков фильтров
/api/lite/products/filters
Возвращает для заданной коллекции перечень блоков и фильтров в них для поиска товаров.
Блоки бывают трех типов - Для атрибутов, для опций, и другие. Атрибуты и опции выделены в отдельные блоки ввиду потенциально большого количества справочников и значений в них.
Блоки можно запрашивать в режиме для покупателя и для владельца магазина.
В режиме для покупателя - загрузится список вручную сформированных блоков фильтров и выбранных значений фильтров, которые нужно отобразить покупателю.
В режиме для продавца - загрузятся автоматически сформированные блоки со всеми фильтрами и со всеми значениями фильтров и справочников в них - это будет использовать продавец для ручного поиска товаров для формирования заказов или других сценариях использования поиска товаров.
Значения в атрибутах, опциях и пр. - автозаполняются по факту их использования в том или ином товаре. Это будет делаться асинхронно по регламенту, а не при исполнении запроса поиска, т.к. операция дорогая по времени.
Обязательный параметр запроса - ?collectionId=123
Опциональный параметр - режим запроса - под покупателем или под продавцом. По умолчанию - под покупателем
?mode=client или ?mode=customer
Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод:
/pub/products
в виде суммы параметров:
?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке OTHER
?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке ATTRIBUTES
?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке FEATURES
где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для filters.fields.type: "boolean".
Для для filters.fields.type: "decimal" также можно передавать диапазон указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4
Поля возвращаемого значения:
Параметр | Тип / формат | Описание |
filterBlocks | array | Массив блоков |
id | string | Идентификатор блока |
type | enum | Тип блока. ATTRIBUTES (только атрибуты товаров), FEATURES (только опции товаров), OTHER (остальные поля товаров) |
mode | enum |
Режим работы блока. CUSTOMER (покупатель, отображены выбранные продавцом фильтры в блоке), CLIENT (продавец - отображены все возможные поля и блоки) |
ordering | integer | Сортировка |
collectionId | string | Идентификатор коллекции к которой относится данный блок фильтров |
filters | Массив | Перечень фильтров в блоке |
enabled | boolean | Виден на витрине |
type | enum | Тип фильтра. PRICE, STOCK_AVAILABLE, SIZE_WIDTH, SIZE_DEPTH, SIZE_HEIGHT, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER, |
ordering | integer | Сортировка |
fields | Массив | Поля фильтра |
name | string | Наименование поля |
nameReadable | string | Наименование поля для пользователя |
type | enum | Тип поля. string, decimal, boolean |
ordering | integer | Сортировка |
stringValues | Массив | Массив строковых значений поля |
decimalValues | Массив | Массив числовых значений поля |
Пример ответа:
{
"success": true,
"filterBlocks": [
{
"id": "1029",
"type": "OTHER", // ATTRIBUTES, FEATURES
"mode": "CUSTOMER", //CLIENT
"ordering": 10,
"collectionId": "123456"
"filters":[
{
"type":"PRICE", // STOCK_AVAILABLE, SIZE_WIDTH, SIZE_DEPTH, SIZE_HEIGHT, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER
"enabled": true,
"ordering": 10,
"fields":[
{
"name" : "field1",
"nameReadable": "Поле 1",
"type": "string", // decimal, boolean
"ordering": 10,
"stringValues": [
"value1", "value2"
]
},
{
"name" : "field2",
"nameReadable": "Поле 2",
"type": "decimal",
"ordering": 11,
"decimalValues": [
15.2, 16.8
]
},
{
"name" : "field3",
"nameReadable": "Поле 3",
"type": "boolean",
"ordering": 12
}
]
}
]
}
]
}
Создание/обновление блока фильтров
/api/lite/products/filters
Создает или обновляет блок фильтров для покупателя.
Фильтры для продавца создаются и заполняются автоматом.
Если id указан - проводится обновление блока фильтров с указанным id, если не указан - создается новый блок.
Есть проверка - фильтры с типом ATTRIBUTES или FEATURES - можно добавлять только в отдельные блоки с аналогичными типами, в которых нет других фильтров
Поля в блоках фильтров (кроме типов ATTRIBUTES, FEATURES) отдельно не задаются, их бэкенд добавит автоматически по типу фильтра.
Пример обновления блока:
{
"id": "1029",
"type": "OTHER", // ATTRIBUTES, FEATURES
"ordering": 10,
"collectionId": "123456"
"filters":[
{
"type":"PRICE", // STOCK_AVAILABLE, SIZE_WIDTH, SIZE_DEPTH, SIZE_HEIGHT, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER
"enabled": true,
"fields":[ // только для ATTRIBUTES, FEATURES
{
"name" : "field1",
"nameReadable": "Поле 1",
"type": "string", // decimal, boolean
"ordering": 10,
"stringValues": [
"value1", "value2"
]
},
{
"name" : "field2",
"nameReadable": "Поле 2",
"type": "decimal",
"ordering": 11,
"decimalValues": [
15.2, 16.8
]
},
{
"name" : "field3",
"nameReadable": "Поле 3",
"type": "boolean",
"ordering": 12
}
]
}
]
}
Пример ответа:
{
"success": true,
"id": "1029"
}
Удаление блока фильтров
/api/lite/products/filters
Для удаления блока фильтров, выполняется следующий DELETE запрос с указанием идентификатора блока в параметре id
В ответ возвращается результат операции и id удаленного блока.
Пример успешного ответа:
{
"success": true,
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}
Пример ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Блока фильтров с указанным id не существует"
}
]
}
/api/lite/products/image
Создание картинки к продукту (/api/lite/products/image)
/api/lite/products/image
Загружает на сервер картинку и привязывает изображение к товару.
Используется заголовок запроса Content-type: multipart/form-data.
В качестве параметров запроса передается:
- id - идентификатор продукта
- upfile - картинка
На стороне сервера:
- Сохраняется оригинал картинки (но с ограничением в максимальное количество пикселей) - original
В ответ возвращается информация о загруженной картинке:
Успех
{
"success": true,
"url": "https://img.kak2c.ru/i/H/E/Y8x2a2Zj.jpg",
"id": "42737a4a-8f76-4aa6-a3d1-ae553f2409cb",
"pos": "10000.000000000000000"
}
Параметры:
- url- прямая ссылка на оригинал картинки
- id - идентификатор картинки (для последующего обновления или удаления)
- pos - автоматически присвоенное значение для сортировки
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Удаление картинки у товарного предложения (/api/lite/products/image)
/api/lite/products/image
Для удаления метки, выполняется следующий DELETE запрос с указанием идентификатора картинки в параметре id
В ответ возвращается результат операции и id удаленной картинки.
Пример успешного ответа:
{
"success": true,
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Картинки с указанным id не существует"
}
]
}
Обновление позиции картинки (/api/lite/products/image/pos)
/api/lite/products/image/pos
Обновляет значение позиции для сортировки картинок в списке
Запрос:
{
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
"pos": 123.456
}
Ответ:
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/products/variants
У каждого продукта есть хотя бы один вариант.
Вариант – реальный товар, имеющий характеристики, вес, размеры.
Создание/редактирование варианта (POST /api/lite/products/variants)
/api/lite/products/variants
Создает или обновляет вариант к указанному продукту.
Поле | Тип\формат | Описание |
productId | string | Идентификатор продукта, для которого создаются варианты |
variantId | string | Идентификатор варианта для обновления. Если не указан, создается новый вариант. |
extId | string | Дополнительный редактируемый код варианта. |
article | string | Артикул производителя товара. |
price | decimal | Цена розничной продажи. [deprecated] |
oldPrice | decimal | "Старая цена" - используется для отображения перечеркнутой цены. [deprecated] |
prices | object | Список цен |
defaultImage | string | Ссылка на стандартное изображение варианта (из набор изображений продукта). |
ordering | double | Число для сортировки между вариантами |
optionsUsed | array | Массив используемых опций данным вариантом |
code | string | Код варианта |
stringValue | string | Значение опции варианта (строка) |
decimalValue | decimal | Значение опции варианта (число) |
weight | decimal | Вес товара в граммах |
dimensions | object | Объект с характеристиками размеров товара. Задается в сантиметрах. |
barcodes | array | Список ШК варианта |
stock | object | Объект со списком кодов складов и остатков товаров на них |
warehouseCode | string | Код склада |
stockTotal | integer |
Опционально - установить общее количество товара в штуках на складе по умолчанию, включая количество в резерве. Только в сочетании с флагом updateStockTotal = true |
updateStockTotal | boolean |
Флаг активации корректировки общего количества товара из поля stockTotal на складе по умолчанию |
Пример вызова:
{
"productId": "1002",
"variantId": "1024",
"article": "POLO92/L/ЖЕЛ",
"price": 990, //deprecated
"oldPrice": 1200, //deprecated
"prices":[
{
"priceCode":"Розничная цена",
"value":990
},
{
"priceCode":"Цена до скидки",
"value":1200
}
],
"defaultImage": "8b16a469-2b8c-4df4-85f2-c9c9afa1f921",
"ordering": "123.123"
"optionsUsed": [
{
"code": "size",
"stringValue": "L"
},
{
"code": "color",
"stringValue": "желтый"
}
],
"weight": 500,
"dimensions": {
"height": 5,
"width": 5,
"depth": 10
},
"barcodes": [
{
"value": "42353456345345",
"isDefault": true,
"type": "COMMON"
},
{
"value": "34234232343",
"isDefault": false,
"type": "WILDBERRIES"
}
],
"stock": [
{
"warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
"stockTotal": 111
}
],
"updateStockTotal":false
}
Обновление отдельных полей варианта(PATCH /api/lite/products/variants)
/api/lite/products/variants
Обновляет одно или несколько полей варианта, значения отсутствующих в запросе полей при этом не изменяются.
Тело запроса аналогично POST /api/lite/products/variants
productId и variantId - необходимо указывать обязательно
Пример вызова:
{
"productId":"1002",
"variantId":"1024",
"barcodes":[
{
"value":"42353456345345",
"isDefault":true,
"type":"COMMON"
}
]
}
ответ аналогичен POST /api/lite/products/variants
Удаление варианта (DELETE /api/lite/products/variants)
/api/lite/products/variants
Удаляет вариант продукта.
Невозможно удалить единственный вариант продукта. Также, невозможно удалить вариант, у которого есть складские остатки.
Параметры запроса: productId - код продукта, variantId - код варианта
Упорядочить значения опций продукта (POST /api/lite/product/options/reorder)
/api/lite/product/options/reorder
Упорядочивает значения опций для указанного продукта.
Если данной опции не существует - значение пропускается.
Поле | Тип\формат | Описание |
productId | string | Идентификатор продукта, для которого создаются варианты |
options | array | Массив опций |
code | string |
Код опции |
values | string | Массив значений для данной опции в требуемом порядке. |
Пример вызова:
{
"productId": "1002",
"options": [
{
"code": "size",
"values": [
"S",
"M",
"L",
"XL"
]
},
{
"code": "color",
"values": [
"желтый",
"красный",
"синий",
"бело-синий"
]
}
]
}
/api/lite/file/image
Закачка картинки в облако
/api/lite/file/image
Закачка картинки в облако и получение url
Одновременно выполняет ресайз картинки в несколько разрешений, аналогично методу POST /api/lite/products/image
Принимает файл в виде multipart запроса в параметре upfile.
Хедер - только Authorization
Пример из Postman:
{
"success": true,
"url": "https://storage.yandexcloud.net/images-k2c/66ac26ec-08b2-4d4a-ae22-44c182847984.jpg",
"id": "66ac26ec-08b2-4d4a-ae22-44c182847984.jpg"
}
/api/lite/pub/products
Запрос указанного продукта (публичный)
/api/lite/pub/products
Метод возвращает продукты с вариантами.
Продукт всегда содержит хотя бы один вариант.
Фильтрация по полям товара:
Можно задавать фильтр параметром ?query=test - для фильтрации по полям article , humanId, shortName
Дополнительно можно фильтровать по конкректному продукту параметром ?id=1000
Также можно запрашивать конкретный вариант продукта полями variantId и variantExtId
Параметр available позволяет фильтровать скрытые товары. Если флаг не передан, скрытые товары не филтьруются(отображаются активные + скрытые)
Фильтрация по фильтрам, атрибутам, вариантам товара:
Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод GET /pub/products
в виде суммы параметров:
?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке OTHER
?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке ATTRIBUTES
?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке FEATURES
где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для filters.fields.type: "boolean".
Для для filters.fields.type: "decimal" также можно передавать диапазон указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4
Коллекции
Можно задавать фильтр по коллекциям параметром ?collections=1007,1008 - для фильтрации по id коллекций (можно передавать списком)
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/products?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Сортировка
Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.
Пример сортировки по имени (возрастание): /api/lite/products?order=shortname+asc
Пример сортировки по имени (убывание): /api/lite/products?order=shortname+desc
Доступные коды сортировки:
- shortname
- article
- price
-
amount
- discount
Пример вызова с одновременной фильтрацией, пейджинацией и сортировкой:
/api/lite/products?query=Поло&order=shortname+asc&page=0&size=200
Последовательность применения поисковых критериев:
- Если задан id продукта - поиск идет только по нему. Выход из поиска
- Если задан variantId конкретного варианта товара - поиск идет по нему (по внутреннему или внешнему коду варианта, согласно настройке аккаунта). Выход из поиска
- Если заданы параметры filters, attributes, features - будет поиск по ним (включая совместно по их комбинациям). Если одновременно задан параметр collections - он будет учтен. Выход из поиска
- Если заданы параметры query или collections - будет поиск по ним (включая совместно по обоим). Выход из поиска
- Иначе выводятся все продукты с учетом запрошенного флага deleted
Поле | Тип\формат | Описание |
recordsTotal | num | Общее количество записей в рамках заданной фильтрации. Используется для пейджинации. |
products |
array | Перечень товарных предложений |
id | string | Идентификатор продукта |
extId | string | Внешний код продукта |
shortName | string | Наименование продукта |
description | string | Описание (может содержать html) |
available | boolean | Отображение для продажи в онлайн-магазине |
deleted | boolean | Архивная карточка |
reviewScore | decimal | Оценка товара |
variants | array | Массив вариантов |
id | string | Уникальный идентификатор варианта. |
extId | string | Внешний код варианта |
article | string | Артикул (sku) товара |
price | decimal | Цена продажи |
oldPrice | decimal | "Старая" цена. Для визуализации скидки. |
stock | object | Остатки товара на всех складах |
pos | num | Порядковый номер варианта, относительно |
optionsUsed | array | Массив, указывающий соответствие опции и её значения для конкретного продукта. Значения указываются как ссылки на значение из общего словаря опций. |
defaultImage | string | Ссылка на изображение из общего массива изображений. Может быть не задан. |
weight | decimal | Вес товара |
dimensions | object | Содержит информацию о размерах |
options | array | Словарь возможных опций для продукта, и также значений опций. Каждое значение опции имеет собственный идентификатор. |
id | string | Идентификатор опции |
name | string | Наименование |
name_plural | string | Наименование во множественном числе |
values | array | Массив значений данной опции |
images | array | Массив изображений продукта. Первое изображение считается основным. |
id | string | Идентификатор изображения |
url | string | URL изображения |
pos | decimal | Позиция изображения в рамках продукта |
collections | array | Массив коллекций, в которые входит продукт |
id | string | Идентификатор коллекции |
attributes | array | Массив значений атрибутов продукта |
id | string | Идентификатор атрибута |
type | enum | Тип атрибута (см. описание атрибутов) |
stringValue | string | Значение атрибута (строка) |
decimalValue | decimal | Значение атрибута (число) |
ordering | decimal | Cортировка |
anyPublicCollections | boolean | Есть хотя бы одна коллекция в каталоге с этим товаром |
Пример результата запроса:
{
"success": true,
"recordsTotal": 2,
"products": [
{
"id": "1002",
"extId": "",
"shortName": "Футболка",
"description": "<p><h1><strong>Лучшие</strong> футболки</h1><br></p>",
"available": true,
"deleted": false,
"reviewScore": 4.0,
"anyPublicCollections": true,
"variants": [
{
"id": "1005",
"extId": null,
"article": "",
"price": 990,
"oldPrice": 1200,
"stock": [
{
"warehouseCode": "a8064680-6f8c-830c-1ea1-0ab8a032e244",
"stockTotal": 40,
"stockAvailable": 38,
"stockReserved": 2
}
],
"ordering": 1,
"optionsUsed": [
{
"id": "size",
"value": "L"
}
],
"defaultImage": "8b16a469-2b8c-4df4-85f2-c9c9afa1f921",
"weight": 500,
"dimensions": {
"height": 5,
"width": 5,
"depth": 10
}
},
{
"id": "1006",
"extId": null,
"article": "",
"price": 990,
"oldPrice": 1200,
"stock": [
{
"warehouseCode": "a8064680-6f8c-830c-1ea1-0ab8a032e244",
"stockTotal": 40,
"stockAvailable": 38,
"stockReserved": 2
}
],
"ordering": 2,
"optionsUsed": [
{
"id": "size",
"value": "M"
}
],
"defaultImage": null,
"weight": 500,
"dimensions": {
"height": 5,
"width": 5,
"depth": 10
}
}
],
"images": [
{
"id": "8b16a469-2b8c-4df4-85f2-c9c9afa1f921",
"url": "https://img.kak2c.ru/i/f/g/IA33pVkwd.jpg?1564511037",
"pos": "10000.000000000000000"
},
{
"id": "8b16a469-2b8c-4df4-85f2-c9c9afa1b323",
"url": "https://img.kak2c.ru/i/f/g/IA33pVkw.jpg?1564511037",
"pos": "5000.00000"
}
],
"collections": [
"1029", "1031"
],
"attributes": [
{
"id": "material",
"type": "string",
"stringValue": "Хлопок 97%, эластан 3%",
"ordering": 1
}
]
}
]
}
Запрос списка брендов по всем продуктам (публичный)
/api/lite/pub/products/brands
Параметр
|
Тип\формат | Описание |
searchString |
string | (необязательный) |
Запрос возвращает список всех существующих брендов магазина. Если задан параметр 'searchString' - возвращает только те бренды, в которых есть вхождение этой строки(в любом месте). Регистр не важен
Пример ответа (/api/lite/pub/products/brands?searchString=кактус)
:
Пример запроса:
{
"brands": [
"Кактус Дейли",
"Кактус ПРО"
]
}
/api/lite/pub/products/filters
Получение блоков фильтров
/api/lite/pub/products/filters
Возвращает для заданной коллекции перечень блоков и фильтров в них для поиска товаров.
Блоки бывают трех типов - Для атрибутов, для опций, и другие. Атрибуты и опции выделены в отдельные блоки ввиду потенциально большого количества справочников и значений в них.
Блоки возвращаются в режиме для покупателя - загрузится список вручную сформированных блоков фильтров и выбранных значений фильтров, которые нужно отобразить покупателю.
Значения в атрибутах, опциях и пр. - автозаполняются по факту их использования в том или ином товаре. Это будет делаться асинхронно по регламенту, а не при исполнении запроса поиска, т.к. операция дорогая по времени.
Обязательный параметр запроса - ?collectionId=123
Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод GET /pub/products
в виде суммы параметров:
?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке OTHER
?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке ATTRIBUTES
?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4
для всех фильтров в блоке FEATURES
где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для filters.fields.type: "boolean".
Для для filters.fields.type: "decimal" так же можно передавать диапазон указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4
Поля возвращаемого значения:
Параметр | Тип\формат | Описание |
filterBlocks | array | Массив блоков |
id | string | Идентификатор блока |
type | enum | Тип блока. ATTRIBUTES (только атрибуты товаров), FEATURES (только опции товаров), OTHER (остальные поля товаров) |
mode | enum |
Режим работы блока. CUSTOMER (покупатель, отображены выбранные продавцом фильтры в блоке), CLIENT (продавец - отображены все возможные поля и блоки) |
ordering | integer | Сортировка |
collectionId | string | Идентификатор коллекции к которой относится данный блок фильтров |
filters | Массив | Перечень фильтров в блоке |
type | enum | Тип фильтра. PRICE, STOCK_AVAILABLE, SIZE, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER |
ordering | integer | Сортировка |
fields | Массив | Поля фильтра |
name | string | Наименование поля |
nameReadable | string | Наименование поля, выводимое покупателю |
type | enum | Тип поля. string, decimal, boolean |
ordering | integer | Сортировка |
stringValues | Массив | Массив строковых значений поля |
decimalValues | Массив | Массив числовых значений поля |
Пример ответа:
{
"success": true,
"filterBlocks": [
{
"id": "1029",
"type": "OTHER", // ATTRIBUTES, FEATURES
"mode": "CUSTOMER", //CLIENT
"ordering": 10,
"collectionId": "123456"
"filters":[
{
"type":"PRICE", // STOCK_AVAILABLE, SIZE, WEIGHT, PRICE, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER
"ordering": 10,
"fields":[
{
"name" : "field1",
"nameReadable": "Поле 1",
"type": "string", // decimal, boolean
"ordering": 10,
"stringValues": [
"value1", "value2"
]
},
{
"name" : "field2",
"nameReadable": "Поле 2",
"type": "decimal",
"ordering": 11,
"decimalValues": [
15.2, 16.8
]
},
{
"name" : "field3",
"nameReadable": "Поле 3",
"type": "boolean",
"ordering": 12
}
]
}
]
}
]
}
/api/lite/products/templates/items
Получение шаблона импорта номенклатуры
/api/lite/products/templates/items
В ответ возвращается в бинарном виде с типом application/octet-stream xls файл для выгрузки в браузер пользователю
Можно задавать ему название "ItemTemplate.xls"
Успех:
application/octet-stream
Ошибка:
status 500
{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/settings/templates/items"
}
/api/lite/products/templates/items
Загружает на сервер xls файл (не xlsx) и производит анализ и формирование списка позиций для потенциального заказа.
Используется заголовок запроса Content-type: multipart/form-data. (аналогично методу POST /api/lite/products/image)
В качестве параметр запроса передается:
- upfile - xls файл
- searchColumn - поле поиска номенклатуры HUMANID | EXTID | ARTICLE | BARCODE
Xls файл для анализа должен быть исправленным файлом метода:
/api/lite/products/templates/items
(удалены ненужные строки, проставлены значения в колонки Цена, Количество, НДС).
Возвращаемые данные клиентское приложение может использовать для формирования списка позиций заказа/заказа поставщика
На сервере никакой документ не изменяется при этом.
В ответ возвращается информация о распознанных товарах в списке items и перечень предупреждений по строкам xls файла, елис такие возникли.
Успешные позиции в items можно использовать для формирования заказа, предупреждения можно отображать для пользователя.
Успех
{
"success": false,
"errors": [
{
"code": 0,
"message": "Найдены следующие ошибки в строке 10 : не указано количество; - Артикул , Серые"
},
{
"code": 0,
"message": "Найдены следующие ошибки в строке 12 : не найден товар по полю Код в kak2c и значению 12345 - Артикул 456, Голубые"
}
],
"items": [
{
"num": 1,
"variantId": "1021",
"productId": "1021",
"variantExtId":"EXT0029",
"name": "Розовые",
"article": "",
"quantity": 2,
"vatRate": "VAT_20",
"price": 0,
"barcode": "600000000212"
},
{
"num": 2,
"variantId": "1024",
"productId": "1024",
"name": "Красные",
"article": "",
"quantity": 3,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 3,
"variantId": "1025",
"productId": "1025",
"name": "Фиолетовые",
"article": "",
"quantity": 4,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 4,
"variantId": "1023",
"productId": "1023",
"name": "Оранжевые",
"article": "",
"quantity": 5,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 5,
"variantId": "1027",
"productId": "1027",
"name": "Белые",
"article": "",
"quantity": 6,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 6,
"variantId": "1019",
"productId": "1019",
"name": "Флуоресцентно зеленые",
"article": "",
"quantity": 1,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 7,
"variantId": "1018",
"productId": "1018",
"name": "Синие",
"article": "",
"quantity": 2,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 8,
"variantId": "1017",
"productId": "1017",
"name": "Черные",
"article": "",
"quantity": 3,
"vatRate": "VAT_20",
"price": 0
},
{
"num": 9,
"variantId": "1022",
"productId": "1022",
"name": "Флуоресцентно желтые",
"article": "",
"quantity": 5,
"vatRate": "VAT_20",
"price": 0
}
]
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/additional_descriptions
Дополнительные описания – текстовые характеристики для описания номенклатуры. Используются для отображения дополнительной информации в карточке продукта. Не являются обязательными к заполнению.
Справочник заголовков описаний является общим для аккаунта и заполняется при добавлении описаний с новыми уникальными заголовками.
Запрос справочника заголовков
/api/lite/products/additional_descriptions/titles
Метод возвращает список всех когда-либо добавленных заголовков.
Поле | Тип / формат | Описание |
title | string | Заголовок |
pos | double | Число для сортировки |
Пример результата запроса:
{
"success": true,
"titles": [
{
"title": "Применение",
"pos": "1915616.000000000000000"
},
{
"title": "Ингридиенты",
"pos": "1915655.000000000000000"
}
]
}
/api/lite/products/reviews
Получение отзывов
/api/lite/products/reviews
Возвращает отзывы на товары. Отзывы отсортированы по дате создания, начиная с новых.
Фильтрация
?productId=1030
- для фильтрации по идентификатору товара
?status=NEW
- для фильтрации по статусу отзыва
Пейджинация
Для пейджинации используются параметры page и size: size - отзывов на странице, page - номер страницы.
Пример: /api/lite/products/reviews?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Поле | Тип / формат | Описание |
id | string | Идентификатор отзыва. |
product | object | Информация о товаре |
id | string | Идентификатор товара |
shortName | string | Название товара |
images | array | Изображения товара |
url | string | Ссылка на изображение |
id | string | Имя файла |
pos | double | Позиция |
createTs | datetime | Время создания отзыва |
customerName | string |
Имя автора отзыва |
content | string |
Текст отзыва |
score | decimal |
Оценка (от 1 до 5) |
status | enum |
Статус отзыва
|
Пример результата запроса:
{
"success": true,
"recordsTotal": 1,
"reviews": [
{
"id": "e7951e18-8ee3-61b2-b616-018331a8fb06",
"product": {
"id": "1030",
"shortName": "Масло для бороды Бунтарь - Дамаск",
"images": [
{
"url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"pos": "10000.000000000000000"
}
]
},
"createTs": "2020-08-07 19:35:36",
"customerName": "Петя",
"content": "текст отзыва",
"score": 5,
"status": "NEW"
}
]
}
Редактирование отзывов
/api/lite/products/reviews
Редактирует отзыв.
Пример запроса
{
"id": "6c62461f-fcf4-c388-c3b4-e09971590d6b",
"customerName": "Петя",
"content": "текст отзыва",
"status": "CONFIRMED"
}
В ответ возвращается
Успех:
{
"success": true,
"review": {
"id": "6c62461f-fcf4-c388-c3b4-e09971590d6b",
"product": {
"id": "1030",
"shortName": "Масло для бороды Бунтарь - Дамаск",
"images": [
{
"url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"pos": "10000.000000000000000"
}
]
},
"createTs": "2020-08-07 18:53:46",
"customerName": "Петя",
"content": "текст отзыва",
"score": 5,
"status": "CONFIRMED"
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/products/reviews
Получение отзывов
/api/lite/pub/products/reviews
Возвращает подтвержденные отзывы на товары. Отзывы отсортированы по дате создания, начиная с новых.
?productId=1030
- обязательный параметр для фильтрации по идентификатору товара
Пейджинация
Для пейджинации используются параметры page и size: size - отзывов на странице, page - номер страницы.
Пример: /api/lite/pub/products/reviews?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Поле | Тип / формат | Описание |
id | string | Идентификатор отзыва. |
product | object | Информация о товаре |
id | string | Идентификатор товара |
shortName | string | Название товара |
images | array | Изображения товара |
url | string | Ссылка на изображение |
id | string | Имя файла |
pos | double | Позиция |
createTs | datetime | Время создания отзыва |
customerName | string |
Имя автора отзыва |
content | string |
Текст отзыва |
score | decimal |
Оценка (от 1 до 5) |
status | enum |
Статус отзыва
|
Пример результата запроса:
{
"success": true,
"recordsTotal": 1,
"reviews": [
{
"id": "e7951e18-8ee3-61b2-b616-018331a8fb06",
"product": {
"id": "1030",
"shortName": "Масло для бороды Бунтарь - Дамаск",
"images": [
{
"url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"pos": "10000.000000000000000"
}
]
},
"createTs": "2020-08-07 19:35:36",
"customerName": "Петя",
"content": "текст отзыва",
"score": 5,
"status": "CONFIRMED"
}
]
}
Создание отзывов
/api/lite/pub/products/reviews
Добавляет новый отзыв.
Пример запроса
{
"productId": "1030",
"customerName": "Петя",
"content": "текст отзыва",
"score": 5
}
В ответ возвращается
Успех:
{
"success": true,
"review": {
"id": "6c62461f-fcf4-c388-c3b4-e09971590d6b",
"product": {
"id": "1030",
"shortName": "Масло для бороды Бунтарь - Дамаск",
"images": [
{
"url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
"pos": "10000.000000000000000"
}
]
},
"createTs": "2020-08-07 18:53:46",
"customerName": "Петя",
"content": "текст отзыва",
"score": 5,
"status": "NEW"
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/features/appearance
По свойствам продуктов можно задавать дополнительно код цвета и url картинки
Запрос свойств отображения по продукту
/api/lite/products/features/appearance
Метод возвращает список кодов и url по используемым в данном продукте свойствам
обязательный параметр - id продукта
Пример результата запроса:
{
"success": true,
"appearanceFields": [
{
"feature": "color",
"value": "Синие",
"code": "#252525",
"imageUrl": ""
},
{
"feature": "color",
"value": "Черные",
"code": "#335522",
"imageUrl": "https://i.mycdn.me/image?id=803347578459&plc=WEB&tkn=*JEEWXMlfdErrCiuXFgcM6G0WGxs&fn=sqr_288"
}
]
}
Создание/обновление свойств отображения
/api/lite/products/features/appearance
Создает или обновляет свойства отображения (code, imageUrl) для указанного продукта + опции + значения опции.
Пример создания/обновления атрибута:
{
"productId": "1003",
"feature": "color",
"value": "Черные",
"code": "#335522",
"imageUrl": "https://i.mycdn.me/image?id=803347578459&plc=WEB&tkn=*JEEWXMlfdErrCiuXFgcM6G0WGxs&fn=sqr_288"
}
/api/lite/pub/products/features/appearance
По свойствам продуктов можно запрашивать дополнительно код цвета и url картинки
Запрос свойств отображения по продукту
/api/lite/pub/products/features/appearance
Метод возвращает список кодов и url по используемым в данном продукте свойствам
обязательный параметр - id продукта
Пример результата запроса:
{
"success": true,
"appearanceFields": [
{
"feature": "color",
"value": "Синие",
"code": "#252525",
"imageUrl": ""
},
{
"feature": "color",
"value": "Черные",
"code": "#335522",
"imageUrl": "https://i.mycdn.me/image?id=803347578459&plc=WEB&tkn=*JEEWXMlfdErrCiuXFgcM6G0WGxs&fn=sqr_288"
}
]
}
/api/lite/products/export_ff
Выгрузка номенклатуры в Темполайн
/api/lite/products/export_ff
Создает/обновляет указанную номенклатуру в складской системе
Пример вызова:
{
"warehouseCode": "2970c244-20f4-bab8-4c29-b04504281120",
"products": ["1042"]
}
Пример успешного ответа
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/accounting_attributes
Атрибуты учета – дополнительные характеристики для учета товара при отгрузке. Используются для проверки уникальных номеров товара. Не являются обязательными к заполнению.
Справочник атрибутов является общим для аккаунта.
Значения атрибутов задаются в информации о продуктах.
Запрос справочника атрибутов
/api/lite/products/accounting_attributes
Метод возвращает список всех доступных атрибутов.
Поле | Тип / формат | Описание |
id | string | Идентификатор атрибута. |
code | string | Код атрибута - латиницей |
title | string | Наименование атрибута |
values | array | Справочник значений атрибута |
stringValue | string | Значение |
Пример результата запроса:
{
"success": true,
"attributes": [
{
"id": "a629bb7c-331e-ef94-ebac-5955731bf142",
"code": "chestnyznak",
"title": "Честный знак",
"values": [
{
"stringValue": "1111"
},
{
"stringValue": "2222"
}
]
}
]
}
Создание/обновление атрибута
/api/lite/products/accounting_attributes
Создает или обновляет атрибут.
Code атрибута при создании/обновлении - обязательное поле, он задается явно для каждого атрибута.
Пример создания/обновления атрибута:
{
"code": "chestnyznak",
"title": "Честный знак",
"values": [
{
"stringValue": "1111"
},
{
"stringValue": "2222"
}
]
}
/api/lite/products/stock_revise
Сверка остатков с Темполайн
/api/lite/products/stock_revise
Возвращает списки расхождений по товарам
Параметр warehouse_id - ид склада(необязательный). Если не указан, автоматически ищется склад с типом FULFILLMENT
/api/lite/products/stock_revise?warehouse_id=e147712f-172c-8c1c-12e6-0feb0e4968c7
Пример успешного ответа
{
"success": true,
"moreItems": [
{
"item": {
"variantId": "demo1027",
"productId": "demo1009",
"name": "тест",
"img": "https://storage.yandexcloud.net/images-k2c/bb514759-b917-45fb-8267-8541ec586451.jpg",
"barcode": "6412600817669"
},
"available": 96,
"reserved": 0,
"external": 95,
"diff": 1,
"afterCorrection": 95,
"reviseError": false
},
{
"item": {
"variantId": "demo1031",
"productId": "demo1013",
"name": "Футболка №2 (демо товар)",
"img": "https://storage.yandexcloud.net/images-k2c/ce86c7c0-2b17-4d84-a914-c00d2d027b88.png",
"barcode": ""
},
"available": 3,
"reserved": 2,
"external": 0,
"diff": 3,
"afterCorrection": 2,
"reviseError": false
}
],
"lessItems": [
{
"item": {
"variantId": "demo1032",
"variantExtId": "ext12313123",
"productId": "demo1014",
"name": "Наушники",
"article": "121234134",
"img": "https://storage.yandexcloud.net/images-k2c/3d526d88-dcd8-48e6-8f45-9b09a19026ca.png",
"barcode": "6412600817222"
},
"available": 44,
"reserved": 32,
"external": 46,
"diff": 2,
"afterCorrection": 46,
"reviseError": false
},
{
"item": {
"variantId": "demo1000",
"productId": "demo1000",
"name": "Кактус Эуфобия Триангуларис",
"barcode": ""
},
"available": 67,
"reserved": 21,
"external": 68,
"diff": 1,
"afterCorrection": 68,
"reviseError": false
}
]
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/wb_categories
Запрос категорий товаров Wildberries
/api/lite/products/wb_categories
Получает список вариантов категорий товаров для Wildberries
Пример результата запроса:
{
"success": true,
"categories": [
{
"title": "Общая категория",
"code": "COMMON",
"wbCode": "1"
},
{
"title": "Косметика, бытовая химия и питание",
"code": "COSMETICS_AND_HOUSEHOLD_CHEMICALS",
"wbCode": "2"
},
{
"title": "Верхняя одежда и товары на вешалках",
"code": "CLOTHES",
"wbCode": "3"
},
{
"title": "Обувь и товар в коробках",
"code": "FOOTWEAR",
"wbCode": "4"
},
{
"title": "Книжная продукция и полиграфия",
"code": "BOOKS",
"wbCode": "5"
},
{
"title": "Текстильные товары и аксессуары",
"code": "TEXTILE_AND_ACCESSORIES",
"wbCode": "6"
},
{
"title": "Товары из кожи",
"code": "LEATHER",
"wbCode": "7"
},
{
"title": "Посуда и кухонные принадлежности",
"code": "DISHES",
"wbCode": "8"
},
{
"title": "Очки и оправы",
"code": "GLASSES",
"wbCode": "9"
},
{
"title": "Товары для взрослых",
"code": "PRODUCTS_FOR_ADULTS",
"wbCode": "10"
},
{
"title": "Грунт",
"code": "SOIL",
"wbCode": "11"
},
{
"title": "Ювелирная продукция",
"code": "JEWELRY",
"wbCode": "12"
},
{
"title": "Продукты питания и зоотовары",
"code": "FOOD_AND_PET_SUPPLIES",
"wbCode": "13"
}
]
}
/api/lite/products/delete_barcodes_ff
Удаление ШК у номенклатуры в Темполайн
/api/lite/products/delete_barcodes_ff
Удаляет ШК у указанной номенклатуры в складской системе
Массив строк "barcodes" является приоритетным в поиске. Если он не пустой, поиск по id продукта не происходит
Пример вызова:
{
"warehouseCode": "2970c244-20f4-bab8-4c29-b04504281120",
"barcodes": ["4607043102393"]
"products": ["1042"]
}
Пример успешного ответа
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/history
Запрос истории изменения товаров
/api/lite/products/history
Метод возвращает список изменений по товару.
параметры:
productId - идентификатор продукта
page - страница результатов (по умолчанию 0)
size - число записей на странице (по умолчанию, 5)
jsonData - json товара, в формате /api/lite/products, если не передан, то jsonData не возвращается
id - идентификатор эвента(например, c9ae018d-2163-069c-b2fa-b46077652a73)
GET api/lite/products/history?productId=new0001
Пример результата запроса:
{
"events": [
{
"changeSource": "USER",
"description": "",
"eventDate": "2022-02-15 15:34:33.444",
"eventParameters": {
"from": "POST /products"
},
"id": "c9ae018d-2163-069c-b2fa-b46077652a73",
"level": "INFO",
"success": true,
"type": "SKU",
"userLogin": "z@z.zz"
},
{
"changeSource": "XLS",
"description": "",
"eventDate": "2022-02-15 15:32:58.070",
"eventParameters": {
"from": "XlsProductControllerService.sendProductMessages"
},
"id": "0c654d32-b1e3-d931-43ec-f92c01341806",
"level": "INFO",
"success": true,
"type": "SKU",
"userLogin": "z@z.zz"
}
],
"recordsTotal": 2,
"success": true
}
GET api/lite/products/history?id=c9ae018d-2163-069c-b2fa-b46077652a73
Пример результата запроса:
{
"events": [
{
"changeSource": "USER",
"description": "",
"eventDate": "2022-02-15 15:34:33.444",
"eventParameters": {
"from": "POST /products"
},
"id": "c9ae018d-2163-069c-b2fa-b46077652a73",
"jsonData": "{\"anyPublicCollections\":false,\"available\":true,\"brandName\":\"Levi's\",\"collections\":[\"1001\"],\"deleted\":false,\"description\":\"922\",\"expirationMode\":\"NO_EXPIRATION\",\"id\":\"new0001\",\"internationalDescription\":\"0\",\"isBestseller\":false,\"isNovelty\":false,\"shortName\":\"Джинсы (демо товар)1\",\"type\":\"SKU\",\"useBatchAccounting\":false,\"variants\":[{\"id\":\"100002\",\"isFfPhysicalSetSynchronized\":false,\"isFfSynchronised\":true,\"isPhysicalSet\":false,\"ordering\":\"1971940.000000000000000\",\"stock\":[{\"stockAvailable\":0,\"stockDefective\":0,\"stockDefectiveReserved\":0,\"stockReserved\":0,\"stockTotal\":0,\"warehouseCode\":\"27f650d9-7378-33c1-bae1-6aea66140bbd\"},{\"stockAvailable\":0,\"stockDefective\":0,\"stockDefectiveReserved\":0,\"stockReserved\":0,\"stockTotal\":0,\"warehouseCode\":\"374f35a6-633f-bc9d-917a-ce37cb74bd49\"}],\"type\":\"SKU\",\"vat\":\"NO_VAT\"}],\"vat\":\"NO_VAT\"}",
"level": "INFO",
"success": true,
"type": "SKU",
"userLogin": "z@z.zz"
}
],
"recordsTotal": 1,
"success": true
}
/api/lite/products/history/diff
Запрос разницы между двумя состояниями истории товара
/api/lite/products/history/diff
Метод возвращает список человекочитаемых изменений товара.
leftId и rightId - идентификаторы записей истории изменений товара, полученных в методе /api/lite/products/history
Пример запроса:
{
"items":[
{
"leftId":"8df52d29-7f75-c272-6894-d2c00e653c8c",
"rightId":"a5c42f70-c634-21cf-b25e-f2e585db221e"
},
{
"leftId":"63120d8b-b0b5-145e-ff44-d1bea50a77e7",
"rightId":"8df52d29-7f75-c272-6894-d2c00e653c8c"
}
]
}
Пример результата запроса:
{
"items": [
{
"diff": "Цена: \"21000.00\" -> \"20000.00\", Розничная цена: \"21000.00\" -> \"20000.00\", Габариты: \"Ш:101 В:60 Г:30\" -> \"Ш:100 В:60 Г:30\"",
"leftId": "8df52d29-7f75-c272-6894-d2c00e653c8c",
"rightId": "a5c42f70-c634-21cf-b25e-f2e585db221e"
},
{
"diff": "Название: \"Компьютер (демо товар)2\" -> \"Компьютер (демо товар)1\"",
"leftId": "63120d8b-b0b5-145e-ff44-d1bea50a77e7",
"rightId": "8df52d29-7f75-c272-6894-d2c00e653c8c"
}
],
"success": true
}
/api/lite/products/batch
Создание/обновление нескольких продуктов (POST /api/lite/products/batch)
/api/lite/products/batch
Создает или обновляет продукты, переданные списком. Ограничение - 1000 продуктов.
Структура продуктов в списке аналогична методу POST /api/lite/products
Пример вызова:
{
"products":[
{
"id":"BATCH2500",
"shortName":"BATCH2500",
"variantsToUpdate":[
{
"variantId":"BATCH2500",
"productId":"BATCH2500",
"barcodes":[
{
"value":"bc9194352",
"isDefault":true
}
]
}
]
},
{
"id":"BATCH2501",
"shortName":"BATCH2501",
"variantsToUpdate":[
{
"variantId":"BATCH2501",
"productId":"BATCH2501",
"barcodes":[
{
"value":"bc7216735",
"isDefault":true
}
]
}
]
},
{
"id":"BATCH2502",
"shortName":"BATCH2502",
"variantsToUpdate":[
{
"variantId":"BATCH2502",
"productId":"BATCH2502",
"barcodes":[
{
"value":"bc6271942",
"isDefault":true
}
]
}
]
}
]
}
Пример положительного ответа:
{
"finishTime": "2022-03-29 19:14:47",
"products": [
{
"id": "BATCH2500",
"product": {
"available": true,
"collections": [
"1001"
],
"deleted": false,
"id": "BATCH2500",
"shortName": "BATCH2500",
"type": "SKU",
"useBatchAccounting": false,
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "bc9900111"
}
],
"id": "BATCH2500",
"isFfPhysicalSetSynchronized": false,
"isFfSynchronised": true,
"isPhysicalSet": false,
"ordering": "1976406.000000000000000",
"stock": [
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
},
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
}
],
"type": "SKU",
"vat": "NO_VAT"
}
],
"vat": "NO_VAT"
},
"success": true,
"variantsResult": [
{
"productId": "BATCH2500",
"success": true,
"variantId": "BATCH2500"
}
]
},
{
"id": "BATCH2501",
"product": {
"available": true,
"collections": [
"1001"
],
"deleted": false,
"id": "BATCH2501",
"shortName": "BATCH2501",
"type": "SKU",
"useBatchAccounting": false,
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "bc5524020"
}
],
"id": "BATCH2501",
"isFfPhysicalSetSynchronized": false,
"isFfSynchronised": true,
"isPhysicalSet": false,
"ordering": "1976406.000000000000000",
"stock": [
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
},
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
}
],
"type": "SKU",
"vat": "NO_VAT"
}
],
"vat": "NO_VAT"
},
"success": true,
"variantsResult": [
{
"productId": "BATCH2501",
"success": true,
"variantId": "BATCH2501"
}
]
},
{
"id": "BATCH2502",
"product": {
"available": true,
"collections": [
"1001"
],
"deleted": false,
"id": "BATCH2502",
"shortName": "BATCH2502",
"type": "SKU",
"useBatchAccounting": false,
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "bc6869740"
}
],
"id": "BATCH2502",
"isFfPhysicalSetSynchronized": false,
"isFfSynchronised": true,
"isPhysicalSet": false,
"ordering": "1976406.000000000000000",
"stock": [
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
},
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
}
],
"type": "SKU",
"vat": "NO_VAT"
}
],
"vat": "NO_VAT"
},
"success": true,
"variantsResult": [
{
"productId": "BATCH2502",
"success": true,
"variantId": "BATCH2502"
}
]
}
],
"startTime": "2022-03-29 19:14:47",
"success": true
}
Пример положительного ответа с ошибкой сохранения:
{
"finishTime": "2022-03-29 19:22:30",
"products": [
{
"errors": [
{
"code": 0,
"message": "Заданный ID продукта \"№BATCH2500\" не соответствует требованиям: ID должен содержать только цифры, латиницу, тире, подчеркивание, #, или точку "
}
],
"success": false
},
{
"id": "BATCH2501",
"product": {
"available": true,
"collections": [
"1001"
],
"deleted": false,
"id": "BATCH2501",
"shortName": "BATCH2501",
"type": "SKU",
"useBatchAccounting": false,
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "bc7216735"
}
],
"id": "BATCH2501",
"isFfPhysicalSetSynchronized": false,
"isFfSynchronised": true,
"isPhysicalSet": false,
"ordering": "1976406.000000000000000",
"stock": [
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
},
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
}
],
"type": "SKU",
"vat": "NO_VAT"
}
],
"vat": "NO_VAT"
},
"success": true,
"variantsResult": [
{
"productId": "BATCH2501",
"success": true,
"variantId": "BATCH2501"
}
]
},
{
"id": "BATCH2502",
"product": {
"available": true,
"collections": [
"1001"
],
"deleted": false,
"id": "BATCH2502",
"shortName": "BATCH2502",
"type": "SKU",
"useBatchAccounting": false,
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "bc6271942"
}
],
"id": "BATCH2502",
"isFfPhysicalSetSynchronized": false,
"isFfSynchronised": true,
"isPhysicalSet": false,
"ordering": "1976406.000000000000000",
"stock": [
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
},
{
"stockAvailable": 0,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockReserved": 0,
"stockTotal": 0,
"warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
}
],
"type": "SKU",
"vat": "NO_VAT"
}
],
"vat": "NO_VAT"
},
"success": true,
"variantsResult": [
{
"errors": [
{
"code": 0,
"message": "Штрихкод bc7216735 уже используются в варианте [BATCH2501] BATCH2501, ШК: bc7216735 "
}
],
"productId": "BATCH2502",
"success": false,
"variantId": "BATCH2502"
}
]
}
],
"startTime": "2022-03-29 19:22:30",
"success": true
}
Обновление отдельных полей нескольких продуктов (PATCH /api/lite/products/batch)
/api/lite/products/batch
Обновляет одно или несколько полей продукта, значения отсутствующих в запросе полей при этом не изменяются.
Тело запроса аналогично POST /api/lite/products/batch
id - необходимо указывать обязательно
Пример вызова:
{
"products":[
{
"id":"1015",
"shortName":"Limited Edition Паста (помада) для укладки волос",
"internationalDescription":"abc"
},
{
"id":"1016",
"shortName":"Товар 2"
}
]
}
ответ аналогичен POST /api/lite/products/batch
/api/lite/products/batch/accounting/stocks
Запрос остатков по партиям товаров (GET/api/lite/products/batch/accounting/stocks)
/api/lite/products/batch/accounting/stocks
Запрос остатков по товарам, для которых ведется учет по партиям.
Пример вызова:
GET/api/lite/products/batch/accounting/stocks?warehouseCode=12345&variantId=1234&format=json
warehouseCode - Код склада, обязательный
variantId - список id вариантов товаров, через запятую, опциональный
format - формат данных - json или xls, опциональный. В случае xls в ответе будет ссылка на файл
Пример положительного ответа:
{
"items": [
{
"batchAccountingStocks": [
{
"available": 50,
"batchAccountingNumber": "2478 01.01.2033 0:00:00",
"expirationDays": 0,
"expirationDaysLimit": 0,
"productionDate": "2022-11-01",
"expirationDate": "2022-12-01",
"manufacturer": "",
"manufacturerRequisites": "",
"useBatchAccounting": true,
"useExpiration": true
},
{
"available": 8,
"batchAccountingNumber": "2478 09.01.2021 0:00:00",
"expirationDays": 0,
"expirationDaysLimit": 0,
"productionDate": "2022-11-01",
"expirationDate": "2022-12-01",
"manufacturer": "",
"manufacturerRequisites": "",
"useBatchAccounting": true,
"useExpiration": true
},
{
"available": 52,
"batchAccountingNumber": "2478 09.08.2025 0:00:00",
"expirationDays": 0,
"expirationDaysLimit": 0,
"productionDate": "2022-11-01",
"expirationDate": "2022-12-01",
"manufacturer": "",
"manufacturerRequisites": "",
"useBatchAccounting": true,
"useExpiration": true
}
],
"variantId": "2478"
}
],
"success": true
}
{
"file": "https://link_to_file.xls",
"success": true
}
/api/lite/products/variants/batch
Обновление отдельных полей нескольких вариантов(PATCH /api/lite/products/variants/batch)
/api/lite/products/variants/batch
Обновляет одно или несколько полей варианта, значения отсутствующих в запросе полей при этом не изменяются.
productId и variantId - необходимо указывать обязательно
Пример вызова:
{
"variantsToUpdate":[
{
"weight":200000,
"productId":"demo1012",
"variantId":"demo1030",
"extId":"11011"
},
{
"weight":233,
"productId":"demo1013",
"variantId":"demo1031",
"extId":"11012"
}
]
}
API загрузки уникальных номеров номенклатуры в Кактус
Загрузка уникальных номеров через json файл
/api/lite/products/load/unique_number/json
Пример вызова:
{
"items" : [
{
"variantId" : "1000",//variant_id номенклатуры
"uniqueNumbers" : [
{
"uniqueNumber" : "1232344456777",//уникальный номер
"type" : "UIT"// пока только UIT
}
]
}
]
}
Пример успешного ответа
{
"success": true
}
Загрузка уникальных номеров через excel файл
/api/lite/products/load/unique_number/excel
Эксель файл должен быть в формате xls, в первой колонке varian_id номенклатуры, вторая колонка уникальный номер, третья тип уникального номера. Например 1000, njkjnw9i98, UIT.
upFile - файл excel в formData.
Пример успешного ответа
{
"success": true
}
Получить список загруженных уникальных номеров номенклатуры
/api/lite/products/unique_numbers/list?variantId=1000&isUsed=false&page=0&size=10
variantId - ид варианта номенклатуры
isUsed - использованный/не использованные уникальные номенклатуры
page и size - для пагинации
Пример успешного ответа
{
"success": true,
"uniqueNumbers": [
{
"disabled": false,
"isReserved": false,
"physicalSet": "",
"purchaseOrder": "",
"uniqueNumber": "0104064211748539215%HefMSHYlegL9100BE92IlF/M3RjtFd4KI5xnWnri5ZHCNIlndYdSVKLoG2VvWg3BZ3dPM1EnijDoPSuNJmVI63clfwHgXLVy3vDCXKvnw==",
"type": "UIT"
},
{
"disabled": false,
"isReserved": false,
"physicalSet": "",
"purchaseOrder": "",
"uniqueNumber": "0104064211296115217>dGPovOMpiDH␝918093␝92gbLYtaYLYnFIUsQilCOiicPOKJZMiuKKUeAIvO3R9wgWoEip5FjubkxPpXsOuCr9N4nMGXuD6VgS8oK/jkfvJw==␝",
"type": "UIT"
}
]
}
Получить уникальный номер для номенклатуры, поставке или комплектации
/api/lite/products/unique_number
Данный метод возвращает уникальный номер, и ставит галку что данный уникальный номер зарезервирован.
variant_id - ид варианта номенклатуры
type_unique_number - тип уникального номера
id(необязательный) - номер документа(поставки, комплектации)
doc_type - тип документа (PURCHASE_ORDER, PHYSICAL_SET_ORDER)
Пример успешного ответа
{
"success" : true,
"variantId" : "1000",
"uniqueNumber" : "mlkmkjnjkmkjnjk"
}
Проставить флаг использования уникальному номеру
/api/lite/products/unique_number/used
Пример вызова:
{
"variantId" : "1000",
"uniqueNumber" : "njkdhbjcs"
}
Данный метод ставит флаг что данный уникальный номер использован.
Пример успешного ответа
{
"success": true
}
/api/lite/products/variants/eshop_settings
Изменение внешних кодов для интеграций (POST /api/lite/products/variants/eshop_settings)
/api/lite/products/variants/eshop_settings
Обновляет настройки для вариантов. Ограничение - 1000 вариантов.
Пример вызова:
{
"variants": [
{
"variantId": "1000",
"eshopSettings": [
{
"enabled": true,
"eshopId": "44fce711-e809-59ed-895a-661a32886d7f",
"extId": "HTW-LX3",
"zeroStock": true
},
{
"enabled": true,
"eshopId": "4f4509b3-3b5b-1474-cabd-dfe8fce1b9ca",
"extId": "HTW-LX3"
}
]
}
]
}
Пример положительного ответа:
{
"success": true,
"variants": [
{
"success": true,
"variantId": "1000"
}
]
}
Пример положительного ответа с ошибкой сохранения:
{
"success": true,
"variants": [
{
"success": false,
"errors": [
{
"code": 0,
"message": "Не найдена интеграция с указанным ID"
}
],
"variantId": "1000"
}
]
}
/api/lite/products/warehouse/categories
Категории товаров (продуктов) хранятся в таблице oms_domain_sku_category. Кактус еженочно синхронизируется с WMS, получая оттуда актуальные категории.
Запрос справочника атрибутов
/api/lite/products/warehouse/categories
Метод возвращает список категорий товаров.
Поле | Тип / формат | Описание |
format | string | Формат ответа (json/xls) |
Пример результата запроса:
{
"items": [
{
"code": "weak",
"title": "Хрупкое"
},
{
"code": "strong",
"title": "Сильное"
},
{
"code": "bubble",
"title": "Булькающее"
}
],
"success": true
}
/api/lite/products/stocks
Метод возвращает остатки товарных предложений (с возможностью фильтрации по дате изменения остатков).
Запрос остатков
/api/lite/products/stocks
Параметры запроса:
stock_updated_from - дата, с момента которой изменились остатки, формат yyyy-MM-dd'T'HH:mm:ss[.SSS]
Пример: /api/lite/products/stocks?stock_updated_from=2024-05-21T00:00:00.000
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/products/stocks?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=1000
Максимальное количество записей на одной странице - 100 000. Даже если указано значение более 100 000
Пример результата запроса:
"id": "215606" - ИД варианта
{
"recordsTotal": 2873,
"success": true,
"variants": [
{
"id": "215606",
"stock": [
{
"stockAvailable": 8,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockExpired": 0,
"stockReserved": 2,
"stockTotal": 10,
"warehouseCode": "d7a490e3-7dd6-0104-60b6-ca222b03bf18"
}
]
},
{
"id": "213485",
"stock": [
{
"stockAvailable": 25,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockExpired": 0,
"stockReserved": 1,
"stockTotal": 26,
"warehouseCode": "d7a490e3-7dd6-0104-60b6-ca222b03bf18"
}
]
},
{
"id": "206949",
"stock": [
{
"stockAvailable": 14,
"stockDefective": 0,
"stockDefectiveReserved": 0,
"stockExpired": 0,
"stockReserved": 1,
"stockTotal": 15,
"warehouseCode": "d7a490e3-7dd6-0104-60b6-ca222b03bf18"
}
]
}
]
}
Коллекции
/api/lite/collections
Получение списка коллекций
/api/lite/collections
Возвращает список всех коллекций.
Товары группируются по коллекциям для отображения в каталоге товаров в интернет-магазине.
Фильтры:
/api/lite/collections?id=1000 – возвращает информацию только по выбранной коллекции с указанным id
Поля возвращаемого значения
Параметр | Тип\формат | Описание |
collections | array | Массив коллекций |
id | string | Идентификатор коллекции |
title | string | Заголовок коллекции |
description | string | Описание коллекции (html) |
surl | string | Семантическое наименование ссылки (friendly URL) на коллекцию |
parentId | string | Идентификатор родительской коллекции |
type | string | Тип коллекции (CATALOG/PRODUCT) |
isAllProducts |
boolean | Является коллекцией Все продукты |
fillType | enum | "MANUAL", "AUTO". Тип заполнения коллекции продуктами |
defaultImage | string | Ссылка на изображение коллекции |
productCount | integer | Количество продуктов (не удаленных) в коллекции (readonly) |
includedInCatalog | boolean | Входит в активный каталог-меню сайта (readonly) |
breadcrumbs | array | Хлебные крошки с путем от корневой коллекции до заданной (только при фильтре по id) |
products | array | Массив продуктов, входящих в коллекцию |
filters | array | Массив фильтров коллекции |
Пример ответа:
{
"success": true,
"collections": [
{
"id": "1029",
"title": "Зерновой кофе",
"description": "<P>Лучший <B>зерновой</B> кофе</P>",
"surl": "zernovoy_coffee",
"parentId": "123",
"type": "PRODUCT",
"defaultImage":"http://address.ru/123.jpg",
"breadcrumbs":[
{"id": "1", "title": "Все товары", "level":0},
{"id": "1023", "title": "Кофе", "level":1},
{"id": "1029", "title": "Зерновой кофе", "level":2}
],
"products": [
{
"id": "1000",
"extId": null,
"shortName": "Кактус Эуфобия Триангуларис",
"description": null,
"available": null,
"deleted": null,
"brandName": null,
"countryOfOrigin": null,
"tnvedCode": null,
"internationalDescription": null,
"isBestseller": null,
"isNovelty": null,
"type": null,
"vat": null,
"options": null,
"images": null,
"variants": null,
"collections": null,
"attributes": null,
"collectionPos": "100.000000000000000"
}
]
"fillType":"AUTO",
"isAllProducts": false,
"productCount": 15,
"includedInCatalog": true,
"logicMode":"AND",
"filters":[
{"num":1, "filterType":"BRAND_NAME", "compareOperation":"CONTAINS", "compareValue":"Samsung"}
]
}
]
}
Создание/обновление коллекции
/api/lite/collections
Создает или обновляет коллекцию.
Если id указан - проводится обновление коллекции с указанным id, если не указан - создается новая коллекция.
Пример обновления коллекции:
{
"id":"1029",
"title": "Зерновой кофе",
"description": "<P>Лучший <B>зерновой</B> кофе</P>",
"surl": "zernovoy_coffee",
"parentId" : "123",
"defaultImage":"http://address.ru/123.jpg",
"type": "PRODUCT",
"fillType":"MANUAL",
"products": [
{
"id": "1000",
"extId": null,
"shortName": "Кактус Эуфобия Триангуларис",
"description": null,
"available": null,
"deleted": null,
"brandName": null,
"countryOfOrigin": null,
"tnvedCode": null,
"internationalDescription": null,
"isBestseller": null,
"isNovelty": null,
"type": null,
"vat": null,
"options": null,
"images": null,
"variants": null,
"collections": null,
"attributes": null,
"collectionPos": "100.000000000000000"
}
]
"logicMode":"AND",
"filters":[
{"num":1, "filterType":"BRAND_NAME", "compareOperation":"CONTAINS", "compareValue":"Samsung"}
]
}
Удаление коллекции
/api/lite/collections
Для удаления коллекции, выполняется следующий DELETE запрос с указанием идентификатора коллекции в параметре id.
В ответ возвращается результат операции и id удаленной коллекции.
Продукты, входившие в удаляемую коллекцию - более не будут входить в нее.
Дочерние коллекции у удаляемой - тоже удаляются, как и привязки их к товарам.
Пример успешного ответа
{
"success": true,
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Картинки с указанным id не существует"
}
]
}
/api/lite/collections/image
Создание картинки к коллекции
/api/lite/collections/image
Загружает на сервер картинку и привязывает изображение к коллекции.
Используется заголовок запроса Content-type: multipart/form-data.
В качестве параметров запроса передается:
- id - код коллекции
- upfile - картинка
На стороне сервера:
- Сохраняется оригинал картинки (но с ограничением в максимальное количество пикселей) - original
В ответ возвращается информация о загруженной картинке:
Успех:
{
"success": true,
"url": "https://img.kak2c.ru/i/H/E/Y8x2a2Zj.jpg",
"id": "42737a4a-8f76-4aa6-a3d1-ae553f2409cb",
"pos": "10000.000000000000000"
}
Параметры:
- url- прямая ссылка на оригинал картинки
- id - идентификатор картинки (для последующего обновления или удаления)
- pos - автоматически присвоенное значение для сортировки
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Удаление картинки к коллекции
/api/lite/collections/image
- id - код коллекции
Успех:
{
"success": true,
"id": "1234" - id коллекции
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/collections
Получение списка коллекций
/api/lite/pub/collections
(метод требует авторизации по домену)
Возвращает список всех коллекций.
Товары группируются по коллекциям для отображения в каталоге товаров в интернет-магазине.
Фильтры:
- /api/lite/pub/collections?id=1000 – возвращает информацию только по выбранной коллекции с указанным id
Поля возвращаемого значения
Параметр | Тип\формат | Описание |
collections | array | Массив коллекций |
id | string | Идентификатор коллекции |
title | string | Заголовок коллекции |
description | string | Описание коллекции (html) |
surl | string | Семантическое наименование ссылки (friendly URL) на коллекцию |
parentId | string | Идентификатор родительской коллекции |
type | string | Тип коллекции (CATALOG/PRODUCT) |
breadcrumbs | array | Хлебные крошки с путем от корневой коллекции до заданной (только при фильтре по id) |
Пример ответа:
{
"success": true,
"collections": [
{
"id": "1029",
"title": "Зерновой кофе",
"description": "<P>Лучший <B>зерновой</B> кофе</P>",
"surl": "zernovoy_coffee",
"parentId": "123",
"type": "PRODUCT",
"defaultImage":"http://address.ru/123.jpg",
"breadcrumbs":[
{"id": "1", "title": "Все товары", "level":0},
{"id": "1023", "title": "Кофе", "level":1},
{"id": "1029", "title": "Зерновой кофе", "level":2}
]
}
]
}
Заказы
Комментарии по выгрузке заказов в Кактус
Для передачи заказов в Кактус, используется метод:
POST /api/lite/orders
Важно передать корректный адрес (вместе с ФИАС кодами), корректный телефон, правильный код способа доставки (и если выбран ПВЗ, то номер ПВЗ).
! Если обработка заказа Кактуса осуществляется на фулфилмент центре, тогда если заказ автоматически выгружается на фулфилмент центр, и любое изменение заказа по API (или через интерфейс) должно быть обязательно синхронизировано с системой фулфилмент - это происходит автоматически, а там в свою очередь осуществляется ряд проверок через систему интеграции с курьерскими службами.
Поэтому изменение заказа в Кактус может занимать относительно продолжительное время (10-15 секунд), пока вся синхронизация и проверки будут пройдены.
Изменение заказа возможно до момента взятия в работу (до статуса начала сборки заказа). Отмена заказа возможна до момента упаковки.
Для мониторинга состояния заказов, метод:
GET /api/lite/orders
Правильнее всего, получать только заказы, которые изменились с последней отметки времени. Это максимально экономит трафик.
Запрос заказов с фильтрацией по метке времени: updated_from
/api/lite/orders
Внимание! Не путать с методами /api/lite/order - это старые методы, которые будут удалены.
Запрос списка заказов
/api/lite/orders
Метод возвращает список заказов с заданной фильтрацией.
Можно использовать как для получения списка, так и единичного заказа.
Полный комплект данных по заказам будет передан только если в запросе будет параметр full_info=true
{
"success": true,
"recordsTotal": 1,
"orders": [
{
"id": "4249-756",
"externalId": "extId",
"externalId2": "extId2",
"externalId3": "extId3",
"externalId4": "extId4",
"externalId5": "extId5",
"date": "2020-02-24 00:06:09",
"needReserve": true,
"createTs": "2020-02-24 06:06:14.078",
"updateTs": "2020-02-25 06:06:14.078",
"status": "ORDER_INFO_COURIER",
"totalOrderSum": 2687,
"insuranceSum": 2687,
"insuranceSumAutoCalculation":true,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"paymentMethodType": "ONLINE",
"paymentMethodName": "Предоплата картой на сайте",
"customerPaymentExternalId": "26a11eef-000f-5000-8000-195192d6e83d",
"needCustomerPayment": false,
"confirmStatus": "APPROVED",
"comment": "",
"promocode": "hibro",
"promocodeAppliedDiscount": 424,
"shortUrl": "http://r.kak2c.ru/yeq2h4r",
"tags": [],
"isMarketplaceOrder": false,
"plannedTakeOutDate": "2020-02-26 13:00:00",
"readyForFFExport": true,
"delivery": {
"code": "3321cd66-6605-aba4-d4d3-e14d1257562f",
"deliveryCode": "29019c97-02b2-387c-fa85-875bd13e8b11",
"type": "COURIER",
"title": "DPD",
"pickupPointId": "",
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_dpd_left.svg",
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": null,
"deliverySumBelowLimitAmount": 1000.00,
"deliverySumLimitAmount": 5000.00,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"isDeliverySumLimitActive": true,
"deliveryComment": "",
"pvzComment": "",
"actualDeliveryDate": "2020-11-19 17:07",
"courierPlanDeliveryDate": "2020-11-19 00:00",
"courierPlanDeliveryDateChangeReason": "Недозвон до покупателя",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": "Сосенское",
"city": "Москва",
"settlement": null,
"street": "ул Александры Монаховой",
"house": "94",
"block": "5",
"building": "",
"flat": "21",
"fullAddress": "108801, г Москва, поселение Сосенское, Новомосковский округ, ул Александры Монаховой, д 94 к 5, кв 21",
"fullCity": null,
"rawData": "Москва, ул Александры Монаховой, д 94, корп.5, кв 21.",
"zip": "108801",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": "90648b5c-d6e7-4bb0-9782-7908808325cf",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"receiver": {
"name": "Диана",
"surname": "Шалиева",
"patronymic": "Аликовна",
"phone": "89050250111",
"rawPhone": "89050250111",
"alternativePhone": "",
"email": "morisen777@yandex.ru",
"post": null,
"personType": null
},
"pvzInfo": {
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Таганская ул., д. 1, стр. 1",
"fullCity": null,
"rawData": null,
"zip": "109147",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"metroStation": "метро Таганская, Марксистская",
"latitude": "55.741772",
"longitude": "37.655975",
"code": "7702-015",
"courier": "PickPoint",
"courierCode": "PICKPOINT",
"description": "Пункт выдачи заказов находится в ТЦ Звездочка, в фотосалоне Мультифото. Пешком: м. Марксистская, последний вагон из центра, выход в сторону ул. Таганской. Транспортом: автобус № 106, 74в, 74, 51, 567; троллейбус № 26, 63, м7, м7к, 27 до ост. м. Марксистск",
"maxSize": "90",
"maxWeight": 15,
"workTime": "Пн-Вс 10:00-22:00",
"postOfficeNumber": null,
"paymentMethods": [
"COD_CASH",
"COD_CARD"
],
"type": "PVZ",
"courierPostamatType": "ПВЗ"
},
"deliveryServices": [
"CHECK_CONTENT"
],
"isDeliverySumLimitActive": true,
"deliverySumLimitAmount": 324234,
"deliverySumBelowLimitAmount": 23432432
},
"excludeFromSummary": true,
"legalEntity": {
"id": "3c0a3ad3-b10f-4299-5b1b-a3d90b0c198a",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
"article": "BR00T-000140-2",
"quantity": 1,
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT",
"price": 332,
"batchName":"K352-415N",
"img": "https://img.kak2c.ru/i/L/U/xgzFMUqK_c.jpg?1576164677",
"itemAmountState": {
"amountORDERED": 1,
"amountRESERVED": 1,
"amountPACKED": 1,
"amountSHIPPED": 1,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0
},
"skuType": "SKU",
"itemDimensions": {
"height": 8,
"width": 25,
"depth": 33
},
"itemWeight": 1000,
"expirationMode": "USE_EXPIRATION",
"expirationDays": 100
},
{
"num": 2,
"productId": "1002",
"productExtId": null,
"variantId": "1002",
"variantExtId": null,
"name": "Набор для Бро №4: помада для волос, бальзам для бороды, гель для душа + шампунь",
"article": "BR00T-000117",
"quantity": 1,
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT",
"price": 2074,
"img": "https://img.kak2c.ru/i/L/s/qck3mEGu_c.jpg?1578310573",
"itemAmountState": {
"amountORDERED": 1,
"amountRESERVED": 1,
"amountPACKED": 1,
"amountSHIPPED": 1,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0
},
"skuType": "SKU",
"itemDimensions": {
"height": 8,
"width": 25,
"depth": 33
},
"itemWeight": 1000
},
{
"num": 3,
"productId": null,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT",
"price": 281,
"skuType": "SERVICE"
}
],
"packings": [
{
"barcode": "7878000138251",
"fbmStickerBarcode": "WB_0032345",
"palletBarcode": "pl705970976005-1",
"measurements": {
"success": true,
"weight": 790,
"dimensions": {
"height": 130,
"width": 280,
"depth": 130
}
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
"article": "BR00T-000140-2",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 332,
"img": "https://img.kak2c.ru/i/L/U/xgzFMUqK_c.jpg?1576164677",
"skuType": "SKU",
"accountingAttributes": [
{
"code": "chestnyznak",
"stringValue": "11111",
"n": 1
}
],
"specials": true
},
{
"num": 2,
"productId": "1002",
"productExtId": null,
"variantId": "1002",
"variantExtId": null,
"name": "Набор для Бро №4: помада для волос, бальзам для бороды, гель для душа + шампунь",
"article": "BR00T-000117",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 2074,
"img": "https://img.kak2c.ru/i/L/s/qck3mEGu_c.jpg?1578310573",
"skuType": "SKU",
"accountingAttributes": [
{
"code": "chestnyznak",
"stringValue": "22222",
"n": 2
}
]
}
]
}
],
"pallets": [
{
"barcode": "pl705970976005-1",
"fbmStickerBarcode": "WB_PL_0032345",
"files": [
{
"copiesQty": 1,
"fileExt": "pdf",
"fileName": "ИП Ozon Хоругвино Шк на палету",
"fileSize": 22535,
"fileSource": "USER",
"fileType": "PDF",
"id": "aa22d7fa-65a2-6be0-8e0d-430ec6c874d3",
"printWhenPacking": false,
"success": true,
"url": "https://storage.yandexcloud.net/order-files-kak2c/b42eebd1-eb7e-4603-a781-5240699288d9.pdf"
}
],
"measurements": {
"dimensions": {
"depth": 120,
"height": 100,
"width": 120
},
"success": true,
"weight": 200
},
"num": 1,
"packings": [
{
"barcode": "7878000138251",
"measurements": {
"success": true,
"weight": 790,
"dimensions": {
"height": 130,
"width": 280,
"depth": 130
}
},
"palletBarcode": "pl705970976005-1"
}
]
}
],
"rawDeliveryStatuses": [
{
"courierStatusDate": "2019-12-18 14:43:05",
"statusCode": "SENDER",
"statusMessage": "Заявка принята",
"statusCity": "Чехов"
},
{
"courierStatusDate": "2019-12-18 14:43:05",
"statusCode": "SENDER",
"statusMessage": "Заявка принята",
"statusCity": "Чехов"
}
],
"expenses": [
{
"id": "1231",
"status": "PLAN",
"type": "GENERAL",
"items": [
{
"type": "COD",
"sum": 60
},
{
"type": "DELIVERY",
"sum": 330
},
{
"type": "INSURANCE",
"sum": 6
}
]
}
],
"files": [
{
"id": "43f79bac-0d82-2d82-f11d-abd1a53b26a0",
"fileType": "DOC",
"fileSource": "USER", //ESHOP | FULFILLMENT
"fileName": "Документ",
"fileExt": "doc",
"url": "https://storage.yandexcloud.net/order-files-kak2c/e7cf604e-7092-4243-97ba-13b3f7bb4b68.doc",
"printWhenPacking": true,
"copiesQty": 1
}
],
"customerPaymentInProcess": false,
"warehouseName": "Tempoline",
"warehouseCode": "6805bc64-270f-ae7d-1231-773ff181e446",
"permissionList": {
"fieldPermissions": [
{
"type": "ITEMS_EDITABLE",
"value": true,
"reason": null
},
{
"type": "PAYMENT_EDITABLE",
"value": true,
"reason": null
},
{
"type": "IS_PAID_EDITABLE",
"value": false,
"reason": "Для способа оплаты наложенным платежом - статус оплаты вручную изменять нельзя."
},
{
"type": "RECEIVER_EDITABLE",
"value": true,
"reason": null
},
{
"type": "DELIVERY_EDITABLE",
"value": true,
"reason": null
},
{
"type": "WAREHOUSE_EDITABLE",
"value": true,
"reason": null
},
{
"type": "COMMENTS_EDITABLE",
"value": true,
"reason": null
}
],
"actionPermissions": [
{
"type": "CANCEL",
"value": true,
"reason": null
},
{
"type": "CONFIRM",
"value": false,
"reason": null
},
{
"type": "NEED_CONFIRM",
"value": false,
"reason": null
},
{
"type": "PACK",
"value": false,
"reason": null
},
{
"type": "COPY",
"value": false,
"reason": null
},
{
"type": "PACK_CONTROL",
"value": false,
"reason": null
},
{
"type": "UNPACK",
"value": false,
"reason": null
},
{
"type": "SHIPPING",
"value": false,
"reason": null
},
{
"type": "UNSHIPPING",
"value": false,
"reason": null
},
{
"type": "REFRESH_RESERVE",
"value": true,
"reason": null
},
{
"type": "RETURN_TO_DELIVERY",
"value": false,
"reason": null
},
{
"type": "REVERT_RETURNS",
"value": false,
"reason": null
}
]
},
"packingVideos": [
"http://123.123.123.123:1111/video/2021-04-21/dabca048-7cfb-4e65-92a2-fce40f5ee9c2.mp4"
],
"returnUnpackingVideos": [
"http://123.123.123.123:1111/video/2021-04-21/dabca048-7cfb-4e65-92a2-fce40f5ee9c2.mp4"
],
"returns":[
{
"type": "RETURN", // RECLAMATION
"date": "2021-01-15 17:47:13",
"number": "123",
"externalNumber": "456",
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
"article": "BR00T-000140-2",
"quantity": 1,
"accountingAttributes": [
{
"code": "chestnyznak",
"stringValue": "12345"
}
],
}],
"returnUnpackingVideos": [
"http://123.123.123.123:1111/video/2021-04-21/dabca048-7cfb-4e65-92a2-fce40f5ee9c2.mp4"
],
"files": [
{
"fileName": "Скан заявления",
"url": "https://storage.yandexcloud.net/order-files-kak2c/e7cf604e-7092-4243-97ba-13b3f7bb4b68.doc"
},
{
"fileName": "Скан документов",
"url": "https://storage.yandexcloud.net/order-files-kak2c/e7cf604e-7092-4243-97ba-13b3f7bb4b68.doc"
}
]
}
]
"summaryItemAmountState": {
"amountORDERED": 2,
"amountRESERVED": 2,
"amountPACKED": 2,
"amountSHIPPED": 2,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0
},
"codPayments": [
{
"sum": 2225,
"date": "2021-01-15 17:47:13",
"paymentDocumentId": "1000"
}
],
"packingOptions": [
{
"packSpecialsToSeparatePackingPlace": true
}
],
"c": "8089832f-633a-b417-a72b-7e685e114151",
"initialOrder" : null,
"onlinePaymentType": "FULL",
"warehouseShippingOptions": {
"monopackingsOnly": true
}
}
]
}
Фильтрация
Для фильтрации есть следующие возможности:
- id - по номеру заказа
- filter_multi - по номеру заказа или по ФИО покупателя
- filter_phone - по телефону покупателя
- filter_email - по email покупателя
- filter_promocode - по промокоду
- filter_tracking_number - по трек-номеру заказа
- filter_tags - по меткам заказов (можно указывать несколько через запятую)
- filter_states - по статусам заказов (можно указывать несколько через запятую)
- filter_external_id, filter_external_id_2, filter_external_id_3, filter_external_id_4, filter_external_id_5 - по внешним идентификаторам
- date_from - по дате заказа, от. формат: 2020-02-19T12:35:31
- date_to - по дате заказа, до
- updated_from - по дате/времени изменения. формат: 2020-02-19T12:35:31.
- delivery_code - по кодам службы доставки (можно указывать несколько через запятую) код получать в справочнике доступных служб доставки клиента
- city - по городу/населенному пункту покупателя. Значения лучше получать из подсказок адресов
- reserved_variant_id - по зарезервированному товару
- warehouse_code - дополнительная фильтрация по складу (используется вместе с reserved_variant_id)
- product_id - по коду продукта в заказе.
- problemOrders - true - для вывода заказов с ошибками (согласовано с количеством в поле problemOrders в методе /api/lite/orders/statuses)
- order_types - подтипы заказов с типом CUSTOM. Если не задано, то отображены будут только заказы с типом STANDARD
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/orders?page=0&size=100
Если параметры не переданы, то дефолтные значения page=0&size=10
Максимальное количество записей на странице - 100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Сортировка
Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.
Пример сортировки по дате (возрастание): /api/lite/orders?order=date+asc
Пример сортировки по дате (убывание): /api/lite/orders?order=date+desc
Доступные коды сортировки:
- date (дата заказа)
- id (номер заказа)
По умолчанию используется сортировка по дате заказа по убыванию.
Описание результата запроса
Поле | Тип | Редактируемое |
обязательное |
Описание |
id | string | да* | нет |
Номер заказа. * Можно задать только в момент создания заказа |
externalId | string | да | нет |
Внешний номер заказа – дополнительный номер заказа, например в сторонней CRM системе. |
externalId2 | string | да | нет | Внешний номер заказа |
externalId3 | string | да | нет | Внешний номер заказа |
externalId4 | string | да | нет | Внешний номер заказа |
externalId5 | string | да | нет | Внешний номер заказа |
date | datetime | да* | нет |
Дата заказа * Можно задать только в момент создания заказа |
needReserve | boolean | да | нет | Нужно ли брать резерв |
createTs | datetime | нет | - | Дата создания заказа в системе (техническая) |
updateTs | datetime | нет | - | Дата последнего обновления заказа. |
status | enum | нет | - |
Основной статус заказа. Описывает жизненный цикл заказа.
|
confirmStatus | enum | да | нет |
Статус подтверждения заказа
|
totalOrderSum | decimal | нет | - | Общая сумма заказа |
insuranceSum | decimal | да | нет |
Размер оценочной стоимости / страховки заказа. По умолчанию равен общей сумме заказа или рассчитывается, исходя из процента расчёта страховки, указанного в аккаунте. |
insuranceSumAutoCalculation | boolean | да | нет | Если не передаётся, то по умолчанию true. Если нужно указать произвольную сумму страховки, необходимо передать insuranceSumAutoCalculation = false |
paymentStatus | enum | да | нет |
Статус оплаты заказа покупателем.
Имеет смысл только для заказов с предоплатой (например, оплата картой на сайте). Заказы с оплатой ONLINE, и NOT_PAID - не передаются на комплектацию. |
paymentMethodType | enum | да | нет |
Тип оплаты заказа.
|
paymentMethodCode | string | да | нет |
Код и наименование способа оплаты заказа. Базовые способы оплаты (по умолчанию), в формате
|
paymentMethodName | string | нет | - | Наименование способа оплаты |
needCustomerPayment | boolean | нет | - |
Флаг, указывающий на необходимость оплаты заказа покупателем перед отгрузкой. Например, если paymentMethodType = ONLINE и paymentStatus = NOT_PAID, тогда needCustomerPayment = true |
customerPaymentExternalId | string | нет | - | Id оплаты у экваера (для онлайн оплаты) |
warehouseName | string | да | нет | Название склада |
comment | string | да | нет | Комментарий покупателя к заказу |
promocode | string | да | нет | Код примененного промокода к заказу |
promocodeAppliedDiscount | decimal | нет | - | Общая сумма скидки, примененная к заказу |
urlParams | string | да | нет |
Сырые данные URL запроса, с которыми покупатель пришел на сайт. В формате JSON. Как правило, в основном это UTM метки, для понимания рекламного канала, с которого пришел покупатель. |
shortUrl | string | нет | - |
Сокращенная ссылка на заказ. Используется для предоставления покупателю, например в SMS. Например http://r.kak2c.ru/i806zlu |
b2bFlag | boolean | да | нет |
B2B заказ. Если true, то биллинг по такому заказу будет считаться как для B2B. *Настройка для B2B включается по запросу клиента; по умолчанию не используется. |
c | string | нет | - |
Секретный ключ для доступа к заказу через публичный метод получения заказа. Пример значения: 94ccc02a-2379-0eac-e5cf-260485cc35bd |
customData | string | да | нет | Дополнительная информация по заказу, возможно сохранить и получить, для передачи в другие системы. Например, сохранить произвольный json. |
tags | Array | нет | - | Массив идентификаторов меток (возможные метки получаются отдельным запросом) - для чтения |
orderTag | string | да | нет |
Метка для добавления заказу Предварительно необходимо создать метку с таким названием |
excludeFromSummary
|
boolean | да | нет |
Признак true исключит заказ из статистики. Меняется запросом /api/lite/order-exclude-change |
orderType | enum | нет | - |
Тип заказа
|
orderSubType | string | да | нет |
Подтип заказа, в случае orderType = CUSTOM.
|
summaryItemAmountState | Object | нет | - |
вывод суммарных оборотных данных по заказу например: "amountRETURNED_DEFECTIVE": 0 |
isMarketplaceOrder | boolean | нет | - |
Флаг, определяющий заказы маркетплейсов |
plannedTakeOutDate | datetime | нет | - |
Дата планируемой отгрузки |
readyForFFExport | boolean | нет | - |
Флаг, определяющий готовность заказа к выгрузке в Темполайн |
delivery | Object | да | да |
Объект, описывающий доставку
code - технический код службы доставки
actualDeliveryDate - фактическая дата доставки
deliveryComment - комментарий к доставке
isDeliverySumLimitActive - флаг включения ограничения стоимости доставки
savedAddressId - id адреса, сохранённого с помощью запроса /api/lite/pub/save_dadata_address (используется для интеграции с 1С-Битрикс) |
code ранее deliveryCode |
string | да | да |
Технический идентификатор способа доставки (договора доставки). Пример: 258296e9-acee-4361-a55b-bd4c3f3913af |
deliveryCode
|
string | нет | - |
Код способа доставки из тарификатора Пример: 258296e9-acee-4361-a55b-bd4c3f3913af |
type |
enum | нет | - |
Тип доставки:
|
title ранее courier |
string | нет | - |
Наименование курьерской службы Пример: Boxberry |
pickupPointId | string | да | да* |
Идентификатор пункта выдачи заказов (в рамках выбранной курьерской службы) * Если доставка в ПВЗ / постамат |
logoURL | string | нет | - | Прямая ссылка на логотип службы доставки. |
trackingNumber ранее был вне delivery |
string | нет | - | Как правило, заполняется в момент получения данных от курьерской компании. |
trackingURL ранее trackingLink |
string | нет | - |
Полная ссылка на трекинг. Пример: https://boxberry.ru/tracking/11122233.
UPD: 2023-07-05 |
desiredDeliveryDate | date | да | нет |
Желаемая покупателем дата доставки. Кактус передает эту информацию в курьерские службы как рекомендательный параметр. Не все курьерские службы учитывают эту информацию. |
desiredDeliveryTimeFrom": "09:00", ранее timeFrom |
HH:ss | да | нет |
Желаемое время доставки "от". С лидирующими нулями. Пример "09:00". |
"desiredDeliveryTimeTo": "20:00", ранее timeTo |
HH:ss | да | нет |
Желаемое время доставки "по". С лидирующими нулями. Пример "20:00". |
deliveryComment | string | да | нет |
Комментарий для целей доставки. Поле устарело. Рекомендуется использовать поле comment. |
pvzComment | string | нет | - |
В случае способа доставки через ПВЗ, содержит адрес и время работы ПВЗ. |
actualDeliveryDate | string | нет | - |
Дата фактической доставки от курьерской службы |
courierPlanDeliveryDate | date | нет | - |
Плановая дата доставки от курьерской службы |
courierPlanDeliveryDateChangeReason | string | нет | - |
Причина переноса плановой даты доставки от курьерской службы |
address | Object | да | да |
Объект, описывающий адрес доставки
ВАЖНО: в случае передачи адреса в компонентах адреса строковое поле fullAddress игнорируется (будьте внимательны при заполнении значений, пожалуйста, не путайте поля building и block) Для проверки парсинга компонентов адреса, можно передавать ожидаемый адрес в поле rawData и после обработки сравнивать его с итоговым полем fullAddress. Если поле rawData не было передано, то оно заполнится автоматически из переданного поля fullAddress перед парсингом компонентов, а в поле fullAddress запишется результат парсинга. |
countryCode | string | да | нет |
Двухбуквенный код страны по стандарту ISO 3166-1 (Alpha 2). |
country | string | да | нет | Страна прописью |
region | string | да | нет (для Почты РФ - да) | Регион. Для РФ - по ФИАС. |
area | string | да | нет | Район. Для РФ - по ФИАС. |
city | string | да | да* |
Город. Для РФ - по ФИАС. * если не задан населенный пункт |
settlement | string | да | да* |
Населенный пункт. Для РФ - по ФИАС. * если не задан город |
street | string | да | да* |
Улица (в т.ч. проспект/проезд/и т.п. - пример: "проспект Победы") * если курьерская доставка и не задан дом |
house | string | да | да* |
Дом * если курьерская доставка и не задана улица |
block | string | да | нет | Корпус |
building | string | да | нет | Строение |
flat | string | да | нет | Квартира/Офис |
fullAddress | string | да | нет | Полный адрес (адрес одной строкой) |
floor | integer | да | нет* |
Этаж *при передаче в deliveryServices LIFT_TO_DOOR_MANUAL этаж -- обязателен для заполнения |
fullCity | string | да | нет | Полное наименование города (вместе с типом) |
rawData | string | да | нет | Адрес в "сыром" виде - как он изначально был загружен вместе с заказом. |
zip | string | да | нет | Почтовый индекс |
regionFias | string | да | да |
Код региона по ФИАС (поле обязательно, кроме доставки самовывозом) |
areaFias | string | да | да* |
Код района по ФИАС * должен быть задан хотя бы 1 фиас из 3х (areaFias, cityFias, settlementFias), если поле присутствует в классификаторе фиас (поле обязательно, кроме доставки самовывозом) |
cityFias | string | да | да* |
Код города по ФИАС * должен быть задан хотя бы 1 фиас из 3х (areaFias, cityFias, settlementFias) (поле обязательно, кроме доставки самовывозом) |
settlementFias | string | да | да* |
Код населенного пункта по ФИАС * должен быть задан хотя бы 1 фиас из 3х (areaFias, cityFias, settlementFias) (поле обязательно, кроме доставки самовывозом) |
receiver | Object | да | да | Объект, описывающий получателя заказа |
name | string | да | да | Имя |
surname | string | да | нет | Фамилия |
patronymic | string | да | нет | Отчество |
phone | string | да | да | Телефон |
alternativePhone | string | да | нет | Альтернативный телефон |
string | да | нет | Почтовый адрес | |
pvzInfo | Object | нет | - | Объект с информацией о пункте выдачи |
address | Object | нет | - | Объект с адресом пункта выдачи |
metroStation
|
string | нет | - | Ближайшая станция метро |
latitude
|
string | нет | - | Широта |
longitude
|
string | нет | - | Долгота |
code
|
string | нет | - | Код пункта выдачи |
courier
|
string | нет | - | КС |
courierCode
|
string | нет | - | Код КС |
description
|
string | нет | - | Описание |
maxSize
|
string | нет | - |
Максимальные габариты в см Либо 1 число - сумма 3х измерений Либо в формате 36x36x60 |
maxWeight
|
integer | нет | - | Максимальный вес в кг |
workTime
|
string | нет | - | Время работы |
paymentMethods
|
Array of enum | нет | - | Доступные способы оплаты. (COD_CASH, COD_CARD) |
type
|
enum | нет | - | Тип пункта выдачи:
|
courierPostamatType
|
string | нет | - | Тип пункта выдачи по версии КС |
legalEntity | Object | да | нет |
Контрагент покупатель, с юридической точки зрения. Если покупатель - обычное физическое лицо, type = PERSON, если юридическое лицо (ИП, ООО и т.п.), type = COMPANY |
id | string | да | нет | Идентификатор контрагента |
type | enum | да | нет |
Тип контрагента:
|
name | string | да | нет | Наименование контрагента |
items | Array of Objects | да | да | Массив объектов - позиции заказа. ВАЖНО: Доставку необходимо передавать всегда последним элементом списка |
num | integer | да | да | Номер строки |
variantId ранее skuId |
string | да | да |
Идентификатор варианта - основной идентификатор позиции заказа. У продукта всегда есть один вариант. В случае строки "Доставка", содержит "delivery". |
productId | string | нет | - |
Идентификатор продукта. Общий идентификатор (один продукт может иметь несколько вариантов). В случае строки "Доставка", содержит "delivery". |
name | string | нет | - | Наименовании позиции заказа |
article ранее skuArticle |
string | да | нет | Артикул |
quantity | decimal | да | да |
Количество заказанного товара |
quantityReserved | decimal | нет | - | Количество зарезервированного товара. Для начала комплектации, оно должно совпадать с количеством заказанного (все товары должны быть зарезервированы). |
quantityAvailable | decimal | нет | - | Количество доступного данного товара к продаже (за минусом зарезервированного). |
vatRate | enum | да | нет |
Ставка НДС для строки заказа:
|
vatSkuProduct | enum | нет | - |
Ставка НДС в карточке данного продукта
|
price | decimal | да | да | Стоимость единицы позиции |
img | string | нет | - | Полная ссылка на картинку с товаром |
sum | decimal | нет | - | Итоговая сумма по строке |
itemAmountState | Object | нет | - |
для товаров - вывод оборотных данных по заказу по каждой позиции например: "amountRETURNED_DEFECTIVE": 0 "amountRETURNED_TO_CLIENT": 0 |
skuType | enum | нет | - |
Тип позиции:
|
expirationMode | enum | да | нет |
Режим работы по срокам годности
|
expirationDays | integer | да | нет |
Желаемое допустимое максимальное число дней до окончания срока годности к отгрузке. Например, при значении 100 - склад сможет подбирать в заказ товары где минимальный остаточный срок годности - не менее 100 суток. |
batchName |
string | да | нет |
Желаемый номер партии товара. |
accountingAttributes | Object | нет | - |
Атрибуты учёта, например, ЧЗ или серийный номер |
code | enum | нет | - |
Тип атрибута учёта::
|
stringValue | string | нет | - |
Значение атрибута учёта |
n | integer | нет | - |
Порядковый номер атрибута учёта |
optionsUsed | Object | нет | - |
Используемые свойства, характеризующие данный вариант (если используются варианты для данного продукта). |
code | string | нет | - | Код свойства, например "size" |
value | string | нет | - | Значение свойства, например "XL" |
packings | Object | нет | - |
Упаковки (транспортные места) заказа. Содержит информацию только после упаковки заказа (в том числе частичной упаковке).
|
barcode | string | нет | - | Штрихкод места (упаковки) |
measurements | Object | нет | - | Габариты и вес упаковки при упаковке на складе |
weight | decimal | нет | - | Вес упаковки в граммах |
dimensions | Object | нет | - |
Содержит размеры упаковки в миллиметрах Пример { "height": 120, } |
measurementsOnSort | Object | нет | - | Габариты и вес упаковки, измеренные в процессе сортировки (если измерения проводились) |
weight | decimal | нет | - | Вес упаковки в граммах |
dimensions | Object | нет | - | Содержит размеры упаковки в сантиметрах |
items | Object | нет | - | Содержимое упаковки (структура аналогична items заказа) |
expenses | Array | нет | - | Расходы по данному заказу. Например, расходы на доставку, на страховку, на наложенный платеж, на фулфилмент операции - и т.д. |
files
|
Array | нет | - | Прикрепленные к заказу файлы |
rawDeliveryStatuses | Object | нет | - | Статусы от курьерской компании |
courierStatusDate | date | нет | - | Дата статуса от курьерской компании |
statusCode | string | нет | - | Код статуса |
statusMessage | string | нет | - | Сообщение к статусу |
statusCity |
string | нет | - | Город |
permissionList | Object | нет | - | Список разрешений для заказа (только для fullInfo=true) |
fieldPermissions | Array | нет | - |
Список разрешений на внесение изменений в группы полей заказа - type = одно из значений групп полей заказа: ITEMS_EDITABLE, PAYMENT_EDITABLE, IS_PAID_EDITABLE, RECEIVER_EDITABLE, DELIVERY_EDITABLE, WAREHOUSE_EDITABLE), COMMENTS_EDITABLE - value - флаг, разрешены ли изменения - reason - причина запрета, если value = false |
actionPermissions | Array | нет | - |
Список разрешений на действия с заказом (кнопки) - type = одно из значений действий с заказом: CANCEL, CONFIRM, NEED_CONFIRM, PACK, COPY, PACK_CONTROL, UNPACK, SHIPPING, UNSHIPPING, REFRESH_RESERVE, RETURN_TO_DELIVERY, REVERT_RETURNS - value - флаг, разрешены ли изменения - reason - причина запрета, если value = false |
codPayments | Array | нет | - |
Список переводов наложенных платежей по данному заказу |
packingVideos | Array | нет | - | Ссылки не видео упаковки заказа |
returnUnpackingVideos | Array | нет | - | Ссылки не видео приемки возврата заказа |
initialOrder | string | да | нет |
Технический id изначального заказа (заказ-подписка например) |
packingOptions | Array | да | нет |
Список опций упаковки |
onlinePaymentType | enum | да | нет |
Тип онлайн оплаты:
|
crossdockEditable | boolean | нет | - | флаг, что заказ еще доступен для редактирования (только для аккаунтов в выключенным резервированием по умолчанию и только при запросе по id заказа). Редактировать заказ можно только при значении true |
warehouseShippingOptions | Object | да | нет |
Настройки отгрузки monopackingsOnly - флаг использования монокоробов (устаревший)
packingType - тип упаковки:
|
originClientNumber | string | нет | нет |
идентификатора магазина на маркет плэйсе, для OZON & MegaMarket - логин продавца, для WB & Яндекс Маркет - код магазина |
Пример запроса по одному заказу и полными данными:/api/lite/orders?id=4249-756&full_info=true
Пример результата запроса
Пример запроса по списку заказов:/api/lite/orders?order=id+desc
Пример результата запроса
{
"success": true,
"recordsTotal": 2,
"orders": [
{
"id": "7277-1002",
"externalId": "extId",
"externalId2": "extId2",
"externalId3": "extId3",
"externalId4": "extId4",
"externalId5": "extId5",
"date": "2020-01-22 16:37:56",
"needReserve": true,
"createTs": "2020-01-22 16:37:57.528",
"updateTs": "2020-01-22 16:37:57.528",
"status": "ORDER_INFO_DRAFT",
"totalOrderSum": 999,
"insuranceSum": 999,
"insuranceSumAutoCalculation":true,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"needCustomerPayment": false,
"confirmStatus": "APPROVED",
"comment": "",
"tags": [],
"delivery": {
"code": "PICKPOINT",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "12345",
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой",
"patronymic": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": null
}
},
"legalEntity": {
"id": "09684293-9e6d-a9c2-d114-28d25b5914dc",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Кактус Цереус",
"quantity": 1,
"price": 999,
"img": "https://img.kak2c.ru/i/j/j/tYqAVdh1_c.jpg?1579689505",
"skuType": "SKU",
"itemAmountState": {
"amountORDERED": 3,
"amountRESERVED": 0,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0
}
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 0,
"skuType": "SERVICE"
}
],
"customerPaymentInProcess": false,
"c": "f300ae30-507c-2d36-d37c-e6397084b6e2"
},
{
"id": "7277-1001",
"date": "2020-01-22 11:17:35",
"updateTs": "2020-01-22 11:17:47.399",
"status": "ORDER_INFO_REQUIRE_PAYMENT",
"totalOrderSum": 1232,
"insuranceSum": 1232,
"insuranceSumAutoCalculation":true,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"needCustomerPayment": false,
"comment": "",
"tags": [],
"delivery": {
"code": "PICKPOINT",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "12345",
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой",
"patronymic": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": null
}
},
"legalEntity": {
"id": "09684293-9e6d-a9c2-d114-28d25b5914dc",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Кактус Цереус",
"quantity": 1,
"price": 999,
"img": "https://img.kak2c.ru/i/j/j/tYqAVdh1_c.jpg?1579689505",
"skuType": "SKU",
"itemAmountState": {
"amountORDERED": 0,
"amountRESERVED": 0,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0
}
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 233,
"skuType": "SERVICE"
}
],
"customerPaymentInProcess": false,
"c": "ce7b72b3-effb-4f57-56d7-b025b968cff0"
}
]
}
Создание/редактирование заказа
/api/lite/orders
Создание/редактирование заказа для кабинета.
Если указан параметр id - то система будет пробовать найти заказ с указанным номером и отредактировать его, иначе - создаст новый с указанным id.
Если параметр id не указан - система создаст новый заказ и присвоит внутренний номер.
Пример запроса
{
"id": "111",
"externalId": "extId",
"externalId2": "extId2",
"externalId3": "extId3",
"externalId4": "extId4",
"externalId5": "extId5",
"date": "2020-02-22 16:37:56",
"needReserve": true,
"totalOrderSum": 999,
"insuranceSum": 999,
"insuranceSumAutoCalculation":true,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"needCustomerPayment": false,
"confirmStatus": "APPROVED",
"comment": "",
"promocode":"covid1984",
"tags": [],
"orderTag": "tag1",
"delivery": {
"code": "PICKPOINT",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "12345",
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой 2",
"patronymic": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": null
},
"deliveryServices": [
"CHECK_CONTENT"
]
},
"legalEntity": {
"id": "09684293-9e6d-a9c2-d114-28d25b5914dc",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"variantId": "1001",
"variantExtId": null,
"name": "Кактус Цереус",
"quantity": 2,
"price": 522,
"vatRate": "VAT_20",
"batchName":"K352-415N",
"bundleOptionalVariants": [
"1012"
]
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 35,
"vatRate": "VAT_20"
}
],
"warehouseName": "Свой склад",
"initialOrder" : "5dgasfwe-7f1b-c54-897e-30bc628f45e8",
"onlinePaymentType": "RECURRENT",
"warehouseShippingOptions": {
"packingType": "MIX_PACKINGS"
}
}
В ответ возвращается
Успех:
{
"c": "e172df57-f217-6091-b7fd-d668a67b6df4",
"orderId": "1222-1005",
"shortUrl": "http://r.kak2c.ru/ocq0kmf",
"status": "ORDER_INFO_NEED_CONFIRM",
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Пример минимального набора данных по заказу, которые надо передать, чтобы он успешно создался:
* значения полей "code" и "variantId" - должны соответствовать значениям, существующим на данном аккаунте
{
"delivery": {
"address": {
"city": "Москва",
"cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"
},
"code": "ad5f7e6f-0ecb-45bf-3f6e-e3d21d2129be",
"receiver": {
"name": "Иван",
"phone": "79688876655"
}
},
"items": [
{
"num": 1,
"variantId": "1130659",
"quantity": 1,
"price": 100
},
{
"num": 2,
"price": 0,
"quantity": 1,
"variantId": "delivery"
}
]
}
/api/lite/orders/cancelled
Заказ → отменить
/api/lite/orders/cancelled
Производит отмену заказа.
пример запроса:
{
"orderId":"1029"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/confirm
Заказ - подтверждение
/api/lite/orders/confirm
Проставление статуса Подтверждения у заказа.
Пример запроса
{
"id":"1234",
"confirmStatus": "APPROVED", // HOLD/CANCELED
"repeatConfirmationDate": "2021-01-01 12:00:00" // для статуса HOLD
}
В ответ возвращается
успех:
{
"success": true,
"confirmStatus": "APPROVED" // HOLD/CANCELED
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ - подтверждение массовое
/api/lite/orders/confirm/batch
Проставление статуса Подтверждения у списка заказов.
Пример запроса
{
"orders":["1234", "5678"],
"confirmStatus": "APPROVED" // HOLD/CANCELED
}
В ответ возвращается
успех:
{
"success": true,
"confirmStatus": "APPROVED" // HOLD/CANCELED
"orders": [
{
"id": "1234",
"success": true,
"confirmStatus": "APPROVED",
"errors": null
},
{
"id": "5678",
"success": false,
"confirmStatus": "NEED_CONFIRM",
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
}
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/payment
Проставить статус оплаты заказа
/api/lite/orders/payment
Проставление статуса оплаты у заказа.
Пример запроса
{
"id":"1234",
"paymentStatus": "PAID" // NOT_PAID
}
В ответ возвращается
успех:
{
"success": true,
"paymentStatus": "PAID" // NOT_PAID
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/delivery_result
Заказ - отметить доставку
/api/lite/orders/delivery_result
Для доставки своими курьерами - простановка результата доставки: доставлен/отказ/утеря
Пример запроса
{
"orderId": "123456abc",
"result": "DELIVERED", //LOST,RETURNING,RETURNED
"comment": "abcd"
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/orders/history
Получение истории по заказу
/api/lite/orders/history
Возвращает историю событий по указанному заказу
Обязательный параметр: id заказа
Пример ответа:
{
"success": true,
"events": [
{
"id": "2ebbb234-156e-2362-2dad-79556ea3ee14",
"level": "INFO",
"type": "Документы",
"subType": "Изменения заказа",
"orderDocStage": "Новый",
"eventDate": "2020-01-15 11:57:05.159",
"description": "Заказ 1285-1000. Покупатель: Ываыва; тел.: +7 (900) 111-11-14\n\nДобавлена строка: #2. [1002] Кактус Рипсалис, 3 шт., Цена с НДС: 22 RUB, НДС: 20%, Сумма с НДС: 66 RUB. \n\nСпособ оплаты: Без наложенного платежа; Статус оплаты: Оплачен\nАдрес доставки: Москва, ул Озёрная, д 31 Канал доставки: CUSTOM\n",
"changeSource": "USER",
"userLogin": "test@test.ru",
"eventParameters": {
"apiUrl": "http://myshop-xb527.myinsales.ru",
"login": "kak2c-delivery"
}
},
{
"id": "bf6e88a8-98bc-2f28-9973-bc870e8f1b67",
"level": "INFO",
"type": "Документы",
"subType": "Заказ ожидает подтверждения",
"orderDocStage": "Не подтвержден",
"eventDate": "2020-01-15 11:57:05.298",
"description": "Заказ 1285-1000. ",
"changeSource": "USER",
"userLogin": "test@test.ru",
"eventParameters": null
}
]
}
/api/lite/orders/invoice_and_stiсker
Заказ → получить инвойс + стикер к заказу
/api/lite/orders/invoice_and_stiсker
Получение комбинированной печатной формы инвойс + стикер, в формате PDF + base64
номер заказа передается в параметре id, например
?id=1025
Успех:
{
"success": true,
"content" : "base64data"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/items
Заказ → обновление товарной части
/api/lite/orders/items
Возможность обновить только табличную часть заказа
Необходимо в запросе передать новое желаемое состояние табличной части в виде непустого перечня позиций
Запрос:
{
"id": "1234",
"items": [
{
"num": 1,
"variantId": "1001",
"productId": "1001",
"name": "Кактус Цереус",
"quantity": 2,
"price": 522,
"vatRate": "VAT_20"
}
],
"searchColumnType": "HUMANID" //"EXTID"|"ARTICLE"|"BARCODE" Поле для поиска номенклатуры. Если не задано, то поиск идёт по HUMANID
}
Пример успешного ответа:
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
_________________________________________________________________________________________________________________________________________
Если orderType = KAKTUS_CONSOLIDATION, то если передаются итемы, которых нет в Кактусе, то будет происходить автосоздание номенклатуры (задача 11972): Sku + SkuProduct + их настройки *liteApiSettings. Также есть возможность проставить признаки учета по уникальным номерам (например, Честный знак).
/api/lite/orders/nearest
Получение ближайших заказов к заданному
/api/lite/orders/nearest
Возвращает по 10 заказов до и после указанного (включая заданный), считая по дате заказа
Обязательный параметр: id заказа. Например:
api/lite/orders/nearest?id=1285-1001
Формат ответа аналогичен списку заказов
Пример ответа:
{
"success": true,
"recordsTotal": 8,
"orders": [
{
"id": "1285-1000",
"date": "2020-01-15 11:56:21",
"updateTs": "2020-01-15 11:57:23.169",
"status": "ORDER_INFO_READY_TO_PACK",
"totalOrderSum": 66,
"paymentStatus": "PAID",
"paymentMethodCode": "no-cod",
"needCustomerPayment": false,
"tags": [],
"delivery": {
"code": "eefbe980-1e3b-d973-ef24-6e92399ca702",
"type": "COURIER",
"title": "CUSTOM",
"pickupPointId": null,
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": null,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"deliveryComment": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "ул Озёрная",
"house": "31",
"block": "",
"building": "",
"flat": null,
"fullAddress": "119361, г Москва, ул Озёрная, д 31",
"fullCity": null,
"rawData": null,
"zip": "119361",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"receiver": {
"name": null,
"surname": "Ываыва",
"patronymic": null,
"phone": "+79001111114",
"alternativePhone": "",
"email": null,
"post": null,
"personType": null
}
},
"legalEntity": {
"id": "4b51fdb9-3c57-5cce-29aa-da9bb35d778d",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 0,
"skuType": "SERVICE"
},
{
"num": 2,
"variantId": "1002",
"productId": "1002",
"name": "Кактус Рипсалис",
"quantity": 3,
"price": 22,
"img": "https://img.kak2c.ru/i/P/o/1X8eNZVj_c.jpg?1579013978",
"skuType": "SKU"
}
],
"customerPaymentInProcess": false,
"warehouseName": "Свой склад",
"c": "59b34def-1077-9050-541b-b7c3290c9fd8"
},
...
]
}
/api/lite/orders/receiver
Заказ → обновление контактной информации получателя
/api/lite/orders/receiver
Возможность обновить только контактную информацию
id - номер заказа
Запрос
{
"id": "1234",
"name": "Олег",
"surname": "Коробов",
"patronymic": "",
"phone": "9153112255",
"alternativePhone": "",
"email": "korobov.oleg@gmail.com",
"passport": {
"series": "1234",
"number": "123123"
"date": "2022-01-24"
}
}
Пример успешного ответа
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/refresh-reserve
Обновление резервов по заказу
/api/lite/orders/refresh-reserve
Обновляет резервы по заказу, основываясь на версии заказа в бэкенде на момент вызова команды.
Обязательный параметр: id заказа. Например:
api/lite/orders/refresh-reserve?id=1285-1001
В случае получения положительного ответа ("success": true) - нужно повторно загрузить заказ с бэкенда, данные по товарам и резервам могут быть обновлены.
Пример ответа:
{
"success": true
}
Заказ - обновление резервов массовое
/api/lite/orders/refresh-reserve/batch
Обновление резервов у списка заказов.
В случае неуспеха - в ответе в списке errors будут ошибки обновления. Успешно обновленные резервы при этом сохраняются в системе.
Пример запроса:
{
"orders":["8057-1033", "5678"]
}
В ответ возвращается:
{
"success": true
}
Ошибка по любому заказу списка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Ошибка обработки заказа 8057-1033: Ошибка при проведении: Не задан канал доставки для заказа 8057-1033; Не заданы ФИО получателя."
},
{
"code": 0,
"message": "Заказ 5678 не найден."
}
]
}
Заказ - обновление всех резервов
/api/lite/orders/refresh-reserve/all
Обновление резервов у всех заказов, которые зарезервированы не полностью.
Запрос выполняется без параметров.
В ответ будет возвращено кол-во запланированных к обновлению заказов, обработанных без ошибок и полностью зарезервированных.
В ответ возвращается:
{
"success": true,
"errors": [
{
"code": 0,
"message": "Заказ 1427 не был полностью зарезервирован"
},
{
"code": 0,
"message": "Ошибка обработки заказа 8057-1033: Ошибка при проведении: Не задан канал доставки для заказа 8057-1033; Не заданы ФИО получателя."
}
],
"planned": 3,
"processed": 2,
"reserved": 1
}
/api/lite/orders/statuses
Получение сводки по статусам заказов
/api/lite/orders/statuses
Возвращает сводные данные по количеству заказов в различных статусах, а также о количестве проблемных заказов
По умолчанию содержит только сводку без заказов с типом CUSTOM.
Для получения сводки по CUSTOM заказам с нужным подтипом - передать список подтипов в параметре order_types, аналогично получению заказов в /api/lite/orders?order_types=my_types
Пример ответа:
{
"success": true,
"statuses": {
"ORDER_INFO_DRAFT": 6,
"ORDER_INFO_NEED_CONFIRM": 1,
"ORDER_INFO_READY_TO_PACK": 1
},
"problemOrders": 0
}
/api/lite/orders/packing
Заказ → упаковать
/api/lite/orders/packing
Производит упаковку указанного подтвержденного заказа в одно упакованное место, содержащее все товары заказа, имеющее суммарные массу и объем товаров из данных их упаковок (с небольшой поправкой в сторону увеличения).
Пример запроса:
{
"id":"1019"
}
В ответ возвращается:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → упаковать массовый
/api/lite/orders/packing/batch
Производит упаковку по списку переданных заказов (все неупакованные), аналогично штучной упаковке /api/lite/orders/packing и возвращает для упакованных заказов общую печатную форму.
Метод можно вызывать повторно для упакованных заказов - в этом случае упаковка повторно не производится, а только заказ включается в перечень для генерации печатной формы.
Пример запроса:
{
"orders":["1234", "5678"]
}
В ответ возвращается:
{
"success": true,
"orders": [
{
"id": "1234",
"success": true,
"errors": null
},
{
"id": "5678",
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
}
],
"content" : "base64data" // pdf печатной формы упакованных заказов из списка переданных
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → распаковать
/api/lite/orders/packing
Производит полную распаковку указанного упакованного заказа
Пример запроса:
{
"id":"1018"
}
В ответ возвращается:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/packing_control
Заказ → контроль упаковки
/api/lite/orders/packing_control
Производит контроль упаковки по ШК, если склад с настройкой контроля упаковки.
В успешном ответе будет присутствовать проверенный ШК и номер заказа.
Пример запроса:
{
"id": "202233856366"
}
В ответ возвращается:
{
"success": true,
"id": "202228134882",
"orderId": "8057-1048"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → контроль упаковки
/api/lite/orders/packing_control
Возвращает последние проконтролированные упакованные места.
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/orders/packing_control?page=0&size=20
Если параметры не переданы, то дефолтные значения page=0&size=20
Описание результата запроса
Поле | Тип | Описание |
stickerBarcode | string | Штрих код |
packingControlDate | datetime | Время проверки упакованного места |
orderId | string | Номер заказа |
deliveryCompany | string | Наименование курьерской службы |
receiver | Object | Объект, описывающий получателя заказа |
name | string | Имя |
surname | string | Фамилия |
patronymic | string | Отчество |
fullName | string | ФИО |
phone | string | Телефон (отформатированный) |
rawPhone | string | Телефон (в чистом виде) |
alternativePhone | string | Альтернативный телефон |
string | Почтовый адрес | |
post | string | Должность |
personType | string | Тип пользователя |
Пример ответа:
{
"success": true,
"recordsTotal": 8,
"takeOutPackings": [
{
"stickerBarcode": "202233856366",
"packingControlDate": "2020-05-08 20:38:08.353",
"orderId": "3248-1005",
"deliveryCompany": "PickPoint",
"receiver": {
"name": "Петр",
"surname": "толстой",
"patronymic": "",
"fullName": "Толстой Петр",
"phone": "89011111111",
"rawPhone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": "CUSTOMER"
}
},
...
]
}
/api/lite/orders/tag
Заказ → установить метку на заказе
/api/lite/orders/tag
Пример запроса:
{
"id": "1000",
"tagId": "1001"
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Метки с указанным id не существует"
}
]
}
Заказ → снять метку с заказа
/api/lite/order/tag
Снимает метку с заказа.
Запрос:
{
"id": "1000",
"tagId": "1001"
}
Успешный ответ:
{
"success": true
}
/api/lite/orders/calc_insurance_sum
Расчет страховой стоимости заказа
/api/lite/orders/calc_insurance_sum
Расчет страховой стоимости заказа исходяиз переданных товаров и с учетом настроек процента страховой суммы на данный канал доставки.
Заказ анализируется только из переданных данных, без поиска заказа в БД.
В качестве dto используется dto заказа из /orders.
Пример запроса:
{
"totalOrderSum": 15,
"paymentStatus": "NOT_PAID",
"confirmStatus": "NEED_CONFIRM",
"paymentMethodCode": "cod-cash",
"paymentMethodType": "COD_CASH",
"needCustomerPayment": false,
"tags": [],
"delivery": {
"code": "1a625a2c-c121-617c-23b9-5bbfbfb22eec",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "3",
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": null,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"deliveryComment": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "ул Озёрная",
"house": "33",
"block": "",
"building": "",
"flat": null,
"fullAddress": "119361, г Москва, ул Озёрная, д 33",
"fullCity": null,
"rawData": null,
"zip": "119361",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"receiver": {
"name": "Валерьевна",
"surname": "Ирина",
"patronymic": null,
"fullName": "Ирина Валерьевна",
"phone": "89011111111",
"rawPhone": null,
"alternativePhone": "",
"email": "i-fomina@yandedx.ru",
"post": null,
"personType": "CUSTOMER"
},
"deliveryServices": []
},
"legalEntity": {
"id": "3c0a3ad3-b10f-4299-5b1b-a3d90b0c198a",
"type": "PERSON",
"name": " Розничный покупатель",
"organization": null,
"person": null
},
"items": [
{
"num": 1,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 0,
"skuType": "SERVICE"
},
{
"num": 2,
"variantId": "BR00T-000116",
"productId": "BR00T-000116",
"productExtId": "BR00T-000116",
"name": "Набор для Бро №3: помада для волос, гель для душа + шампунь",
"article": "BR00T-000116",
"quantity": 5,
"quantityAvailable": 38,
"vatRate": "NO_VAT",
"price": 30,
"img": "https://storage.yandexcloud.net/images-k2c/90960e52-86cf-4342-9ecc-497bb91f0af0.jpg",
"itemAmountState": {
"amountORDERED": 5,
"amountRESERVED": 5,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountFACT_DELIVERED": 0,
"amountRETURNED": 0
},
"skuType": "SKU",
"itemDimensions": {
"height": 20,
"width": 20,
"depth": 10
},
"itemWeight": 500
},
{
"num": 3,
"variantId": "BR00T-000133",
"productId": "BR00T-000133",
"productExtId": "BR00T-000133",
"name": "Брелок для ключей/рюкзака Bro Cosmetics Crew",
"article": "BR00T-000133",
"quantity": 22,
"quantityAvailable": 1,
"vatRate": "NO_VAT",
"price": 15,
"img": "https://storage.yandexcloud.net/images-k2c/b99569d2-be64-4a41-9cfa-e9eb5c339485.jpg",
"itemAmountState": {
"amountORDERED": 22,
"amountRESERVED": 22,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountFACT_DELIVERED": 0,
"amountRETURNED": 0
},
"skuType": "SKU",
"itemDimensions": {
"height": 2,
"width": 1,
"depth": 1
},
"itemWeight": 50
}
],
"expenses": [],
"customerPaymentInProcess": false,
"warehouseName": "Tempoline",
"warehouseCode": "6805bc64-270f-ae7d-1231-773ff181e446",
"c": "4f794476-a895-897d-d4a4-119924305917"
}
В ответ возвращается
Успех:
{
"success": true,
"insuranceSum": 240.2
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/tag
Создание/редактирование/удаление метки
Для создания / редактирования
/api/lite/tag
Для создания или редактирования метки, выполняется следующий POST запрос.
Пример запроса:
{
"id": "идентификатор метки",
"name": "На производстве",
"color_id": "color1"
}
Если id не указан, тогда выполняется создание новой метки, если id указан – метка обновляется.
В ответ возвращается результат операции и id созданной/отредактированной метки.
Пример успешного ответа:
{
"success": true,
"id": "1000"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Метки с указанным id не существует"
}
]
}
Для удаления:
/api/lite/tag
Для удаления метки, выполняется следующий POST запрос с указанием идентификатора метки.
Пример запроса:
{
"id": "1000"
}
В ответ возвращается результат операции и id удаленной метки.
Пример успешного ответа:
{
"success": true,
"id": "1000"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Метки с указанным id не существует"
}
]
}
Получение списка меток
/api/lite/tag
В ответ возвращается список всех созданных меток, а также набор доступных цветов для меток.
Пример запроса:
{
"tags": [
{
"id": "1000",
"name": "В производстве",
"color": "color1"
},
{
"id": "1001",
"name": "VIP",
"color": "color2"
}
],
"colors": [
{
"id": "color1",
"code": "#FF0000"
},
{
"id": "color2",
"code": "#FFDD00"
}
]
}
/api/lite/report/order
XLS Отчёт по заказам
/api/lite/report/order
Возвращает отчёт по всем заказам в формате XLS.
По умолчанию, если доп. параметры не переданы, возвращает список ВСЕХ заказов за всё время.
Для запроса списка заказов за определённый интервал, необходимо передать доп. параметры:
from=yyyy-MM-ddTHH:mm:ss и to=yyyy-MM-ddTHH:mm:ss
Пример запроса:
/api/lite/report/order?from=2019-10-29T12:00:45&to=2019-10-31T11:02:37
Положительный результат запроса:
{
"success": true,
"fileName": "OrderReport(17233597)13556330559279078228.xls",
"content": "0M8R4K(...)AAAAAAAAAAAAAAAAAAAAAA==" //Файл в формате excel, закодированный в BASE64 строке
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/pub/orders
Создание заказа для виджета
/api/lite/pub/orders
(метод требует авторизации по домену)
Создание заказа для корзины и других клиентов по АПИ
Создает новый заказ в системе Кактус.
Цены задавать нельзя, они подставятся в бэкенде из актуальных
Доставка перерасчитается в бэкенде по указанным данным заказа
Пример запроса:
{
"comment": "",
"paymentMethodCode": "cod-cash",
"orderTag": "tag1",
"totalOrderSum": 5490,
"delivery": {
"code": "PICKPOINT",
"pickupPointId": "2201-001",
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"receiver": {
"name": "петр",
"surname": "толстой",
"patronymic": "",
"fullName": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net"
},
"address": {
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "Барнаульская",
"house": "1",
"block": "",
"building": "",
"flat": "",
"fullAddress": "",
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null,
"country": "RU"
}
},
"items": [
{
"num": 1,
"variantId": "1001",
"variantExtId": null,
"quantity": 1,
"bundleOptionalVariants": [
"1012"
]
},
{
"num": 2,
"variantId": "delivery",
"variantExtId": null
}
],
"promocode":null,
"customData":"some data",
"urlParams":[
{
"name":"name1",
"value":"value1"
}
],
"deliveryServiceOptions": {
"PICKPOINT_DELIVERY": "TRYING;PARTIAL_DELIVERY"
},
"consentToNewsletter": true
}
В ответ возвращается:
{
"success": true,
"orderId": "1285-1002",
"c": "2b92b631-7f1b-c52a-897e-30bc628f87e5"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Запрос списка заказов
/api/lite/pub/orders
Метод возвращает запрошенный заказ по его номеру (id) и проверочному коду (с)
Пример запроса: api/lite/pub/orders?id=7277-1002&c=f300ae30-507c-2d36-d37c-e6397084b6e2
Описание полей смотреть для метода:
/api/lite/orders
Примечание: Возвращается неполный список полей по сравнению с GET /api/lite/orders.
Пример результата запроса:
{
"success": true,
"orders": [
{
"id": "7277-1002",
"date": "2020-01-22 16:37:56",
"updateTs": "2020-01-22 16:37:57.528",
"status": "ORDER_INFO_DRAFT",
"totalOrderSum": 999,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"needCustomerPayment": false,
"comment": "",
"delivery": {
"code": "PICKPOINT",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "12345",
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой",
"patronymic": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": null
}
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Кактус Цереус",
"quantity": 1,
"price": 999,
"img": "https://img.kak2c.ru/i/j/j/tYqAVdh1_c.jpg?1579689505",
"skuType": "SKU"
},
{
"num": 2,
"productId": null,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 0,
"skuType": "SERVICE"
}
],
"customerPaymentInProcess": false,
"shopUrl": "https://shop6750043.kak2c.ru",
"c": "f300ae30-507c-2d36-d37c-e6397084b6e2"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Расчет скидки по заказу
/api/lite/pub/orders/discount
Запрос расчета скидки по заказу, по указанному промокоду. Структура запроса такая же как в создании заказа.
Пример запроса:
{
"comment": "",
"paymentMethodCode": "online",
"totalOrderSum": 5490,
"delivery": {
"сode": "PICKPOINT",
"pickupPointId": "12345",
"desiredDeliveryDate": "22.02.2020",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"receiver": {
"name": "петр",
"surname": "толстой",
"patronymic": "",
"fullName": "",
"phone": "23232323",
"alternativePhone": "",
"email": "petr@petr.net"
},
"address": {
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "",
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null,
"country": "RU"
}
},
"items": [
{
"num": 1,
"variantId": "1001",
"productId":"1001",
"quantity": 1
},
{
"num": 2,
"variantId": "delivery",
"productId":"delivery"
}
],
"promocode":"PROMO",
"customData":"some data",
"urlParams":[
{
"name":"name1",
"value":"value1"
}
],
"deliveryServiceOptions": {
"PICKPOINT_DELIVERY": "TRYING;PARTIAL_DELIVERY"
}
}
В ответ возвращается:
{
"success": true,
"discounts": [
{
"discountValue": 123.45,
"deliveryDiscountValue": 123.45,
"discountType": "PROMOCODE" // PAYMENT_TYPE
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Проверка промокодов
/api/lite/pub/promocode/conditions/check
Для валидации условий промокода, необходимо передать весь заказ целиком, с заполненным промокодом (аналогично /api/lite/pub/orders)
Пример запроса:
{
"comment": "",
"paymentMethodCode": "online",
"totalOrderSum": 5490,
"delivery": {
"сode": "PICKPOINT",
"pickupPointId": "12345",
"desiredDeliveryDate": "22.02.2020",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"receiver": {
"name": "петр",
"surname": "толстой",
"patronymic": "",
"fullName": "",
"phone": "23232323",
"alternativePhone": "",
"email": "petr@petr.net"
},
"address": {
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "",
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null,
"country": "RU"
}
},
"items": [
{
"num": 1,
"variantId": "1001",
"productId":"1001",
"quantity": 1
},
{
"num": 2,
"variantId": "delivery",
"productId":"delivery"
}
],
"promocode":"TEST",
"customData":"some data",
"urlParams":[
{
"name":"name1",
"value":"value1"
}
],
"deliveryServiceOptions": {
"PICKPOINT_DELIVERY": "TRYING;PARTIAL_DELIVERY"
}
}
Результат запроса:
{
"success":true,
"code":"code",
"isActive":true,
"discountType":"FIX",
"discountValue":836,
"hasConditions":true,
"deliveryDiscountValue":50, //Скидка на доставку в %
"bonusSkus":[
{
"productId":"123",
"variantId":"456",
"quantity": 2
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/pub/order-discount
Запросить размер скидок по заказу (публичный) -(V1)
(метод требует авторизации по домену)
Проверка переданного промокода на активность
/api/lite/pub/order-discount
По отправленным данным заказа (с опциональным указанием промокода) - возвращает размер скидки в рублях для чекаута.
Формат передаваемых данных всегда аналогичен dto заказа в методе создания заказа (публичный):
/api/lite/pub/order
Пример запроса:
{
"comment": "",
"confirmStatus": "APPROVED",
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "cod-card",
"totalOrderSum": "1330.00",
"promocode":"testPercent",
"delivery": {
"receiver": {
"name": "тест4",
"phone": "9151321211",
"alternativePhone": "",
"email": ""
},
"deliveryCode": "GLOBAL_DELIVERY",
"timeFrom": "09:00",
"timeTo": "20:00",
"desiredDeliveryDate": null,
"deliveryComment": "",
"address": {
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null,
"country": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "",
"zip": ""
},
"pickupPointId": ""
},
"items": [
{
"num": 1,
"id": "1001",
"quantity": 3,
"variants": [
]
},
{
"num": 2,
"id": "1002",
"quantity": 2,
"variants": [
]
},
{
"num": 3,
"id": "delivery"
}
]
}
Положительный результат запроса:
{
"success": true,
"discounts": [
{
"discountType": "PROMOCODE", // PROMOCODE | PAYMENT_TYPE
"discountValue": 123.45,
"deliveryDiscountValue" : 50 //Скидка на доставку в %
},
{
"discountType": "PAYMENT_TYPE", // PROMOCODE | PAYMENT_TYPE
"discountValue": 20
}
]
}
/api/lite/pub/payment
Оплата заказа покупателем
/api/lite/pub/payment?orderId=humanId
Параметр: humanId заказа покупателя.
В ответе данные для формирования html-формы отсылки на оплату.
Ответ:
{
"success": true,
"errors": [],
"redirectData": {
"data": {
"entries": [
{
"num": 0,
"name": "MERCHANT",
"value": "kaktwocr"
},
{
"num": 1,
"name": "ORDER_REF",
"value": "25567175-8d84-e371-90fa-8a6e86a69aa4"
},
{
"num": 2,
"name": "ORDER_DATE",
"value": "2019-03-11 17:09:35"
},
{
"num": 3,
"name": "ORDER_PNAME[]",
"value": "Пополнение баланса аккаунта №6419855"
},
{
"num": 4,
"name": "ORDER_PCODE[]",
"value": "balance"
},
{
"num": 5,
"name": "ORDER_PRICE[]",
"value": "222.00"
},
{
"num": 6,
"name": "ORDER_QTY[]",
"value": "1"
},
{
"num": 7,
"name": "ORDER_VAT[]",
"value": "0"
},
{
"num": 8,
"name": "PRICES_CURRENCY",
"value": "RUB"
},
{
"num": 9,
"name": "DESTINATION_CITY",
"value": ""
},
{
"num": 10,
"name": "DESTINATION_STATE",
"value": ""
},
{
"num": 11,
"name": "DESTINATION_COUNTRY",
"value": ""
},
{
"num": 12,
"name": "PAY_METHOD",
"value": "CCVISAMC"
},
{
"num": 13,
"name": "ORDER_PRICE_TYPE[]",
"value": "GROSS"
},
{
"num": 14,
"name": "ORDER_HASH",
"value": "6fe466d056fcc82836a861c322070381"
},
{
"num": 15,
"name": "BILL_FNAME",
"value": "Петр"
},
{
"num": 16,
"name": "BILL_LNAME",
"value": "Петров"
},
{
"num": 17,
"name": "BILL_EMAIL",
"value": "abc3@abc.ru"
},
{
"num": 18,
"name": "BILL_PHONE",
"value": "111111"
},
{
"num": 19,
"name": "BILL_COUNTRYCODE",
"value": "RU"
},
{
"num": 20,
"name": "BACK_REF",
"value": ""
},
{
"num": 21,
"name": "LANGUAGE",
"value": "RU"
},
{
"num": 22,
"name": "CURRENCY",
"value": "RUB"
}
],
"url": "https://sandbox.payu.ru/order/lu.php"
},
"paymentProvider": "PAYU"
}
}
/api/lite/pub/orders/discount
Запросить размер скидок по заказу (публичный)
/api/lite/pub/orders/discount
По отправленным данным заказа (с опциональным указанием промокода) - возвращает размер скидки в рублях для чекаута.
Формат передаваемых данных всегда аналогичен dto заказа в методе создания заказа (публичный):
/api/lite/pub/orders
Пример запроса:
{
"promocode":"testPercent",
"comment": "",
"confirmStatus": "APPROVED",
"delivery": {
"address": {
"area": null,
"areaFias": null,
"block": "",
"building": "",
"city": "Урюпинск",
"cityFias": "2e5879fc-35c2-4354-816b-f1fce74ece87",
"country": "RU",
"flat": "",
"fullAddress": "",
"house": "",
"region": "Волгоградская",
"regionFias": "da051ec8-da2e-4a66-b542-473b8d221ab4",
"settlement": null,
"settlementFias": null,
"street": "",
"zip": ""
},
"code": "bb60d72c-2a25-11e9-8989-002590923634",
"deliveryComment": "",
"desiredDeliveryDate": null,
"pickupPointId": "",
"receiver": {
"alternativePhone": "",
"email": "",
"name": "",
"phone": ""
},
"timeFrom": "09:00",
"timeTo": "20:00"
},
"forOrderDiscount": true,
"items": [
{
"num": 1,
"productId": "BR00T-000132",
"quantity": 1,
"variantId": "BR00T-000132"
}
],
"paymentMethodCode": "disk1",
"paymentStatus": "NOT_PAID",
"totalOrderSum": 690
}
Положительный результат запроса:
{
"success": true,
"discounts": [
{
"discountValue": 2813.00, //общая применяемая скидка
"orderSumDiscountValue": 1541.00, //скидка на итоговую сумму заказа (общая сумма заказа за вычетом потоварной скидки)(discountValue - skusDiscountValue)
"skusDiscountValue": 1272.00, //Суммарная потоварная скидка
"deliveryDiscountValue": 50, //Скидка на доставку в %
"discountType": "PROMOCODE", // PROMOCODE | PAYMENT_TYPE
"discountFormula": "250.00 * 2 + (636.00 - 636.00) * 2 + 1030.00 + 636.00 * 2 - 1000 - (20% + 10%) = 1261", //формула расчёта скидки на сумму заказа
"promocodeSkuDiscounts": [ //потоварные скидки
{
"skuId": "1066", //ID товара
"quantity": 2, //Кол-во товара
"fixDiscountAmount": 1000, //Суммарная величина фикс скидки на товар
"percentDiscountAmount": 0, //Суммарная величина процента скидки на товар
"oldPrice": 636.00, //старая цена товара
"newPrice": 0, //цена товара после применения скидки
"formula": "(636.00 - 636.00) * 2" //формула расчёта скидки на товар
}
]
}
{
"discountType": "PAYMENT_TYPE", // PROMOCODE | PAYMENT_TYPE
"discountValue": 20
}
]
}
/api/lite/orders/copy
Копирование заказа
/api/lite/orders/copy
Копирует указанный заказ черновиком и возвращает номер созданного заказа
Обязательный параметр: id заказа. Например:
{
"id": "1001"
}
Формат ответа аналогичен списку заказов
Пример ответа:
{
"success": true,
"orderId": "8057-1057",
"c": "7ed78ba9-310f-e681-756c-71beb95853f6"
}
/api/lite/pub/promocode/conditions/check
Запросить проверку применения промокода по заказу (публичный)
/api/lite/pub/promocode/conditions/check
По отправленным данным заказа (с обязательным указанием промокода) - возвращает размер скидки в рублях для чекаута, а также возможные промотовары
Формат передаваемых данных всегда аналогичен dto заказа в методе создания заказа (публичный):
/api/lite/pub/orders
Пример запроса:
{
"promocode":"testFix",
"comment": "",
"confirmStatus": "APPROVED",
"delivery": {
"address": {
"area": null,
"areaFias": null,
"block": "",
"building": "",
"city": "Урюпинск",
"cityFias": "2e5879fc-35c2-4354-816b-f1fce74ece87",
"country": "RU",
"flat": "",
"fullAddress": "",
"house": "",
"region": "Волгоградская",
"regionFias": "da051ec8-da2e-4a66-b542-473b8d221ab4",
"settlement": null,
"settlementFias": null,
"street": "",
"zip": ""
},
"code": "bb60d72c-2a25-11e9-8989-002590923634",
"deliveryComment": "",
"desiredDeliveryDate": null,
"pickupPointId": "",
"receiver": {
"alternativePhone": "",
"email": "",
"name": "",
"phone": ""
},
"timeFrom": "09:00",
"timeTo": "20:00"
},
"items": [
{
"num": 1,
"productId": "BR00T-000132",
"quantity": 1,
"variantId": "BR00T-000132"
}
],
"paymentMethodCode": "disk1",
"paymentStatus": "NOT_PAID",
"totalOrderSum": 690
}
Положительный результат запроса:
{
"success": true,
"code": "testFix",
"isActive": true,
"discountType": "FIX",
"discountValue": 990,
"hasConditions": true,
"deliveryDiscountValue": 0,
"bonusSkus": {
"1002": 1
}
}
/api/lite/orders/receiver/address
Заказ → обновление адреса доставки получателю
/api/lite/orders/receiver/address
Возможность обновить только адрес доставки
id - номер заказа
Запрос
{
"id": "8057-1102",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Лубянка",
"house": "3",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
"fullCity": null,
"rawData": "Алтайский, Барнаул, Барнаульская, д 1",
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
}
}
Пример успешного ответа
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/file
/api/lite/orders/file
Добавляет файл к заказу.
Параметры передаются как form-data:
upfile | Файл для загрузки |
id | Идентификатор заказа (humanId) |
print_when_packing | Печатать при упаковке |
copies_qty | Кол-во копий |
Пример ответа:
{
"success": true,
"id": "b233372d-cf7b-f07b-446b-128912be7c8a",
"fileType": "JPG",
"fileName": "IMG_20200822_101244",
"fileSource": "USER", //ESHOP | FULFILLMENT
"fileExt": "jpg",
"url": "https://storage.yandexcloud.net/order-files-kak2c/d0f03942-8d75-4456-93af-42ec518ef0a9.jpg",
"printWhenPacking": false,
"copiesQty": 1
}
/api/lite/orders/file
Удаляет файл
В параметре id передается идентификатор файла.
Пример запроса:
DELETE https://app.kak2c.ru/api/lite/orders/file?id=b233372d-cf7b-f07b-446b-128912be7c8a
Пример ответа:
{
"success": true
}
/api/lite/orders/file/edit
/api/lite/orders/file/edit
Пример запроса:
{
"id": "b9e3efdd-455e-af10-996f-2cf6f03d9775",
"copiesQty": 2,
"printWhenPacking": true
}
Пример ответа:
{
"success": true
}
/api/lite/orders/discounts
Применение промокода и скидки
/api/lite/orders/discounts
Позволяет применить или удалить промокод и скидку
Пример запроса
{
"id": "4249-1647",
"promocode": "promocode",
"manualDiscount": {
"isActive": true,
"discountType": "PERCENT", // PERCENT,FIX
"discountValue": 10
}
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/email/repeat
Заказ - повторить отправку email покупателю
/api/lite/orders/email/repeat
Отправляет email покупателю о создании заказа.
Параметры - humanId заказа и код "c"
Пример запроса
{
"id": "8202-1051",
"c":"224f9149-a6c3-e408-5193-42cc55fe5749"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/sync_ff
Заказ - синхронизация с Фулфилмент складом
/api/lite/orders/sync_ff
Выгрузка текущего состояния заказа на склад Фулфилмент (если в заказе проставлен склад такого типа).
В случае успеха выполнения - нужно перезакачать данные о заказе.
Пример запроса
{
"id":"1234"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/delivery
Заказ → обновление данных доставки
/api/lite/orders/delivery
Возможность обновить все данные по доставке заказа
id - номер заказа
Формат аналогичный секции delivery в GET /orders
Запрос
{
"id": "8202-1051",
"delivery": {
"code": "624f1b23-049f-a1aa-ee21-b6b1523a88b1",
"pickupPointId": "2201-002",
"deliveryComment": "Поскорее",
"desiredDeliveryDate": "2020-08-13",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"isDeliverySumLimitActive": true,
"deliverySumLimitAmount": 5000,
"deliverySumBelowLimitAmount": 1000,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Томск",
"settlement": null,
"street": "Барнаульская",
"house": "1",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
"fullCity": null,
"rawData": "Алтайский, Барнаул, Барнаульская, д 1",
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Сергей",
"surname": "Сергеев",
"patronymic": "",
"fullName": "Толстой Петр",
"phone": "89011111111",
"rawPhone": "89011111111",
"alternativePhone": "",
"email": "exhila.rate1111111@mail.ru",
"post": null,
"personType": "CUSTOMER"
},
"deliveryServices": null,
"deliveryPayerType": "RECEIVER", // SENDER
"isDeliverySumLimitActive": true,
"deliverySumLimitAmount": 324234,
"deliverySumBelowLimitAmount": 23432432
}
}
Пример успешного ответа
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/comments
Заказ → обновление комментариев
/api/lite/orders/comments
Возможность обновить комментарии по заказу
id - номер заказа
Запрос
{
"id": "8202-1051",
"comment": "Комментарий покупателя",
"operatorComment": "Комментарий оператора"
}
Пример успешного ответа
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/diff_history
Запрос истории состояний заказа
/api/lite/orders/diff_history
На данный момент возвращает только начальное состояние заказа.
Номер заказа передается в параметре order_id.
Пример результата запроса
{
"success": true,
"history": [
{
"createTs": "2021-01-20 15:03:28.065",
"component": "ESHOP",
"diffData": "{\"id\":\"34575570\",\"date\":\"2021-01-20 15:03:08\",\"updateTs\":\"2021-01-20 15:03:25.990\",\"status\":\"ORDER_INFO_DRAFT\",\"totalOrderSum\":215.0,\"insuranceSum\":215.00,\"insuranceSumAutoCalculation\":true,\"paymentStatus\":\"NOT_PAID\",\"confirmStatus\":\"NEED_CONFIRM\",\"paymentMethodCode\":\"cod-card\",\"paymentMethodType\":\"COD_CARD\",\"needCustomerPayment\":false,\"customData\":\"{\\r\\n \\\"beruDeliveryServiceName\\\" : \\\"DPD\\\",\\r\\n \\\"beruDeliveryName\\\" : \\\"Самовывоз\\\"\\r\\n}\",\"orderType\":\"STANDARD\",\"delivery\":{\"code\":\"4166d5f0-5449-2827-d4e9-256526cb52f8\",\"type\":\"COURIER\",\"title\":\"BERU\",\"pickupPointId\":null,\"logoUrl\":\"https://storage.yandexcloud.net/lk-kak2c/delivery_beru_left.svg\",\"trackingNumber\":null,\"trackingURL\":null,\"desiredDeliveryDate\":null,\"desiredDeliveryTimeFrom\":\"09:00\",\"desiredDeliveryTimeTo\":\"18:00\",\"actualDeliveryDate\":null,\"pvzComment\":null,\"deliveryComment\":null,\"address\":{\"country\":null,\"countryCode\":null,\"region\":\"Москва\",\"area\":null,\"city\":\"Москва\",\"settlement\":null,\"street\":null,\"house\":null,\"block\":null,\"building\":null,\"flat\":null,\"fullAddress\":\"Москва\",\"fullCity\":null,\"rawData\":null,\"zip\":null,\"regionFias\":null,\"areaFias\":null,\"cityFias\":null,\"settlementFias\":null},\"receiver\":{\"name\":\"Покупатель на Беру\",\"surname\":null,\"patronymic\":null,\"phone\":\"+70000000000\",\"rawPhone\":\"+70000000000\",\"alternativePhone\":\"\",\"email\":null,\"post\":null,\"personType\":\"CUSTOMER\",\"address\":{\"country\":null,\"countryCode\":null,\"region\":\"Москва\",\"area\":null,\"city\":\"Москва\",\"settlement\":null,\"street\":null,\"house\":null,\"block\":null,\"building\":null,\"flat\":null,\"fullAddress\":\"Москва\",\"fullCity\":null,\"rawData\":null,\"zip\":null,\"regionFias\":null,\"areaFias\":null,\"cityFias\":null,\"settlementFias\":null}},\"deliveryServices\":null},\"legalEntity\":{\"id\":\"2446fe8b-4f98-dd1a-c7a4-757dafa9c8cb\",\"type\":\"PERSON\",\"role\":null,\"name\":\" Розничный покупатель\",\"organization\":null,\"person\":null},\"items\":[{\"num\":1,\"variantId\":\"1110\",\"variantExtId\":\"ЦБ-00035890\",\"productId\":\"1109\",\"productVariantCount\":1,\"name\":\"AVON Naturals \\\"Цветущая сакура\\\" Спрей для тела, 100мл\",\"article\":\"ЦБ-00035890\",\"quantity\":1,\"quantityAvailable\":1,\"vatRate\":\"NO_VAT\",\"vatSkuProduct\":\"NO_VAT\",\"price\":215.0,\"img\":\"https://storage.yandexcloud.net/images-k2c/6dcbbe98-da4a-4de3-9f99-91b9d1399f84.jpg\",\"itemAmountState\":{\"amountORDERED\":0,\"amountRESERVED\":0,\"amountPACKED\":0,\"amountSHIPPED\":0,\"amountDELIVERED\":0,\"amountLOST\":0,\"amountRETURNED\":0,\"amountRETURNED_DEFECTIVE\":0},\"skuType\":\"SKU\",\"itemDimensions\":{\"height\":15,\"width\":3,\"depth\":3},\"itemWeight\":107,\"barcode\":\"5050136478292\"},{\"num\":2,\"variantId\":\"delivery\",\"name\":\"Доставка\",\"quantity\":1,\"vatRate\":\"NO_VAT\",\"price\":0.0,\"skuType\":\"SERVICE\",\"barcode\":\"\"}],\"expenses\":[],\"files\":[],\"customerPaymentInProcess\":false,\"warehouseName\":\"Tempoline\",\"warehouseCode\":\"6864ba99-f13c-87c0-3f67-f4c7889718a5\",\"warehouseFFExported\":false,\"warehouseFFSync\":false,\"warehouseFFExportError\":false,\"permissionList\":{\"fieldPermissions\":[{\"type\":\"ITEMS_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"PAYMENT_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"IS_PAID_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"RECEIVER_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"DELIVERY_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"WAREHOUSE_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"COMMENTS_EDITABLE\",\"value\":true,\"reason\":null}],\"actionPermissions\":[{\"type\":\"CANCEL\",\"value\":true,\"reason\":null},{\"type\":\"CONFIRM\",\"value\":true,\"reason\":null},{\"type\":\"NEED_CONFIRM\",\"value\":true,\"reason\":null},{\"type\":\"PACK\",\"value\":true,\"reason\":null},{\"type\":\"COPY\",\"value\":true,\"reason\":null},{\"type\":\"PACK_CONTROL\",\"value\":true,\"reason\":null},{\"type\":\"UNPACK\",\"value\":true,\"reason\":null},{\"type\":\"SHIPPING\",\"value\":true,\"reason\":null},{\"type\":\"UNSHIPPING\",\"value\":true,\"reason\":null},{\"type\":\"REFRESH_RESERVE\",\"value\":true,\"reason\":null},{\"type\":\"RETURN_TO_DELIVERY\",\"value\":true,\"reason\":null},{\"type\":\"REVERT_RETURNS\",\"value\":true,\"reason\":null},{\"type\":\"DELIVER_SELF_PICKUP\",\"value\":true,\"reason\":null},{\"type\":\"DELIVER_COURIER\",\"value\":true,\"reason\":null},{\"type\":\"ACCEPT_RETURN\",\"value\":true,\"reason\":null}]},\"currency\":\"RUB\",\"summaryItemAmountState\":{\"amountORDERED\":0,\"amountRESERVED\":0,\"amountPACKED\":0,\"amountSHIPPED\":0,\"amountDELIVERED\":0,\"amountLOST\":0,\"amountRETURNED\":0,\"amountRETURNED_DEFECTIVE\":0},\"c\":\"5eee7ab1-70c4-1d31-4b21-90df1c522c00\"}"
}
]
}
/api/lite/orders/packing_export
Выгрузка файла для загрузки ШК Wildberries по схеме FBW
/api/lite/orders/packing_export
Возвращает файл с текущими ШК мест в заказе.
Формат файла соответствует необходимому для загрузки методом /api/lite/orders/add_wb_barcodes
Номер заказа передается в параметре id.
Положительный результат запроса:
{
"success": true,
"fileName": "packings_1234-1234.xls",
"content": "0M8R4K(...)AAAAAAAAAAAAAAAAAAAAAA==" //Файл в формате excel, закодированный в BASE64 строке
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/orders/add_wb_barcodes
Загрузка файла с ШК Wildberries по схеме FBW
/api/lite/orders/add_wb_barcodes
Заменяет текущие ШК на ШК от Wildberries.
Параметры передаются в формате form-data
order_id | Идентификатор заказа |
file | Файл с ШК от Wildberries |
Положительный результат запроса:
{
"success": true
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Комментарии по анализу возвратов от фулфилмента
/api/lite/pub/save_dadata_address
Сохранить сырой адрес, возвращаемый из dadata
/api/lite/pub/save_dadata_address
(метод требует авторизации по домену)
Пример запроса:
{
"address_id": "1d729d23-0778-3399-36a6-e10cb53e0ab9", //необязательный параметр. Если такой ид уже есть, адрес обновляется. Если нет - создаётся новый
"address": "{\"value\":\"г Москва, Варшавское шоссе, д 18 к 1\",\"unrestricted_value\":\"117105, г Москва, Донской р-н, Варшавское шоссе, д 18 к 1\",\"data\":{\"postal_code\":\"117105\",\"country\":\"Россия\",\"country_iso_code\":\"RU\",\"federal_district\":\"Центральный\",\"region_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"region_kladr_id\":\"7700000000000\",\"region_iso_code\":\"RU-MOW\",\"region_with_type\":\"г Москва\",\"region_type\":\"г\",\"region_type_full\":\"город\",\"region\":\"Москва\",\"area_fias_id\":null,\"area_kladr_id\":null,\"area_with_type\":null,\"area_type\":null,\"area_type_full\":null,\"area\":null,\"city_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"city_kladr_id\":\"7700000000000\",\"city_with_type\":\"г Москва\",\"city_type\":\"г\",\"city_type_full\":\"город\",\"city\":\"Москва\",\"city_area\":\"Южный\",\"city_district_fias_id\":null,\"city_district_kladr_id\":null,\"city_district_with_type\":\"Донской р-н\",\"city_district_type\":\"р-н\",\"city_district_type_full\":\"район\",\"city_district\":\"Донской\",\"settlement_fias_id\":null,\"settlement_kladr_id\":null,\"settlement_with_type\":null,\"settlement_type\":null,\"settlement_type_full\":null,\"settlement\":null,\"street_fias_id\":\"8fc06b0b-5de3-4a72-9e6f-9e0647a37a66\",\"street_kladr_id\":\"77000000000047600\",\"street_with_type\":\"Варшавское шоссе\",\"street_type\":\"ш\",\"street_type_full\":\"шоссе\",\"street\":\"Варшавское\",\"house_fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"house_kladr_id\":\"7700000000004760341\",\"house_cadnum\":null,\"house_type\":\"д\",\"house_type_full\":\"дом\",\"house\":\"18\",\"block_type\":\"к\",\"block_type_full\":\"корпус\",\"block\":\"1\",\"entrance\":null,\"floor\":null,\"flat_fias_id\":null,\"flat_cadnum\":null,\"flat_type\":null,\"flat_type_full\":null,\"flat\":null,\"flat_area\":null,\"square_meter_price\":\"194999\",\"flat_price\":null,\"postal_box\":null,\"fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"fias_code\":\"77000000000000004760341\",\"fias_level\":\"8\",\"fias_actuality_state\":\"0\",\"kladr_id\":\"7700000000004760341\",\"geoname_id\":\"524894\",\"capital_marker\":\"0\",\"okato\":\"45296561000\",\"oktmo\":\"45915000\",\"tax_office\":\"7726\",\"tax_office_legal\":\"7726\",\"timezone\":\"UTC+3\",\"geo_lat\":\"55.691963\",\"geo_lon\":\"37.620833\",\"beltway_hit\":\"IN_MKAD\",\"beltway_distance\":null,\"metro\":[{\"name\":\"Верхние Котлы\",\"line\":\"МЦК\",\"distance\":0.2},{\"name\":\"Крымская\",\"line\":\"МЦК\",\"distance\":1.0},{\"name\":\"Нагатинская\",\"line\":\"Серпуховско-Тимирязевская\",\"distance\":1.1}],\"qc_geo\":\"0\",\"qc_complete\":null,\"qc_house\":null,\"history_values\":null,\"unparsed_parts\":null,\"source\":null,\"qc\":null}}"
}
Успех:
{
"address_id": "1d729d23-0778-3399-36a6-e10cb53e0ab9",
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/bitrix/address
Получить сырой адрес, сохранённый из dadata
/api/lite/bitrix/address
параметр id - идентификатор ранее сохранённого адреса в методе /api/lite/pub/save_dadata_address
пример: /lite/bitrix/address?id=f20da5a8-12eb-315d-684c-85c65aa5a713
Успех:
{
"address": "{\"value\":\"г Москва, Варшавское шоссе, д 18 к 1\",\"unrestricted_value\":\"117105, г Москва, Донской р-н, Варшавское шоссе, д 18 к 1\",\"data\":{\"postal_code\":\"117105\",\"country\":\"Россия\",\"country_iso_code\":\"RU\",\"federal_district\":\"Центральный\",\"region_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"region_kladr_id\":\"7700000000000\",\"region_iso_code\":\"RU-MOW\",\"region_with_type\":\"г Москва\",\"region_type\":\"г\",\"region_type_full\":\"город\",\"region\":\"Москва\",\"area_fias_id\":null,\"area_kladr_id\":null,\"area_with_type\":null,\"area_type\":null,\"area_type_full\":null,\"area\":null,\"city_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"city_kladr_id\":\"7700000000000\",\"city_with_type\":\"г Москва\",\"city_type\":\"г\",\"city_type_full\":\"город\",\"city\":\"Москва\",\"city_area\":\"Южный\",\"city_district_fias_id\":null,\"city_district_kladr_id\":null,\"city_district_with_type\":\"Донской р-н\",\"city_district_type\":\"р-н\",\"city_district_type_full\":\"район\",\"city_district\":\"Донской\",\"settlement_fias_id\":null,\"settlement_kladr_id\":null,\"settlement_with_type\":null,\"settlement_type\":null,\"settlement_type_full\":null,\"settlement\":null,\"street_fias_id\":\"8fc06b0b-5de3-4a72-9e6f-9e0647a37a66\",\"street_kladr_id\":\"77000000000047600\",\"street_with_type\":\"Варшавское шоссе\",\"street_type\":\"ш\",\"street_type_full\":\"шоссе\",\"street\":\"Варшавское\",\"house_fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"house_kladr_id\":\"7700000000004760341\",\"house_cadnum\":null,\"house_type\":\"д\",\"house_type_full\":\"дом\",\"house\":\"18\",\"block_type\":\"к\",\"block_type_full\":\"корпус\",\"block\":\"1\",\"entrance\":null,\"floor\":null,\"flat_fias_id\":null,\"flat_cadnum\":null,\"flat_type\":null,\"flat_type_full\":null,\"flat\":null,\"flat_area\":null,\"square_meter_price\":\"194999\",\"flat_price\":null,\"postal_box\":null,\"fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"fias_code\":\"77000000000000004760341\",\"fias_level\":\"8\",\"fias_actuality_state\":\"0\",\"kladr_id\":\"7700000000004760341\",\"geoname_id\":\"524894\",\"capital_marker\":\"0\",\"okato\":\"45296561000\",\"oktmo\":\"45915000\",\"tax_office\":\"7726\",\"tax_office_legal\":\"7726\",\"timezone\":\"UTC+3\",\"geo_lat\":\"55.691963\",\"geo_lon\":\"37.620833\",\"beltway_hit\":\"IN_MKAD\",\"beltway_distance\":null,\"metro\":[{\"name\":\"Верхние Котлы\",\"line\":\"МЦК\",\"distance\":0.2},{\"name\":\"Крымская\",\"line\":\"МЦК\",\"distance\":1.0},{\"name\":\"Нагатинская\",\"line\":\"Серпуховско-Тимирязевская\",\"distance\":1.1}],\"qc_geo\":\"0\",\"qc_complete\":null,\"qc_house\":null,\"history_values\":null,\"unparsed_parts\":null,\"source\":null,\"qc\":null}}",
"address_id": "f20da5a8-12eb-315d-684c-85c65aa5a713",
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/shipped/report
Получение сводки по отправленным заказам с информацией о уникальных номерах(например чз)
/api/lite/orders/shipped/report
Возвращает сводные данные по заказам с данными по уникальным номерам
Для выполнения запроса необходимо обязательно задать параметры: date_from и date_to(период должен быть не больше недели), delivery_code ид курьерок через запятую. Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0. Пример полного запроса
/api/lite/orders/shipped/report?delivery_code=7d7365f2-5189-ab7b-ddf3-9d6b41cca901,7d7365f2-5189-ab7b-ddf3-9d6b41cca902&date_from=2023-01-07T00:00:00&date_to=2023-01-14T23:59:59&page=0&size=400
Пример ответа:
{
"orders": [
{
"currency": "RUB",
"date": "2023-01-14 12:30:17.180",
"shippingDate": "2023-01-17 12:30:17.180",
"delivery": {
"code": "8826c198-0815-d4ad-b3ab-0681ca7defbb",
"deliveryCode": "OZON",
"title": "OZON"
},
"externalId": "64029298-0041-2",
"id": "64029298-0041-2",
"shippedItems": [
{
"accountingAttributes": [
{
"code": "uniquenumber",
"n": 1,
"stringValue": "4601532004939"
}
],
"article": "4000023504",
"name": "Контейнер для порошка, 5 л (Полимербыт):6/18",
"price": 199.00,
"quantity": 1,
"variantId": "b3d82d45-b383-414e-94dc-34f8c2cd3296"
}
],
"status": "ORDER_INFO_SHIPPED",
"totalOrderSum": 199.00
},
{
"currency": "RUB",
"date": "2023-01-14 12:09:43.014",
"delivery": {
"code": "8826c198-0815-d4ad-b3ab-0681ca7defbb",
"deliveryCode": "OZON",
"title": "OZON"
},
"externalId": "43319845-0119-1",
"id": "43319845-0119-1",
"shippedItems": [
{
"accountingAttributes": [
{
"code": "uniquenumber",
"n": 1,
"stringValue": "4640043100471"
}
],
"article": "1000324110",
"name": "SOFFIONE Premio Туалетная бумага Лаванда 3сл 4рул(Арх):10",
"price": 118.00,
"quantity": 1,
"variantId": "cc50d935-8a6c-4f67-ad94-202ea1bd35e4"
}
],
"status": "ORDER_INFO_SHIPPED",
"totalOrderSum": 118.00
},
{
"currency": "RUB",
"date": "2023-01-14 09:52:22.214",
"delivery": {
"code": "8826c198-0815-d4ad-b3ab-0681ca7defbb",
"deliveryCode": "OZON",
"title": "OZON"
},
"externalId": "39501623-0020-1",
"id": "39501623-0020-1",
"shippedItems": [
{
"accountingAttributes": [
{
"code": "uniquenumber",
"n": 1,
"stringValue": "9000101031669"
}
],
"article": "1000203568",
"name": "Е Кондиционер д/белья Свежий 2л(Хенкель):8",
"price": 209.00,
"quantity": 1,
"variantId": "1407d0d7-b532-4992-8383-f7500bae5b67"
}
],
"status": "ORDER_INFO_SHIPPED",
"totalOrderSum": 209.00
}
],
"recordsTotal": 27673,
"success": true
}
/api/lite/orders/history/status
Получение истории смены статусов по заказу
/api/lite/orders/history/status
Возвращает историю смены статуса по указанному заказу
Обязательный параметр: id заказа
Пример ответа:
{
"items": [
{
"date": "2023-07-21 18:03:26.797",
"infoStatus": "ORDER_INFO_SHIPPED"
},
{
"date": "2023-07-21 18:03:08.270",
"infoStatus": "ORDER_INFO_PACKED"
},
{
"date": "2023-07-21 18:02:55.037",
"infoStatus": "ORDER_INFO_IN_PACKING"
},
{
"date": "2023-07-21 18:02:26.174",
"infoStatus": "ORDER_INFO_READY_TO_PACK"
},
{
"date": "2023-07-21 18:02:09.110",
"infoStatus": "ORDER_INFO_REQUIRE_PAYMENT"
},
{
"date": "2023-07-21 18:01:25.464",
"infoStatus": "ORDER_INFO_NEED_CONFIRM"
}
],
"success": true
}
/api/lite/orders/shipped/report/packings
Получение списка заказов отгруженных по указанной службе доставки за интервал
/api/lite/orders/shipped/report/packings
Возвращает список заказов, отгруженных в указанный интервал по указанной службе доставки.
Если служба доставки не указана - возвращает по всем службам доставки.
Для выполнения запроса необходимо задать параметры:
date_from и date_to(необязательно, период должен быть не больше недели),
delivery_company - интересующая служба доставки по перечислению DeliveryCompany.
Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0.
Ответ - в формате стандартного списка заказов /api/lite/orders
Пример полного запроса
GET /api/lite/orders/shipped/report/packings?date_from=2020-08-01T01:00:00&date_to=2020-08-07T00:00:00&delivery_company=CDEK
Пример ответа:
{
"orders": [
{
"c": "d4a5e0a9-7ac7-5970-9682-633beb98c8ea",
"confirmStatus": "APPROVED",
"createTs": "2020-08-06 10:56:46.496",
"crossdockEditable": false,
"currency": "RUB",
"customData": "{\n \"ozonPostingNumber\" : \"07003190-0086-3\"\n}",
"customerPaymentInProcess": false,
"date": "2023-02-06 10:56:46",
"delivery": {
"address": {
"block": "3",
"building": "4",
"city": "Москва",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Москва",
"house": "2",
"region": "Москва",
"street": "1"
},
"code": "145088e0-b11e-d2c3-a066-02526f15ac4f",
"deliveryCode": "OZON",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_ozon_left.svg",
"receiver": {
"address": {
"block": "3",
"building": "4",
"city": "Москва",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Москва",
"house": "2",
"region": "Москва",
"street": "1"
},
"alternativePhone": "",
"name": "Покупатель на Озоне",
"passport": {},
"personType": "CUSTOMER",
"phone": "+70000000000",
"rawPhone": "+70000000000"
},
"title": "OZON",
"trackingNumber": "07003190-0086-3",
"trackingURL": "https://www.ozon.ru/",
"type": "COURIER"
},
"expenses": [],
"externalId": "162092860",
"files": [],
"id": "07003190-0086-3",
"insuranceSum": 624.00,
"insuranceSumAutoCalculation": true,
"isMarketplaceOrder": true,
"items": [
{
"article": "FAQ-D-000110",
"barcode": "4601811006951",
"customData": "{\"marketplaceSkuId\":179692054}",
"img": "https://img.kak2c.ru/i/T/8/kgMdAI9R_c.jpg",
"itemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"itemDimensions": {
"depth": 10,
"height": 20,
"width": 10
},
"itemWeight": 350,
"name": "Шампунь-гель для душа 2 в 1 Bro Cosmetics, WASSUP, MAN // очищает и тонизирует, Цвет: серый ",
"num": 1,
"price": 624.00,
"productExtId": "FAQ-D-000110",
"productId": "FAQ-D-000110",
"productVariantCount": 3,
"quantity": 1,
"quantityAvailable": 47,
"skuType": "SKU",
"variantExtId": "FAQ-D-000110",
"variantId": "FAQ-D-000110",
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT"
},
{
"article": "",
"barcode": "",
"name": "Доставка",
"num": 2,
"price": 0.00,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"legalEntity": {
"id": "3c0a3ad3-b10f-4299-5b1b-a3d90b0c198a",
"name": " Розничный покупатель",
"type": "PERSON"
},
"manualDiscount": {
"appliedDiscountValue": 0,
"discountType": "FIX",
"discountValue": 0,
"isActive": false
},
"needCustomerPayment": false,
"needReserve": true,
"onlinePaymentSum": 624.00,
"operatorComment": "-",
"orderType": "STANDARD",
"packingOptions": [],
"packingVideos": [
"http://cvs-2.kak2c.ru:21080/videoserver/video/2021-05-26/1f742f52-be58-11eb-5081-002590357b68.mp4"
],
"packings": [
{
"barcode": "6660000034777",
"files": [],
"items": [
{
"accountingAttributes": [],
"article": "FAQ-D-000110",
"barcode": "4601811006951",
"customData": "",
"img": "https://img.kak2c.ru/i/T/8/kgMdAI9R_c.jpg",
"itemDimensions": {
"depth": 10,
"height": 20,
"width": 10
},
"itemWeight": 350,
"name": "Шампунь-гель для душа 2 в 1 Bro Cosmetics, WASSUP, MAN // очищает и тонизирует, Цвет: серый ",
"num": 1,
"price": 624.00,
"productExtId": "FAQ-D-000110",
"productId": "FAQ-D-000110",
"productVariantCount": 3,
"quantity": 1,
"skuType": "SKU",
"variantExtId": "FAQ-D-000110",
"variantId": "FAQ-D-000110",
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT"
}
],
"measurements": {
"dimensions": {
"depth": 100,
"height": 100,
"width": 180
},
"success": true,
"weight": 452
}
}
],
"paymentMethodCode": "online",
"paymentMethodName": "Предоплата картой на сайте",
"paymentMethodType": "ONLINE",
"paymentStatus": "PAID",
"permissionList": {
"actionPermissions": [
{
"type": "CANCEL",
"value": false
},
{
"type": "CONFIRM",
"value": false
},
{
"type": "NEED_CONFIRM",
"value": false
},
{
"type": "PACK",
"value": false
},
{
"type": "COPY",
"value": true
},
{
"type": "PACK_CONTROL",
"value": false
},
{
"type": "UNPACK",
"value": false
},
{
"type": "SHIPPING",
"value": false
},
{
"type": "UNSHIPPING",
"value": false
},
{
"type": "REFRESH_RESERVE",
"value": false
},
{
"type": "RETURN_TO_DELIVERY",
"value": false
},
{
"type": "REVERT_RETURNS",
"value": false
},
{
"type": "DELIVER_SELF_PICKUP",
"value": false
},
{
"type": "DELIVER_COURIER",
"value": false
},
{
"type": "ACCEPT_RETURN",
"value": false
}
],
"fieldPermissions": [
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "ITEMS_EDITABLE",
"value": false
},
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "PAYMENT_EDITABLE",
"value": false
},
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "IS_PAID_EDITABLE",
"value": false
},
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "RECEIVER_EDITABLE",
"value": false
},
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "DELIVERY_EDITABLE",
"value": false
},
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "WAREHOUSE_EDITABLE",
"value": false
},
{
"reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
"type": "COMMENTS_EDITABLE",
"value": false
},
{
"type": "OPERATOR_COMMENTS_EDITABLE",
"value": true
}
],
"infoStatus": "ORDER_INFO_DELIVERED"
},
"plannedTakeOutDate": "2020-08-07 13:00:00",
"readyForFFExport": true,
"shortUrl": "http://r.kak2c.ru/0700jhr",
"status": "ORDER_INFO_DELIVERED",
"summaryItemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"totalOrderSum": 624.00,
"updateTs": "2023-04-03 15:38:17.233",
"warehouseCode": "6805bc64-270f-ae7d-1231-773ff181e446",
"warehouseFFExportError": false,
"warehouseFFExported": true,
"warehouseFFSync": true,
"warehouseFFSyncDate": "2020-08-06 11:00:35",
"warehouseName": "Tempoline",
"warehouseShippingOptions": {
"packingType": "MIX_PACKINGS"
}
}
}
],
"recordsTotal": 1,
"success": true
}
/api/lite/orders/shipped/report/cod
Получение списка заказов по которым были переведены наложенные платежи
/api/lite/orders/shipped/report/cod
Возвращает список заказов, по которым с указанной в запросе даты были переводы наложенных платежей по бухгалтерии.
Для выполнения запроса необходимо задать параметры:
date_from - дата для поиска даты перевода платежей (поле executionTime в codPayments заказов)
Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0.
Ответ - в формате стандартного списка заказов /api/lite/orders
Пример полного запроса
GET https://app.kak2c.ru/api/lite/orders/shipped/report/cod?date_from=2020-01-01T00:00:00
Пример ответа:
{
"orders": [
{
"c": "a0737972-c6bb-0759-35df-afd6bc2e6400",
"codPayments": [
{
"date": "2022-05-30 14:03:44",
"executionTime": "2022-05-30 14:30:00",
"paymentDocumentId": "BR0237-1",
"sum": 8857.00
}
],
"comment": "",
"confirmStatus": "APPROVED",
"createTs": "2022-05-30 14:04:18.900",
"crossdockEditable": false,
"currency": "RUB",
"customerPaymentInProcess": false,
"date": "2022-05-30 14:03:44",
"delivery": {
"address": {
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Москва",
"rawData": "Москва",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"zip": "143582"
},
"code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
"deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
"deliveryComment": "",
"desiredDeliveryDate": "2022-05-31",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"isDeliverySumLimitActive": false,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
"pickupPointId": "5001-152",
"pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 5001-152, Адрес пункта выдачи: Невская ул., д. 704, График работы: Пн-Вс 10:00-22:00, Описание пункта выдачи: Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
"pvzInfo": {
"address": {
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Невская ул., д. 704",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"zip": "143582"
},
"code": "5001-152",
"courier": "PickPoint",
"courierCode": "PICKPOINT",
"courierPostamatType": "АПТ",
"deliveryServices": [
"DAY_OFF_DELIVERY",
"CONTACTLESS_DELIVERY",
"TEMPERATURE_REGIME",
"TRYING",
"CHECK_CONTENT",
"DANGEROUS_CARGO",
"PARTIAL_DELIVERY",
"PERSONALLY_IN_HANDS",
"REVERSE"
],
"description": "Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
"latitude": "55.812358",
"longitude": "37.04213",
"maxSize": "64x40.5x35.8",
"maxWeight": 15,
"metroStation": "метро Щукинская",
"paymentMethods": [
"COD_CASH",
"COD_CARD"
],
"type": "Postamat",
"workTime": "Пн-Вс 10:00-22:00"
},
"receiver": {
"address": {
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Москва",
"rawData": "Москва",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"zip": "143582"
},
"alternativePhone": "",
"email": "mer@mer.mer",
"fullName": "Цу Йцу",
"name": "цу йцу",
"passport": {},
"personType": "CUSTOMER",
"phone": "74563464645",
"rawPhone": "74563464645"
},
"title": "PickPoint",
"trackingNumber": "test333",
"type": "PVZ"
},
"expenses": [],
"externalId": "BR0237",
"files": [],
"id": "BR0237",
"insuranceSum": 8857.00,
"insuranceSumAutoCalculation": false,
"isMarketplaceOrder": false,
"items": [
{
"barcode": "4211125637101",
"itemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"itemDimensions": {
"depth": 26,
"height": 50,
"width": 42
},
"itemWeight": 5580,
"name": "Гидромассажная ванночка для ног Beurer FB50 белый",
"num": 1,
"price": 8000.00,
"productId": "1059034",
"productVariantCount": 1,
"quantity": 1,
"quantityAvailable": 0,
"skuType": "SKU",
"variantId": "1059034",
"vatRate": "VAT_20"
},
{
"barcode": "",
"name": "Доставка",
"num": 2,
"price": 857.00,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"legalEntity": {
"id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
"name": " Розничный покупатель",
"type": "PERSON"
},
"manualDiscount": {
"appliedDiscountValue": 0,
"discountType": "FIX",
"discountValue": 0,
"isActive": false
},
"needCustomerPayment": false,
"needReserve": true,
"onlinePaymentSum": 8857.00,
"operatorComment": "-",
"orderType": "STANDARD",
"packingOptions": [],
"packings": [
{
"barcode": "202749272704",
"files": [],
"items": [
{
"accountingAttributes": [],
"barcode": "4211125637101",
"itemDimensions": {
"depth": 26,
"height": 50,
"width": 42
},
"itemWeight": 5580,
"name": "Гидромассажная ванночка для ног Beurer FB50 белый",
"num": 1,
"price": 8000.00,
"productId": "1059034",
"productVariantCount": 1,
"quantity": 1,
"skuType": "SKU",
"variantId": "1059034",
"vatRate": "VAT_20"
}
],
"measurements": {
"dimensions": {
"depth": 12,
"height": 12,
"width": 12
},
"success": true,
"weight": 5580
}
}
],
"paymentMethodCode": "cod-card",
"paymentMethodName": "Оплата картой при получении",
"paymentMethodType": "COD_CARD",
"paymentStatus": "NOT_PAID",
"permissionList": {
"actionPermissions": [
{
"type": "CANCEL",
"value": false
},
{
"type": "CONFIRM",
"value": false
},
{
"type": "NEED_CONFIRM",
"value": false
},
{
"type": "PACK",
"value": false
},
{
"type": "COPY",
"value": true
},
{
"type": "PACK_CONTROL",
"value": false
},
{
"type": "UNPACK",
"value": false
},
{
"type": "SHIPPING",
"value": false
},
{
"type": "UNSHIPPING",
"value": false
},
{
"type": "REFRESH_RESERVE",
"value": false
},
{
"type": "RETURN_TO_DELIVERY",
"value": true
},
{
"type": "REVERT_RETURNS",
"value": false
},
{
"type": "DELIVER_SELF_PICKUP",
"value": false
},
{
"type": "DELIVER_COURIER",
"value": false
},
{
"type": "ACCEPT_RETURN",
"value": false
}
],
"fieldPermissions": [
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "ITEMS_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "PAYMENT_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "IS_PAID_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "RECEIVER_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "DELIVERY_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "WAREHOUSE_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "COMMENTS_EDITABLE",
"value": false
},
{
"type": "OPERATOR_COMMENTS_EDITABLE",
"value": true
}
],
"infoStatus": "ORDER_INFO_DELIVERED"
},
"plannedTakeOutDate": "2022-05-31 09:00:00",
"readyForFFExport": true,
"shortUrl": "http://r.kak2c.ru/yr99em9",
"status": "ORDER_INFO_DELIVERED",
"summaryItemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"totalOrderSum": 8857.00,
"updateTs": "2022-05-30 14:29:35.964",
"warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
"warehouseFFExportError": false,
"warehouseFFExported": false,
"warehouseFFSync": false,
"warehouseName": "BR_K",
"warehouseShippingOptions": {}
},
{
"c": "451dd9fc-9347-e7e4-c51d-e7842d870e40",
"codPayments": [
{
"date": "2022-05-31 12:22:16",
"executionTime": "2022-05-31 13:15:00",
"paymentDocumentId": "BR0255-1",
"sum": 5486.00
}
],
"comment": "",
"confirmStatus": "APPROVED",
"createTs": "2022-05-31 12:22:16.171",
"crossdockEditable": false,
"currency": "RUB",
"customerPaymentInProcess": false,
"date": "2022-05-31 12:21:38",
"delivery": {
"address": {
"city": "Краснодар",
"cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Краснодарский, Краснодар",
"rawData": "Краснодарский, Краснодар",
"region": "Краснодарский",
"regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
"zip": "350016"
},
"code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
"deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
"deliveryComment": "",
"desiredDeliveryDate": "2022-06-02",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"isDeliverySumLimitActive": false,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
"pickupPointId": "2302-060",
"pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 2302-060, Адрес пункта выдачи: Карякина ул, д.25, График работы: Пн-Пт 10:00-20:00, Сб 10:00-17:00, Описание пункта выдачи: Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
"pvzInfo": {
"address": {
"city": "Краснодар",
"cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Карякина ул, д.25",
"region": "Краснодарский",
"regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
"zip": "350016"
},
"code": "2302-060",
"courier": "PickPoint",
"courierCode": "PICKPOINT",
"courierPostamatType": "ПВЗ",
"deliveryServices": [
"TRYING",
"DANGEROUS_CARGO",
"PARTIAL_DELIVERY",
"PERSONALLY_IN_HANDS",
"REVERSE",
"CHECK_CONTENT",
"DAY_OFF_DELIVERY",
"CONTACTLESS_DELIVERY",
"TEMPERATURE_REGIME"
],
"description": "Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
"latitude": "45.065947",
"longitude": "39.010823",
"maxSize": "180",
"maxWeight": 15,
"metroStation": "",
"paymentMethods": [
"COD_CASH",
"COD_CARD"
],
"type": "PVZ",
"workTime": "Пн-Пт 10:00-20:00, Сб 10:00-17:00"
},
"receiver": {
"address": {
"city": "Краснодар",
"cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Краснодарский, Краснодар",
"rawData": "Краснодарский, Краснодар",
"region": "Краснодарский",
"regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
"zip": "350016"
},
"alternativePhone": "",
"email": "mer@mer.mer",
"fullName": "Цу Йцу",
"name": "цу йцу",
"passport": {},
"personType": "CUSTOMER",
"phone": "74563464645",
"rawPhone": "74563464645"
},
"title": "PickPoint",
"trackingNumber": "222",
"type": "PVZ"
},
"expenses": [],
"externalId": "BR0255",
"files": [],
"id": "BR0255",
"insuranceSum": 548.60,
"insuranceSumAutoCalculation": false,
"isMarketplaceOrder": false,
"items": [
{
"barcode": "4211125570354",
"itemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"itemDimensions": {
"depth": 17,
"height": 7,
"width": 23
},
"itemWeight": 167,
"name": "Маникюрно-педикюрный набор Beurer MP62 белый",
"num": 1,
"price": 5000.00,
"productId": "1047872",
"productVariantCount": 1,
"quantity": 1,
"quantityAvailable": 0,
"skuType": "SKU",
"variantId": "1047872",
"vatRate": "VAT_20"
},
{
"barcode": "",
"name": "Доставка",
"num": 2,
"price": 486.00,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"legalEntity": {
"id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
"name": " Розничный покупатель",
"type": "PERSON"
},
"manualDiscount": {
"appliedDiscountValue": 0,
"discountType": "FIX",
"discountValue": 0,
"isActive": false
},
"needCustomerPayment": false,
"needReserve": true,
"onlinePaymentSum": 5486.00,
"operatorComment": "",
"orderType": "STANDARD",
"packingOptions": [],
"packings": [
{
"barcode": "202749561679",
"files": [],
"items": [
{
"accountingAttributes": [],
"barcode": "4211125570354",
"itemDimensions": {
"depth": 17,
"height": 7,
"width": 23
},
"itemWeight": 167,
"name": "Маникюрно-педикюрный набор Beurer MP62 белый",
"num": 1,
"price": 5000.00,
"productId": "1047872",
"productVariantCount": 1,
"quantity": 1,
"skuType": "SKU",
"variantId": "1047872",
"vatRate": "VAT_20"
}
],
"measurements": {
"dimensions": {
"depth": 12,
"height": 12,
"width": 12
},
"success": true,
"weight": 1000
}
}
],
"paymentMethodCode": "cod-card",
"paymentMethodName": "Оплата картой при получении",
"paymentMethodType": "COD_CARD",
"paymentStatus": "NOT_PAID",
"permissionList": {
"actionPermissions": [
{
"type": "CANCEL",
"value": false
},
{
"type": "CONFIRM",
"value": false
},
{
"type": "NEED_CONFIRM",
"value": false
},
{
"type": "PACK",
"value": false
},
{
"type": "COPY",
"value": true
},
{
"type": "PACK_CONTROL",
"value": false
},
{
"type": "UNPACK",
"value": false
},
{
"type": "SHIPPING",
"value": false
},
{
"type": "UNSHIPPING",
"value": false
},
{
"type": "REFRESH_RESERVE",
"value": false
},
{
"type": "RETURN_TO_DELIVERY",
"value": true
},
{
"type": "REVERT_RETURNS",
"value": false
},
{
"type": "DELIVER_SELF_PICKUP",
"value": false
},
{
"type": "DELIVER_COURIER",
"value": false
},
{
"type": "ACCEPT_RETURN",
"value": false
}
],
"fieldPermissions": [
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "ITEMS_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "PAYMENT_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "IS_PAID_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "RECEIVER_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "DELIVERY_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "WAREHOUSE_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "COMMENTS_EDITABLE",
"value": false
},
{
"type": "OPERATOR_COMMENTS_EDITABLE",
"value": true
}
],
"infoStatus": "ORDER_INFO_DELIVERED"
},
"plannedTakeOutDate": "2022-06-01 09:00:00",
"readyForFFExport": true,
"shortUrl": "http://r.kak2c.ru/h5llc00",
"status": "ORDER_INFO_DELIVERED",
"summaryItemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"totalOrderSum": 5486.00,
"updateTs": "2022-05-31 13:13:34.341",
"warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
"warehouseFFExportError": false,
"warehouseFFExported": false,
"warehouseFFSync": false,
"warehouseName": "BR_K",
"warehouseShippingOptions": {}
}
],
"recordsTotal": 2,
"success": true
}
/api/lite/orders/shipped/report/no/delivery/statuses
Получение списка отгруженных заказов по которым не было статусов доставки
/api/lite/orders/shipped/report/no/delivery/statuses
Возвращает список заказов, по которым с указанной в запросе даты была отгрузка но не было значимых статусов доставки более 24 часов (= заказ похоже не доехал до СЦ КС и проблемный)
Для выполнения запроса необходимо задать параметры:
date_from - дата отгрузки заказов
Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0.
Ответ - в формате стандартного списка заказов /api/lite/orders
Пример полного запроса
GET https://app.kak2c.ru/api/lite/orders/shipped/report/no/delivery/statuses?date_from=2020-01-01T00:00:00
Пример ответа:
{
"orders": [
{
"c": "a0737972-c6bb-0759-35df-afd6bc2e6400",
"codPayments": [
{
"date": "2022-05-30 14:03:44",
"executionTime": "2022-05-30 14:30:00",
"paymentDocumentId": "BR0237-1",
"sum": 8857.00
}
],
"comment": "",
"confirmStatus": "APPROVED",
"createTs": "2022-05-30 14:04:18.900",
"crossdockEditable": false,
"currency": "RUB",
"customerPaymentInProcess": false,
"date": "2022-05-30 14:03:44",
"delivery": {
"address": {
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Москва",
"rawData": "Москва",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"zip": "143582"
},
"code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
"deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
"deliveryComment": "",
"desiredDeliveryDate": "2022-05-31",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"isDeliverySumLimitActive": false,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
"pickupPointId": "5001-152",
"pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 5001-152, Адрес пункта выдачи: Невская ул., д. 704, График работы: Пн-Вс 10:00-22:00, Описание пункта выдачи: Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
"pvzInfo": {
"address": {
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Невская ул., д. 704",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"zip": "143582"
},
"code": "5001-152",
"courier": "PickPoint",
"courierCode": "PICKPOINT",
"courierPostamatType": "АПТ",
"deliveryServices": [
"DAY_OFF_DELIVERY",
"CONTACTLESS_DELIVERY",
"TEMPERATURE_REGIME",
"TRYING",
"CHECK_CONTENT",
"DANGEROUS_CARGO",
"PARTIAL_DELIVERY",
"PERSONALLY_IN_HANDS",
"REVERSE"
],
"description": "Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
"latitude": "55.812358",
"longitude": "37.04213",
"maxSize": "64x40.5x35.8",
"maxWeight": 15,
"metroStation": "метро Щукинская",
"paymentMethods": [
"COD_CASH",
"COD_CARD"
],
"type": "Postamat",
"workTime": "Пн-Вс 10:00-22:00"
},
"receiver": {
"address": {
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Москва",
"rawData": "Москва",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"zip": "143582"
},
"alternativePhone": "",
"email": "mer@mer.mer",
"fullName": "Цу Йцу",
"name": "цу йцу",
"passport": {},
"personType": "CUSTOMER",
"phone": "74563464645",
"rawPhone": "74563464645"
},
"title": "PickPoint",
"trackingNumber": "test333",
"type": "PVZ"
},
"expenses": [],
"externalId": "BR0237",
"files": [],
"id": "BR0237",
"insuranceSum": 8857.00,
"insuranceSumAutoCalculation": false,
"isMarketplaceOrder": false,
"items": [
{
"barcode": "4211125637101",
"itemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"itemDimensions": {
"depth": 26,
"height": 50,
"width": 42
},
"itemWeight": 5580,
"name": "Гидромассажная ванночка для ног Beurer FB50 белый",
"num": 1,
"price": 8000.00,
"productId": "1059034",
"productVariantCount": 1,
"quantity": 1,
"quantityAvailable": 0,
"skuType": "SKU",
"variantId": "1059034",
"vatRate": "VAT_20"
},
{
"barcode": "",
"name": "Доставка",
"num": 2,
"price": 857.00,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"legalEntity": {
"id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
"name": " Розничный покупатель",
"type": "PERSON"
},
"manualDiscount": {
"appliedDiscountValue": 0,
"discountType": "FIX",
"discountValue": 0,
"isActive": false
},
"needCustomerPayment": false,
"needReserve": true,
"onlinePaymentSum": 8857.00,
"operatorComment": "-",
"orderType": "STANDARD",
"packingOptions": [],
"packings": [
{
"barcode": "202749272704",
"files": [],
"items": [
{
"accountingAttributes": [],
"barcode": "4211125637101",
"itemDimensions": {
"depth": 26,
"height": 50,
"width": 42
},
"itemWeight": 5580,
"name": "Гидромассажная ванночка для ног Beurer FB50 белый",
"num": 1,
"price": 8000.00,
"productId": "1059034",
"productVariantCount": 1,
"quantity": 1,
"skuType": "SKU",
"variantId": "1059034",
"vatRate": "VAT_20"
}
],
"measurements": {
"dimensions": {
"depth": 12,
"height": 12,
"width": 12
},
"success": true,
"weight": 5580
}
}
],
"paymentMethodCode": "cod-card",
"paymentMethodName": "Оплата картой при получении",
"paymentMethodType": "COD_CARD",
"paymentStatus": "NOT_PAID",
"permissionList": {
"actionPermissions": [
{
"type": "CANCEL",
"value": false
},
{
"type": "CONFIRM",
"value": false
},
{
"type": "NEED_CONFIRM",
"value": false
},
{
"type": "PACK",
"value": false
},
{
"type": "COPY",
"value": true
},
{
"type": "PACK_CONTROL",
"value": false
},
{
"type": "UNPACK",
"value": false
},
{
"type": "SHIPPING",
"value": false
},
{
"type": "UNSHIPPING",
"value": false
},
{
"type": "REFRESH_RESERVE",
"value": false
},
{
"type": "RETURN_TO_DELIVERY",
"value": true
},
{
"type": "REVERT_RETURNS",
"value": false
},
{
"type": "DELIVER_SELF_PICKUP",
"value": false
},
{
"type": "DELIVER_COURIER",
"value": false
},
{
"type": "ACCEPT_RETURN",
"value": false
}
],
"fieldPermissions": [
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "ITEMS_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "PAYMENT_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "IS_PAID_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "RECEIVER_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "DELIVERY_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "WAREHOUSE_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "COMMENTS_EDITABLE",
"value": false
},
{
"type": "OPERATOR_COMMENTS_EDITABLE",
"value": true
}
],
"infoStatus": "ORDER_INFO_DELIVERED"
},
"plannedTakeOutDate": "2022-05-31 09:00:00",
"readyForFFExport": true,
"shortUrl": "http://r.kak2c.ru/yr99em9",
"status": "ORDER_INFO_DELIVERED",
"summaryItemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"totalOrderSum": 8857.00,
"updateTs": "2022-05-30 14:29:35.964",
"warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
"warehouseFFExportError": false,
"warehouseFFExported": false,
"warehouseFFSync": false,
"warehouseName": "BR_K",
"warehouseShippingOptions": {}
},
{
"c": "451dd9fc-9347-e7e4-c51d-e7842d870e40",
"codPayments": [
{
"date": "2022-05-31 12:22:16",
"executionTime": "2022-05-31 13:15:00",
"paymentDocumentId": "BR0255-1",
"sum": 5486.00
}
],
"comment": "",
"confirmStatus": "APPROVED",
"createTs": "2022-05-31 12:22:16.171",
"crossdockEditable": false,
"currency": "RUB",
"customerPaymentInProcess": false,
"date": "2022-05-31 12:21:38",
"delivery": {
"address": {
"city": "Краснодар",
"cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Краснодарский, Краснодар",
"rawData": "Краснодарский, Краснодар",
"region": "Краснодарский",
"regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
"zip": "350016"
},
"code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
"deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
"deliveryComment": "",
"desiredDeliveryDate": "2022-06-02",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"isDeliverySumLimitActive": false,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
"pickupPointId": "2302-060",
"pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 2302-060, Адрес пункта выдачи: Карякина ул, д.25, График работы: Пн-Пт 10:00-20:00, Сб 10:00-17:00, Описание пункта выдачи: Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
"pvzInfo": {
"address": {
"city": "Краснодар",
"cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Карякина ул, д.25",
"region": "Краснодарский",
"regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
"zip": "350016"
},
"code": "2302-060",
"courier": "PickPoint",
"courierCode": "PICKPOINT",
"courierPostamatType": "ПВЗ",
"deliveryServices": [
"TRYING",
"DANGEROUS_CARGO",
"PARTIAL_DELIVERY",
"PERSONALLY_IN_HANDS",
"REVERSE",
"CHECK_CONTENT",
"DAY_OFF_DELIVERY",
"CONTACTLESS_DELIVERY",
"TEMPERATURE_REGIME"
],
"description": "Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
"latitude": "45.065947",
"longitude": "39.010823",
"maxSize": "180",
"maxWeight": 15,
"metroStation": "",
"paymentMethods": [
"COD_CASH",
"COD_CARD"
],
"type": "PVZ",
"workTime": "Пн-Пт 10:00-20:00, Сб 10:00-17:00"
},
"receiver": {
"address": {
"city": "Краснодар",
"cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
"country": "Россия",
"countryCode": "RU",
"fullAddress": "Краснодарский, Краснодар",
"rawData": "Краснодарский, Краснодар",
"region": "Краснодарский",
"regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
"zip": "350016"
},
"alternativePhone": "",
"email": "mer@mer.mer",
"fullName": "Цу Йцу",
"name": "цу йцу",
"passport": {},
"personType": "CUSTOMER",
"phone": "74563464645",
"rawPhone": "74563464645"
},
"title": "PickPoint",
"trackingNumber": "222",
"type": "PVZ"
},
"expenses": [],
"externalId": "BR0255",
"files": [],
"id": "BR0255",
"insuranceSum": 548.60,
"insuranceSumAutoCalculation": false,
"isMarketplaceOrder": false,
"items": [
{
"barcode": "4211125570354",
"itemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"itemDimensions": {
"depth": 17,
"height": 7,
"width": 23
},
"itemWeight": 167,
"name": "Маникюрно-педикюрный набор Beurer MP62 белый",
"num": 1,
"price": 5000.00,
"productId": "1047872",
"productVariantCount": 1,
"quantity": 1,
"quantityAvailable": 0,
"skuType": "SKU",
"variantId": "1047872",
"vatRate": "VAT_20"
},
{
"barcode": "",
"name": "Доставка",
"num": 2,
"price": 486.00,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"legalEntity": {
"id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
"name": " Розничный покупатель",
"type": "PERSON"
},
"manualDiscount": {
"appliedDiscountValue": 0,
"discountType": "FIX",
"discountValue": 0,
"isActive": false
},
"needCustomerPayment": false,
"needReserve": true,
"onlinePaymentSum": 5486.00,
"operatorComment": "",
"orderType": "STANDARD",
"packingOptions": [],
"packings": [
{
"barcode": "202749561679",
"files": [],
"items": [
{
"accountingAttributes": [],
"barcode": "4211125570354",
"itemDimensions": {
"depth": 17,
"height": 7,
"width": 23
},
"itemWeight": 167,
"name": "Маникюрно-педикюрный набор Beurer MP62 белый",
"num": 1,
"price": 5000.00,
"productId": "1047872",
"productVariantCount": 1,
"quantity": 1,
"skuType": "SKU",
"variantId": "1047872",
"vatRate": "VAT_20"
}
],
"measurements": {
"dimensions": {
"depth": 12,
"height": 12,
"width": 12
},
"success": true,
"weight": 1000
}
}
],
"paymentMethodCode": "cod-card",
"paymentMethodName": "Оплата картой при получении",
"paymentMethodType": "COD_CARD",
"paymentStatus": "NOT_PAID",
"permissionList": {
"actionPermissions": [
{
"type": "CANCEL",
"value": false
},
{
"type": "CONFIRM",
"value": false
},
{
"type": "NEED_CONFIRM",
"value": false
},
{
"type": "PACK",
"value": false
},
{
"type": "COPY",
"value": true
},
{
"type": "PACK_CONTROL",
"value": false
},
{
"type": "UNPACK",
"value": false
},
{
"type": "SHIPPING",
"value": false
},
{
"type": "UNSHIPPING",
"value": false
},
{
"type": "REFRESH_RESERVE",
"value": false
},
{
"type": "RETURN_TO_DELIVERY",
"value": true
},
{
"type": "REVERT_RETURNS",
"value": false
},
{
"type": "DELIVER_SELF_PICKUP",
"value": false
},
{
"type": "DELIVER_COURIER",
"value": false
},
{
"type": "ACCEPT_RETURN",
"value": false
}
],
"fieldPermissions": [
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "ITEMS_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "PAYMENT_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "IS_PAID_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "RECEIVER_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "DELIVERY_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "WAREHOUSE_EDITABLE",
"value": false
},
{
"reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
"type": "COMMENTS_EDITABLE",
"value": false
},
{
"type": "OPERATOR_COMMENTS_EDITABLE",
"value": true
}
],
"infoStatus": "ORDER_INFO_DELIVERED"
},
"plannedTakeOutDate": "2022-06-01 09:00:00",
"readyForFFExport": true,
"shortUrl": "http://r.kak2c.ru/h5llc00",
"status": "ORDER_INFO_DELIVERED",
"summaryItemAmountState": {
"amountDELIVERED": 1,
"amountLOST": 0,
"amountORDERED": 1,
"amountPACKED": 1,
"amountRESERVED": 1,
"amountRETURNED": 0,
"amountRETURNED_AS_CLAIMS": 0,
"amountRETURNED_DEFECTIVE": 0,
"amountRETURNED_TO_CLIENT": 0,
"amountSHIPPED": 1
},
"totalOrderSum": 5486.00,
"updateTs": "2022-05-31 13:13:34.341",
"warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
"warehouseFFExportError": false,
"warehouseFFExported": false,
"warehouseFFSync": false,
"warehouseName": "BR_K",
"warehouseShippingOptions": {}
}
],
"recordsTotal": 2,
"success": true
}
/api/lite/orders/discounts
Добавить скидку для заказа
/api/lite/orders/discounts
Позволяет добавить промокод или фиксированную скидку ко всему заказу в процентах или сумме
Поле | Тип / формат | Описание |
id | string | Идентификатор заказа |
promocode |
string | Промокод |
manualDiscount
|
object | Объект, описывающий скидку |
isActive
|
boolean | Флаг активности промокода |
discountType |
enum | Тип скидки |
FIX | Фиксированная | |
PERCENT | в процентах | |
discountValue
|
double | Сумма скидки или процент |
Пример запроса:
{
"id": "2502-124471",
"promocode": "",
"manualDiscount": {
"isActive": true,
"discountType": "FIX",
"discountValue": "1000"
}
}
Ответ:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Поставка на склад (Заказы поставщику)
/api/lite/purchase_orders
Запрос списка поставок на склад (заказов поставщиков)
/api/lite/purchase_orders
Метод возвращает список заказов с заданной фильтрацией.
Можно использовать как для получения списка, так и единичного заказа.
Фильтрация
Для фильтрации есть следующие возможности:
- id - по номеру заказа
- filter_states - по статусам заказов (можно указывать несколько через зяпятую)
- filter_external_id, filter_external_id_2, filter_external_id_3, filter_external_id_4, filter_external_id_5 - по внешним идентификаторам
- date_from - по дате заказа, от. формат: 2020-02-19T12:35:31
- date_to - по дате заказа, до
- updated_from - по дате/времени изменения. формат: 2020-02-19T12:35:31. Не суммируется с другими параметрами фильтрации
- supllier_id - по id поставщика
- consignor_id - по id грузоотправителя
- date_of_accept_from - по фактической дате приемки, от. формат 2020-02-19T12:35:31
- date_of_accept_to - по фактической дате приемки, до. формат 2020-02-19T12:35:31
- arrival_date_from - по фактической дате прибытия поставки на склад, от. формат 2020-02-19T12:35:31
- arrival_date_to - по фактической дате прибытия поставки на склад, до. формат 2020-02-19T12:35:31
- statuses - список статусов поставки через запятую
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/orders?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Сортировка
Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.
Пример сортировки по дате (возрастание): /api/lite/orders?order=date+asc
Пример сортировки по дате (убывание): /api/lite/orders?order=date+desc
Доступные коды сортировки:
- date (дата заказа)
- id (номер заказа)
По умолчанию используется сортировка по дате заказа по убыванию.
Полный комплект данных по заказам будет передан только если в запросе будет параметр full_info=true
Точечное описание некоторых полей, которые возвращает запрос по поставкам
purchaseArrivalDate формат 2021-04-02 15:50:48.032 | фактическая дата прихода поставки на склад |
finishlDate формат 2021-04-02 15:50:48.032 | фактическая дата закрытия поставки |
date формат 2021-04-02 15:50:48.032 | дата создания поставки в лк Кактус |
status | статус поставки |
supplier | объект, содержит информацию о поставщике |
consignor | объект, содержит информацию о грузоотправителе |
files | список объектов, содержит информацию о файлах в поставке |
warehouseName | название склада |
warehouseCode | код склада |
comment | комментарий к поставке |
Пример запроса по одному заказу и полными данными:
GET api/lite/purchase_orders?id=1001&full_info=true
Пример результата запроса
{
"success":true,
"recordsTotal":1,
"purchaseOrders":[
{
"id":"1001",
"externalId":"extId",
"externalId2":"extId2",
"externalId3":"extId3",
"externalId4":"extId4",
"externalId5":"extId5",
"date":"2021-04-02 15:50:41",
"updateTs":"2021-04-02 15:50:48.032",
"status":"COMPLETED",
"totalOrderSum":0,
"comment":"",
"totalQuantity":100,
"supplier":{
"id":"da1686cf-0551-db1d-57b9-c04120309fae",
"type":"PERSON",
"role":null,
"name":"Розничный покупатель",
"organization":null,
"person":{
"name":"",
"surname":"",
"patronymic":"",
"fullName":"Розничный Покупатель",
"phone":"",
"rawPhone":null,
"alternativePhone":"",
"email":null,
"post":null,
"personType":null,
"address":{
"country":null,
"countryCode":null,
"region":null,
"area":null,
"city":null,
"settlement":null,
"street":null,
"house":null,
"block":null,
"building":null,
"flat":null,
"fullAddress":null,
"fullCity":null,
"rawData":null,
"zip":null,
"regionFias":null,
"areaFias":null,
"cityFias":null,
"settlementFias":null
}
}
},
"consignor":{
"id":"11430b37-7f78-1202-f6cf-e4b460d81aca",
"name":"АО \"АРМАДИЛЛО БИЗНЕС ПОСЫЛКА\"",
"organization":{
"address":{
"area":"ГОРОД МОСКВА",
"block":"",
"building":"СТРОЕНИЕ 1",
"city":"ГОРОД МОСКВА",
"country":"Russia",
"countryCode":"RU",
"flat":"",
"fullAddress":"",
"fullCity":"ГОРОД МОСКВА",
"house":"16",
"rawData":"",
"region":"ГОРОД МОСКВА",
"settlement":"",
"street":"УЛИЦА ДОКУКИНА",
"zip":"129226"
},
"fullName":"АКЦИОНЕРНОЕ ОБЩЕСТВО \"АРМАДИЛЛО БИЗНЕС ПОСЫЛКА\"",
"id":"c9066ce2-307b-23db-f22a-f1dcc3742f77",
"inn":"7713215523",
"kpp":"771601001",
"name":"АО \"АРМАДИЛЛО БИЗНЕС ПОСЫЛКА\"",
"ogrn":"1027739074142",
"orgLegalType":"COMPANY",
"phones":"",
"postalAddress":{
}
},
"type":"COMPANY"
},
"items":[
{
"accountingAttributes":[
{
"code":"chestnyznak",
"n":854,
"stringValue":"0104064196826017215uHGtegWyMT;<9100BE92w1NTVrrKUOM1Z2waUb04Nt9Ifc+WOJDV9+fQqtZxZf9D8UssJBIsmx/AVzOP9"
},
{
"code":"chestnyznak",
"n":852,
"stringValue":"0104064196826017215vhGSFBRSK.r69100BE928MYt2IiDvRzfF1HcG9QxbuwtckYc6d5NlzTwweRuKGVM3tyq+1vx35aKDFhsN"
}
],
"article":"1-1-22407-20-508",
"barcode":"4164196826017",
"num":1,
"variantId":"1001",
"productId":"1001",
"name":"товар тест 3",
"quantity":100,
"quantityFact":100,
"quantityRaw":100,
"quantityDefective":0,
"vatRate":"NO_VAT",
"price":0,
"img":"https://storage.yandexcloud.net/images-k2c/05d7a992-1c61-4f39-87c6-1401405055e2.jpg",
"skuType":"SKU",
"barcode":"",
"orderDocId":"5703-1013",
"batchAccountingAttributes":{
"useBatchAccounting":true,
"useExpiration":true,
"expirationDate":"2022-12-01",
"productionDate":"2021-01-01",
"expirationDaysLimit":20,
"expirationDays":500,
"batchAccountingNumber":"abcd-01",
"manufacturer":"ООО Полёт",
"manufacturerRequisites":"ИНН: 123456789"
}
}
],
"files":[
{
"id":"43f79bac-0d82-2d82-f11d-abd1a53b26a0",
"fileType":"PDF",
"fileSource":"FULFILLMENT",
"fileName":"МХ1",
"fileExt":"pdf",
"url":"https://yadi.sk/d/BzKXkRigQZtVnB",
"printWhenPacking":true,
"copiesQty":1
}
],
"warehouseName":"Свой склад",
"warehouseCode":"373b1e28-a6d7-545f-9303-65af3a652d48",
"confirmStatus":"APPROVED",
"warehouseFFExported":false,
"warehouseFFSync":false,
"currency":"RUB"
}
]
}
Пример запроса по списку поставок:
GET /api/lite/purchase_orders
Пример результата запроса:
{
"success": true,
"recordsTotal": 2,
"purchaseOrders": [
{
"id": "1001",
"externalId": "extId",
"externalId2": "extId2",
"externalId3": "extId3",
"externalId4": "extId4",
"externalId5": "extId5",
"date": "2021-04-02 15:50:41",
"updateTs": "2021-04-02 15:50:48.032",
"status": "COMPLETED",
"totalOrderSum": 0,
"comment": "",
"totalQuantity": 100,
"supplier": {
"id": "da1686cf-0551-db1d-57b9-c04120309fae",
"type": "PERSON",
"role": null,
"name": "Розничный покупатель",
"organization": null,
"person": {
"name": "",
"surname": "",
"patronymic": "",
"fullName": "Розничный Покупатель",
"phone": "",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": null,
"personType": null,
"address": {
"country": null,
"countryCode": null,
"region": null,
"area": null,
"city": null,
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": null,
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
}
},
"items": [
{
"num": 1,
"variantId": "1001",
"productId": "1001",
"name": "товар тест 3",
"quantity": 100,
"quantityFact": 100,
"quantityRaw": 100,
"quantityDefective": 0,
"vatRate": "NO_VAT",
"price": 0,
"img": "https://storage.yandexcloud.net/images-k2c/05d7a992-1c61-4f39-87c6-1401405055e2.jpg",
"skuType": "SKU",
"barcode": "",
"orderDocId": "5703-1013"
}
],
"files": [
{
"id": "43f79bac-0d82-2d82-f11d-abd1a53b26a0",
"fileType": "PDF",
"fileSource": "FULFILLMENT", //ESHOP | USER
"fileName": "МХ1",
"fileExt": "pdf",
"url": "https://yadi.sk/d/BzKXkRigQZtVnB",
"printWhenPacking": true,
"copiesQty": 1
}
],
"warehouseName": "Свой склад",
"warehouseCode": "373b1e28-a6d7-545f-9303-65af3a652d48",
"confirmStatus": "APPROVED",
"warehouseFFExported": false,
"warehouseFFSync": false,
"currency": "RUB"
},
{
"id": "1002",
"date": "2021-04-03 15:50:41",
"updateTs": "2021-04-02 15:50:48.032",
"status": "COMPLETED",
"totalOrderSum": 0,
"comment": "",
"totalQuantity": 100,
"supplier": {
"id": "da1686cf-0551-db1d-57b9-c04120309fae",
"type": "PERSON",
"role": null,
"name": "Розничный покупатель",
"organization": null,
"person": {
"name": "",
"surname": "",
"patronymic": "",
"fullName": "Розничный Покупатель",
"phone": "",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": null,
"personType": null,
"address": {
"country": null,
"countryCode": null,
"region": null,
"area": null,
"city": null,
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": null,
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
}
},
"items": [
{
"num": 1,
"variantId": "1001",
"productId": "1001",
"name": "товар тест 3",
"quantity": 100,
"quantityFact": 100,
"quantityRaw": 100,
"quantityDefective": 0,
"vatRate": "NO_VAT",
"price": 0,
"img": "https://storage.yandexcloud.net/images-k2c/05d7a992-1c61-4f39-87c6-1401405055e2.jpg",
"skuType": "SKU",
"barcode": ""
}
],
"files": [
{
"id": "43f79bac-0d82-2d82-f11d-abd1a53b26a0",
"fileType": "PDF",
"fileSource": "FULFILLMENT", //ESHOP | USER
"fileName": "МХ1",
"fileExt": "pdf",
"url": "https://yadi.sk/d/BzKXkRigQZtVnB",
"printWhenPacking": true,
"copiesQty": 1
}
],
"warehouseName": "Свой склад",
"warehouseCode": "373b1e28-a6d7-545f-9303-65af3a652d48",
"confirmStatus": "APPROVED",
"warehouseFFExported": false,
"warehouseFFSync": false,
"currency": "RUB"
}
]
}
Возможные статусы заказа:
NEW
READY_TO_TAKE_IN
TAKE_IN_PROCESS
COMPLETED
COMPLETED_WITH_DIFFERENCE
DIFFERENCE
CANCELED
Создание/редактирование поставки (заказа поставщику)
/api/lite/purchase_orders
Создание/редактирование заказа для кабинета.
Если указан параметр id - то система будет пробовать найти заказ с указанным номером и отредактировать его, иначе - создаст новый с указанным id.
Если параметр id не указан - система создаст новый заказ и присвоит внутренний номер.
Поле | Тип | Обязательный | Комментарий |
warehouseCode | string | да | Код склада на который будет поставка, из справочника складов аккаунта |
supplier | Объект | да | Данные о поставщике из справочника контрагентов аккаунта |
supplier.id | string | да |
Код контрагента-поставщика из справочника контрагентов аккаунта. |
consignor | Объект | нет | Данные о грузоотправителе из справочника контрагентов аккаунта |
consignor.id | string | нет | Код контрагента-грузоотправителя из справочника контрагентов аккаунта |
items | Объект | да | Список позиций поставки |
items.num | integer | да | Номер строки (последовательно с 1, без пропусков) |
items.quantity | integer | да | Количество товара (более 0) |
items.price | money | да | Цена за шт |
items.vatRate |
enum Значения: NO_VAT, VAT_0, VAT_10, VAT_20 |
да | Ставка НДС |
items.variantId | string | да (если настроен поиск по этому полю) | Код товара в аккаунте |
items.variantExtId | string | да (если настроен поиск по этому полю) | Внешний код товара в аккаунте |
searchColumnType | enum: HUMANID - дефолтный, можно не передавать, если не требуется другой, EXTID, ARTICLE, BARCODE |
Обязательный, если нужен поиск не по variantId | |
items.orderDocId | string | нет | Для согласованных кроссдок поставок - номер привязанного заказа |
items.batchAccountingAttributes | Объект | нет | Атрибуты партии для данного товара |
confirmStatus |
enum CANCELED |
нет | Статус подтверждения. Только если статус = APPROVED - поставка выгружается на склад для приемки. |
comment | string | нет | Комментарий к поставке для склада |
dateOfDeliveryPlan | DateTime | нет | Ориентровочная дата поступления поставки |
externalId - externalId5 | string | нет | Внешние коды поставки из клиенстких систем |
Пример запроса:
{
"id": "1001",
"items": [
{
"num": 1,
"variantId": "demo1024",
"productId": "demo1006",
"productExtId": null,
"name": "Компьютер (демо товар) ",
"quantity": 3,
"price": 20000,
"vatRate": "NO_VAT",
"orderDocId": "5703-1013",
"batchAccountingAttributes": {
"useBatchAccounting": true,
"useExpiration": true,
"expirationDate": "2022-12-01",
"productionDate": "2021-01-01",
"expirationDaysLimit": 20,
"expirationDays": 500,
"batchAccountingNumber": "abcd-01",
"manufacturer": "ООО Полёт",
"manufacturerRequisites":"ИНН: 123456789"
}
}
],
"warehouseCode": "373b1e28-a6d7-545f-9303-65af3a652d48",
"supplier": {
"id": "da1686cf-0551-db1d-57b9-c04120309fae"
},
"dateOfDeliveryPlan": "2021-10-08 00:00:00",
"comment": "",
"confirmStatus": "APPROVED",
"externalId": "extId",
"externalId2": "extId2",
"externalId3": "extId3",
"externalId4": "extId4",
"externalId5": "extId5"
}
В ответ возвращается:
{
"success": true,
"orderId": "111",
"c": "2b92b631-7f1b-c52a-897e-30bc628f87e5"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/purchase_orders/history
Получение истории по заказу поставщика
/api/lite/purchase_orders/history
Возвращает историю событий по указанному заказу.
Обязательный параметр: id заказа
Пример ответа:
{
"success": true,
"events": [
{
"type": "Документы",
"subType": "Изменения заказа",
"orderDocStage": "Новый",
"eventDate": "2020-01-31 10:12:51.128",
"description": "",
"changeSource": "Пользователь",
"userLogin": "sale@djbag.ru-expert",
"id": "f258808b-a3ee-ccf6-9d1b-30198f94166c",
"level": "INFO",
"eventParameters": null
},
{
"type": "Документы",
"subType": "Изменения заказа",
"orderDocStage": "Новый",
"eventDate": "2020-01-31 10:35:55.144",
"description": "",
"changeSource": "Пользователь",
"userLogin": "sale@djbag.ru-expert",
"id": "94dc3974-f558-239f-c1c4-72b2906120c4",
"level": "INFO",
"eventParameters": null
}
]
}
/api/lite/purchase_orders/confirm
Заказ - подтверждение
/api/lite/purchase_orders/confirm
Проставление статуса Подтверждения у заказа.
Пример запроса:
{
"id":"1234",
"confirmStatus": "APPROVED" // HOLD/CANCELED/NEED_CONFIRM
}
В ответ возвращается
Успех:
{
"success": true,
"confirmStatus": "APPROVED" // HOLD/CANCELED
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/purchase_orders/accept_diff
Заказ - подтверждение
/api/lite/purchase_orders/accept_diff
Проставление флага согласия с рахождениями приемки
Пример запроса:
{
"id":"1234",
"accept": true // false
}
В ответ возвращается
Успех:
{
"success": true,
"accept": true // false
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/purchase_orders/set_in_process
Заказ - вернуть в обработку (свой склад)
/api/lite/purchase_orders/set_in_process
Для принятого или отмененного заказа - вернуть на приемку. Убирает с хранения все ранее принятые позиции
Пример запроса:
{
"id":"1234"
}
В ответ возвращается
Успех:
{
"success": true,
"id":"1234"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/purchase_orders/completed
Заказ - завершить приемку (свой склад)
/api/lite/purchase_orders/set_in_process
Для заказа по своему складу где есть ранее сформированный приходный ордер - завершает его приемку и добавляет товар на хранение
Пример запроса:
{
"id":"1234"
}
В ответ возвращается
Успех:
{
"success": true,
"id":"1234"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/purchase_orders/items/fact
Заказ - задать число принятых товаров (свой склад)
/api/lite/purchase_orders/items/fact
Для заказа на своем складе - простановка количества товаров в приемке перед закрытием
Пример запроса:
{
"id": "1005",
"items": [
{
"num": 1,
"variantId": "1003",
"quantityRaw": 2,
"vatRate": "NO_VAT",
"price": 123
},
{
"num": 2,
"variantId": "1000",
"quantityRaw": 3,
"vatRate": "NO_VAT",
"price": 123
}
]
}
В ответ возвращается
Успех:
{
"success": true,
"id": "1005"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/purchase_orders/file
/api/lite/purchase_orders/file
Добавляет файл к заказу.
Параметры передаются как form-data:
upfile | Файл для загрузки |
id | Идентификатор заказа (humanId) |
print_when_packing | Печатать при упаковке |
copies_qty | Кол-во копий |
Пример ответа:
{
"success": true,
"id": "b233372d-cf7b-f07b-446b-128912be7c8a",
"fileType": "JPG",
"fileName": "IMG_20200822_101244",
"fileSource": "USER", //ESHOP | FULFILLMENT
"fileExt": "jpg",
"url": "https://storage.yandexcloud.net/order-files-kak2c/d0f03942-8d75-4456-93af-42ec518ef0a9.jpg",
"printWhenPacking": false,
"copiesQty": 1
}
/api/lite/purchase_orders/file
Удаляет файл
В параметре id передается идентификатор файла.
Пример запроса:
DELETE https://app.kak2c.ru/api/lite/purchase_orders/file?id=b233372d-cf7b-f07b-446b-128912be7c8a
Пример ответа:
{
"success": true
}
/api/lite/purchase_orders/file/edit
/api/lite/purchase_orders/file/edit
Пример запроса:
{
"id": "b9e3efdd-455e-af10-996f-2cf6f03d9775",
"copiesQty": 2,
"printWhenPacking": true
}
Пример ответа:
{
"success": true
}
/api/lite/purchase_orders/history/status
Получение истории смены статусов по заказу поставщика
/api/lite/purchase_orders/history/status
Возвращает историю смены статуса по указанному заказу поставщика
Обязательный параметр: id заказа
Пример ответа:
{
"items": [
{
"date": "2023-07-18 12:31:13.960",
"infoStatus": "COMPLETED"
},
{
"date": "2023-07-18 12:31:09.973",
"infoStatus": "TAKE_IN_PROCESS"
},
{
"date": "2023-07-18 12:30:19.438",
"infoStatus": "READY_TO_TAKE_IN"
},
{
"date": "2023-07-18 12:29:58.319",
"infoStatus": "TAKE_IN_PROCESS"
},
{
"date": "2023-07-18 12:29:48.458",
"infoStatus": "COMPLETED_WITH_DIFFERENCE"
},
{
"date": "2023-07-18 12:29:36.275",
"infoStatus": "TAKE_IN_PROCESS"
},
{
"date": "2023-07-18 12:29:29.321",
"infoStatus": "READY_TO_TAKE_IN"
},
{
"date": "2023-07-18 12:29:28.835",
"infoStatus": "TAKE_IN_PROCESS"
},
{
"date": "2023-07-18 12:29:00.708",
"infoStatus": "READY_TO_TAKE_IN"
},
{
"date": "2023-07-18 12:28:37.077",
"infoStatus": "COMPLETED"
},
{
"date": "2023-07-18 12:28:31.183",
"infoStatus": "TAKE_IN_PROCESS"
},
{
"date": "2023-07-18 12:01:48.748",
"infoStatus": "READY_TO_TAKE_IN"
}
],
"success": true
}
Отгрузка заказов
/api/lite/pickup_dates
Информация о возможных датах приезда курьера
/api/lite/pickup_dates
Возвращает информацию о ближайших возможных датах приезда курьера в указанный период.
Запрос:
Параметр | Тип\формат | Описание |
from |
date | Дата, начиная с которой идет поиск плановых дат приезда курьера. Включительно. |
to |
date |
Дата, по которую идет поиск плановых дат приезда курьера. Включительно. |
Результат запроса:
Параметр | Тип\формат | Описание |
dates |
array |
Массив dates содержит только даты, в которые можно запланировать приезд курьера. |
Пример результата запроса:
{
"success": true,
"dates": [
{
"date":"2019-01-09",
"planned": true,
"intervals":[
{
"readableTimeInterval": "Весь день",
"startDateTime": "2018-02-22T09:00:00",
"startTimeHour": 9,
"startTimeMinute": 0,
"finishDateTime": "2018-02-22T18:00:00",
"finishTimeHour": 18,
"finishTimeMinute": 0,
"planned": true
},
{
"readableTimeInterval": "9 - 14",
"startDateTime": "2018-02-22T09:00:00",
"startTimeHour": 9,
"startTimeMinute": 0,
"finishDateTime": "2018-02-22T14:00:00",
"finishTimeHour": 14,
"finishTimeMinute": 0,
"planned": false
}
]
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pickup_dates/planned
Информация о запланированных датах приезда курьера
/api/lite/pickup_dates/planned
Возвращает информацию о всех запланированных датах приезда курьера - как будущих так и прошлых.
Результат отсортирован по датам начиная с самой свежей.
Результат запроса:
{
"success": true,
"dates": [
{
"date":"2019-01-09",
"planned": true,
"intervals":[
{
"readableTimeInterval": "Весь день",
"startDateTime": "2018-02-22T09:00:00",
"startTimeHour": 9,
"startTimeMinute": 0,
"finishDateTime": "2018-02-22T18:00:00",
"finishTimeHour": 18,
"finishTimeMinute": 0,
"planned": true
},
{
"readableTimeInterval": "9 - 14",
"startDateTime": "2018-02-22T09:00:00",
"startTimeHour": 9,
"startTimeMinute": 0,
"finishDateTime": "2018-02-22T14:00:00",
"finishTimeHour": 14,
"finishTimeMinute": 0,
"planned": false
}
]
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/takeout_list
Получение перечня реестров отгрузки
/api/lite/takeout_list
Возвращает информацию о созданных реестрах отгрузки по данному клиенту.
Запрос:
Параметр
|
Тип\формат | Описание |
date_from |
date | Дата, начиная с которой идет поиск реестров. Включительно. (необязательный) |
date_to |
date |
Дата, по которую идет поиск реестров. Включительно. (необязательный) |
id | String | Номер конкретного реестра (необязательный) |
page | Integer | Страница (необязательный) |
size | Integer | Число элементов на странице (необязательный) |
order | String | Поле для сортировки (необязательный) |
Результат запроса:
{
"success": true,
"recordsTotal": 59,
"takeoutLists": [
{
"id": "1069",
"date": "2020-04-16 22:34:30",
"updateTs": "2020-04-16 23:21:03.435",
"status": "SHIPPED",
"orders": [
{
"id": "3318-1166",
"date": "2020-04-11",
"customer": "Караваева Елена Олеговна"
}
],
"takeoutDate": "2020-05-10",
"takeoutHourStart": "14:00",
"takeoutHourEnd": "18:00",
"gatherTrackingNum": "100065493",
"gatherType": "COURIER", // SELF_PICKUP
"gatherStatus": "AWAITING_CARGO", //CREATED, CARGO_SHIPPED, HOLD, CANCELED
"warehouseName": "Свой склад",
"warehouseCode": "776069fa-f578-9ceb-e773-db7b89968b5f",
"deliveryCode": "ae12b4f1-c8e5-aa52-0a68-9d102d4624fe",
"deliveryTitle": "Global Delivery",
"gatherType": "COURIER",
"comment": "комментарий",
"availableForChanges": false,
"warehouseManager": {
"name": "Склада",
"surname": "Менеджер",
"patronymic": "",
"fullName": "Осман Идракович Кишиев ",
"phone": "+79264642812",
"rawPhone": "+7 (926) 464 28 12",
"alternativePhone": "",
"email": "Info@mossmore.ru",
"post": null,
"personType": null
}
},
{
"id": "1067",
"date": "2020-04-11 17:00:09",
"updateTs": "2020-04-11 17:46:35.009",
"status": "SHIPPED",
"orders": [
{
"id": "3318-1167",
"date": "2020-04-12",
"customer": "Караваева Елена Олеговна"
}
],
"takeoutDate": "2020-05-10",
"takeoutHourStart": "09:00",
"takeoutHourEnd": "14:00",
"gatherTrackingNum": "100065493",
"gatherType": "COURIER",
"gatherStatus": "AWAITING_CARGO",
"warehouseName": "Свой склад",
"warehouseCode": "776069fa-f578-9ceb-e773-db7b89968b5f",
"deliveryCode": "ae12b4f1-c8e5-aa52-0a68-9d102d4624fe",
"deliveryTitle": "Global Delivery",
"gatherType": "COURIER",
"warehouseManager": {
"name": "Склада",
"surname": "Менеджер",
"patronymic": "",
"fullName": "Осман Идракович Кишиев ",
"phone": "+79264642812",
"rawPhone": "+7 (926) 464 28 12",
"alternativePhone": "",
"email": "Info@mossmore.ru",
"post": null,
"personType": null
}
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Создание/редактирование реестра отгрузки
/api/lite/takeout_list
Создает или редактирует (при наличии параметра id) реестр отгрузки
Пример запроса:
{
"id": "1069",
"orders": [
{
"id": "3318-1166"
},
{
"id": "3318-1167"
}
],
"takeoutDate": "2020-05-10",
"takeoutHourStart": "14:00",
"takeoutHourEnd": "18:00",
"warehouseName": "Свой склад",
"warehouseCode": "776069fa-f578-9ceb-e773-db7b89968b5f",
"gatherType": "COURIER",
"comment": "комментарий"
}
Результат:
{
"success": true,
"id": "1069"
"errors": []
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Удаление/отмена реестра отгрузки
/api/lite/takeout_list
Отменяет реестр отгрузки, все отправления в нем исключаются из реестра.
Пример запроса:
{
"id": "1069"
}
Результат:
{
"success": true,
"id": "1069",
"errors": []
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Получение ошибок выгрузки по реестру отгрузки
/api/lite/takeout_list/commit-errors
Параметр: id реестра
Результат:
{
"success": true,
"id": "1069",
"warnings": [
"3318-1167: Некорректные данные получателя"
]
"errors": []
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/takeout_list/print
Получение печатной формы реестра отгрузки
/api/lite/takeout_list/print
/api/lite/takeout_list/print?id=[ид отгрузки]&form=act
Получение печатной формы в pdf для указанного реестра отгрузки
Параметры: id - номер реестра
form - вид печатной формы, по умолчанию "act"
Например:
/api/lite/takeout_list/print?id=1234&form=act
Печатная форма возвращается в формате base64.
Успех:
{
"success": true,
"content" : "base64data"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Настройки аккаунта
/api/lite/pub/settings/checkout
Получение настроек работы виджета чекаута (публичный)
/api/lite/pub/settings/checkout
Метод возвращает настройки виджета чекаута
В ответ возвращается
Успех:
{
"success": true,
"freeDeliveryAmount": 400.00,
"freeDeliveryRegion": "RU", // RU_SNG, ALL
"findByExtID": false,
"paymentMethods": [
{
"code": "no-cod",
"name": "Предоплата",
"method": "NO_COD",
"isDiscountActive": true,
"discountType": "PERCENT",
"discountValue": 10,
"minApplyValue": 1000
},
{
"code": "cod-card",
"method": "COD_CARD",
"name": "Оплата картой курьеру",
"isDiscountActive": false
},
{
"code": "cod-cash",
"method": "COD_CASH",
"name": "Оплата наличными курьеру",
"isDiscountActive": false,
"discountType": "FIX",
"discountValue": 50
}
],
"promocodesAllowed": true,
"defaultVAT": "VAT_20",
"uiRequiredFields": [
"PHONE",
"EMAIL"
],
"onlySufficientOffers": true,
"paymentProvider": "PAYU", // "YANDEX", "ROBOKASSA"
"policyCheckEnabled": true,
"personalInfoPolicyLink": "http://example.link",
"confidentialPolicyLink": "http://example.link",
"country": "RU",
"currency": "RUB",
"successRedirectUrl": "http://example.link",
"customersRegistrationEnabled": false,
"showConsentToNewsletter": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/organization
Получение настроек организации аккаунта
/api/lite/settings/organization
Пример ответа:
{
"success": true,
"organization": {
"success": true,
"inn": "123",
"ogrn": "123",
"kpp": "1213",
"bik": "123",
"bankName": "ПАО Сбербанк",
"bankAccountNum": "123",
"bankCorrNum": "123",
"name": "ООО «Продакшн»",
"fullName": "Общество с ограниченной ответственностью «Продакшн»",
"phones": "234343",
"email": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "ул один",
"house": "4Б",
"block": "",
"building": "",
"flat": null,
"fullAddress": "Москва, ул один, д 4Б",
"fullCity": null,
"rawData": null,
"zip": "117405",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"postalAddress": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "ул один",
"house": "4Б",
"block": "",
"building": "",
"flat": null,
"fullAddress": "Москва, ул оодин, д 4Б",
"fullCity": null,
"rawData": null,
"zip": "117405",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"persons": [
{
"name": null,
"surname": null,
"patronymic": null,
"fullName": "Ирина Борисовна Мельник",
"phone": "",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": "Генеральный директор",
"personType": "CHIEF"
},
{
"name": null,
"surname": null,
"patronymic": null,
"fullName": "",
"phone": "",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": "",
"personType": "DELIVERY_RESPONSIBLE"
}
],
"shopUrl": "http://theroadwear.com/",
"vat": -1,
"needFulfillment": true,
"archiveUrl": "",
"orgLegalType": "ZAO",
"orgRegisterDate": "2005-01-01",
"equalAddresses": true
}
}
Редактирование настроек организации аккаунта
/api/lite/settings/organization
Пример запроса:
{
"organization": {
"inn": "12345",
"ogrn": "6789",
"kpp": "66666",
"bik": "777777",
"bankName": "ПАО СБЕРБАНК г. Москва",
"bankAccountNum": "12345",
"bankCorrNum": "6789",
"name": "My Shop",
"fullName": "Индивидуальный предприниматель Иванов Иван Иванович",
"phones": "7(495)111 11 11",
"email": "info@myshop.ru",
"address": {
"country": "Russia",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Полянка",
"house": "1",
"block": "1",
"building": null,
"flat": "1",
"fullAddress": "Москва, Полянка, д 1, к 1, кв 1.",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"postalAddress": {
"country": "Russia",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Полянка",
"house": "1",
"block": "1",
"building": null,
"flat": "1",
"fullAddress": "Москва, Полянка, д 1, к 1, кв 1.",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"persons": [
{
"fullName": "Петров Петр Петрович",
"post": "ГЕНЕРАЛЬНЫЙ ДИРЕКТОР/ ГЛАВНЫЙ БУХГАЛТЕР",
"personType": "CHIEF"
},
{
"fullName": "Сидоров Иван Иванович",
"post": "",
"phone": "+79261111111",
"personType": "DELIVERY_RESPONSIBLE"
}
],
"shopUrl": "myshop.ru",
"vat": -1,
"needFulfillment": false,
"orgLegalType": "ZAO",
"orgRegisterDate": "2005-01-01",
"archiveUrl": "https://yadi.sk/d/testlink"
}
}
В ответ возвращается:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/catalog
Получение текущего основного каталога
/api/lite/settings/catalog/default
Пример успешного ответа:
{
"success": true,
"name": "Каталог 1",
"code": "1000",
"items": [
{
"title": "Смартфоны iPhone",
"code": null,
"collectionId": "1026",
"defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
"items": null
}
]
}
Получение всех каталогов пользователя
/api/lite/settings/catalog
Пример успешного ответа:
{
"success": true,
"catalogs": [
{
"success": true,
"name": "Каталог 1",
"code": "1000",
"items": [
{
"title": "Смартфоны iPhone",
"code": null,
"collectionId": "1026",
"defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
"items": null
}
]
}
]
}
Создание, Обновление каталога
/api/lite/settings/catalog
Создает/обновляет каталог по его коду.
- если указан code - загружает по этому коду каталог из базы. Иначе - создаёт новый
- анализ items из переданного dto: все упоминаемые коллекции должны существовать. иначе возвращает ошибку
- ограничение уровней вложенности на 5 уровней
Пример запроса:
{
"name": "Каталог 1",
"code": "1000",
"items": [
{
"title": "Смартфоны iPhone",
"code": "1002",
"collectionId": "1026",
"defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
"items": null
}
]
}
/api/lite/settings/checkout
Получение настроек работы виджета чекаута
/api/lite/settings/checkout
Метод возвращает настройки виджета чекаута
orderSumMoreThan - наценка/скидка применится только от суммы заказа свыше суммы параметра.
В ответ возвращается
успех:
{
"success": true,
"deliveryPremiumType": "PERCENT",
"importOrderType": "APPROVED",
"insurancePercent": 100,
"freeDeliveryAmount": null,
"freeDeliveryRegion": "RU", // RU_SNG, ALL
"ownCourierTariff": null,
"selfPickupTariff": null,
"merchantId": null,
"accountSecret": null,
"ipnUrl": null,
"additionalIpnFailUrl": null, // только для Робокассы
"additionalIpnSuccessUrl": null, // только для Робокассы
"findByExtID": false, - режим поиска по ExtId
"defaultCity": null,
"paymentMethods": [
{
"code": "no-cod",
"name": "Предоплата",
"method": "NO_COD",
"isDiscountActive": true,
"discountType": "PERCENT",
"discountValue": 10,
"minApplyValue": 1000
},
{
"code": "cod-card",
"method": "COD_CARD",
"name": "Оплата картой курьеру",
"isDiscountActive": false
}
],
"promocodesAllowed": null,
"defaultVAT": "VAT_20",
"uiRequiredFields": [
"PHONE",
"EMAIL"
],
"onlySufficientOffers": true,
"disableCodSumInTariff": false, //Не учитывать тариф за наложку в сумме доставки
"disableInsuranceSumInTariff": false, //Не учитывать тариф за страховку в сумме доставки
"paymentProvider": "PAYU" // "YANDEX", "ROBOKASSA",
"paymentWithoutCommission": false,
"defaultDeliveryServiceOptions": { // Услуги доставки, включенные у заказа по умолчанию. Если они не заданы, поле не отображается
"GLOBAL_DELIVERY": "TRYING;PARTIAL_DELIVERY",
"PICKPOINT": "PARTIAL_DELIVERY; TRYING; CHECK_CONTENT; PERSONALLY_IN_HANDS; DANGEROUS_CARGO; VERIFY; REVERSE"
},
"commercialAccount": true,
"commercialAccountRequested": false,
"isJurClient": null,
"isPostfactumPaymentMode": null,
"isContractOk": null,
"accountantEmail": null,
"allowSNG": null,
"isSelfPpz": null,
"disableCodSumInTariff": false,
"disablePRRInTariff": false,
"cdekSelfPpz": null,
"orderSubType": null,
"catalogCode": "1000",
"defaultVAT": null,
"policyCheckEnabled": true,
"personalInfoPolicyLink": "http://example.link",
"confidentialPolicyLink": "http://example.link",
"country": "RU",
"currency": "RUB",
"successRedirectUrl": "http://example.link",
"customersRegistrationEnabled": false,
"unlockOrderDuringOnlinePayment": false,
"showConsentToNewsletter": true,
"reserveAfterPayment": true,
"showDeliveryOptions": true,
"deliveryRegionSettings": {
"commonSettings": [
{
"country": "RU",
"region": "MOSCOW",
"extraFeeFixValue": 100,
"extraFeePercentValue": 0,
"orderSumMoreThan": 22000.00,
"enabled": false,
"tariffEnabled": true
},
{
"country": "ALL",
"region": "ALL_REGIONS",
"extraFeeFixValue": 100,
"extraFeePercentValue": -50,
"orderSumMoreThan": 22000.00,
"enabled": true,
"tariffEnabled": true
},
{
"country": "SNG",
"region": "ALL_REGIONS",
"extraFeeFixValue": 100,
"extraFeePercentValue": 0,
"orderSumMoreThan": 22000.00,
"enabled": true,
"tariffEnabled": true
}
]
}
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Сохранение настроек работы виджета чекаута
/api/lite/settings/checkout
Запись/обновление настроек чекаута
Запрос:
{
"deliveryPremiumAmount": 15.3, - размер наценки в процентах, дробное число в диапазоне [-100; +бесконечность]
"deliveryPremiumFixAmount": 20 - - размер наценки в процентах, дробное число, можно применять как отдельно от deliveryPremiumAmount, так и совместно
"importOrderType": "NEED_CONFIRM", - загружать ли заказ подтверждённым? "APPROVED" | "NEED_CONFIRM"
"insurancePercent": 100, - процент от суммы товаров для расчета страховой стоимости, дробное число, в диапазоне [0; 100]
"freeDeliveryAmount": 1500, - сумма заказа для бесплатной доставки, если задана - то не менее 0
"freeDeliveryRegion": "RU", - регион действия бесплатной доставки. "RU" | "RU_SNG" | "ALL"
"ownCourierTariff": 150 - тариф на доставку своими курьерами, null -если доставки своими курьерами нет
"selfPickupTariff": 200, - тариф на самовывоз, null - если самовывоза нет
"paymentMethods": [
{
"code": "no-cod",
"name": "Предоплата",
"isDiscountActive": true,
"discountType": "PERCENT",
"discountValue": 10,
"minApplyValue": 1000
}
],
"findByExtID": true, - режим поиска по ExtId, (дублирование /api/lite/settings/offer-id-type)
"defaultCity" : "Москва",
"uiRequiredFields": ["PHONE", "EMAIL"], - перечень полей для которых чекаут должен включить обязательную валидацию непустого значения
"onlySufficientOffers": true, - флаг для запрета покупки товаров без остатков
"disableCodSumInTariff": false, //Не учитывать тариф за наложку в сумме доставки
"disableInsuranceSumInTariff": false, //Не учитывать тариф за страховку в сумме доставки
"paymentProvider": "PAYU", // "YANDEX", "ROBOKASSA" - подключенный провайдер эквайринга
"paymentWithoutCommission": false,
//необязательный параметр. Услуги доставки, включенные у заказа по умолчанию. Ключ - внешний код службы доставки, например "PICKPOINT".
//Значение - (DeliveryServiceOption) строковое перечисление с разделителем ";". Может быть переопределён, если передать значение deliveryServiceOptions в методе /api/lite/pub/order
"defaultDeliveryServiceOptions": {
"GLOBAL_DELIVERY": "TRYING;PARTIAL_DELIVERY",
"PICKPOINT": "PARTIAL_DELIVERY; TRYING; CHECK_CONTENT; PERSONALLY_IN_HANDS; DANGEROUS_CARGO; VERIFY; REVERSE"
},
"catalogCode": "1005", - номер каталога, который станет основным
"policyCheckEnabled": true,
"personalInfoPolicyLink": "http://example.link",
"confidentialPolicyLink": "http://example.link",
"country": "RU",
"currency": "RUB",
"successRedirectUrl": "http://example.link",
"customersRegistrationEnabled" : true - включение авторегистрации покупателей ,
"unlockOrderDuringOnlinePayment" : false,
"showConsentToNewsletter": true,
"reserveAfterPayment": true,
"showDeliveryOptions": true
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/counteragents
Получение перечня контрагентов
/api/lite/settings/counteragents
Возвращает перечень контрагентов по роли или по id
Параметры запроса: id - для загрузки одного контрагента. иначе загружаются все контрагенты аккаунта
extId - для загрузки одного контрагента с заданным внешним ID.
query - строка для поиска по наименованию, ИНН, ОГРН по включению
Паджинация стандартная: page, size (10 элементов по умолчанию)
примеры:
/api/lite/settings/counteragents?id=1647656c-080a-d01b-e2c4-362961f07e18
Виды контрагентов для поля role: CUSTOMER, FULFILLMENT_SERVICE, DELIVERY_SERVICE, CALLCENTER_SERVICE, PRODUCT_SUPPLIER
Пример успешного ответа:
{
"success": true,
"recordsTotal": 3,
"counteragents": [
{
"id": "c82e2616-91e7-702e-d666-320534119a13",
"extId": "externalSystemID-123",
"type": "COMPANY",
"role": "PRODUCT_SUPPLIER",
"name": " ИП Петров А.В.",
"organization": {
"id": "f23b14bf-1151-dcb5-1b25-57a2b931e3ac",
"name": "ИП Петров А.В.",
"fullName": "ИП Петров А.В.",
"phones": null,
"inn": "5018081484",
"kpp": null,
"ogrn": null,
"okpo": null,
"persons": null,
"orgLegalType": "SELF_EMPLOYED",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Новоалексеевская",
"house": "18",
"block": "3",
"building": "",
"flat": null,
"fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
"fullCity": null,
"rawData": null,
"zip": "129626",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"email": null
},
"person": null
},
{
"id": "e627aba4-bfe7-0ecf-14d8-b120233d9446",
"type": "PERSON",
"role": null,
"name": "Вано",
"organization": null,
"person": {
"name": "Вано",
"surname": "",
"patronymic": "",
"fullName": "Вано о",
"phone": "323232323232323434",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": null,
"personType": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "Барнаульская",
"house": "1",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
"fullCity": null,
"rawData": "Алтайский, Барнаул, Барнаульская, д 1",
"zip": "",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
}
}
]
}
/api/lite/settings/counteragents?extId=123-1234abc
Виды контрагентов для поля role: CUSTOMER, FULFILLMENT_SERVICE, DELIVERY_SERVICE, CALLCENTER_SERVICE, PRODUCT_SUPPLIER
Пример успешного ответа:
{
"success": true,
"recordsTotal": 3,
"counteragents": [
{
"id": "c82e2616-91e7-702e-d666-320534119a13",
"extId": "123-1234abc",
"type": "COMPANY",
"role": "PRODUCT_SUPPLIER",
"name": " ИП Петров А.В.",
"organization": {
"id": "f23b14bf-1151-dcb5-1b25-57a2b931e3ac",
"name": "ИП Петров А.В.",
"fullName": "ИП Петров А.В.",
"phones": null,
"inn": "5018081484",
"kpp": null,
"ogrn": null,
"okpo": null,
"persons": null,
"orgLegalType": "SELF_EMPLOYED",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Новоалексеевская",
"house": "18",
"block": "3",
"building": "",
"flat": null,
"fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
"fullCity": null,
"rawData": null,
"zip": "129626",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"email": null
},
"person": null
},
{
"id": "e627aba4-bfe7-0ecf-14d8-b120233d9446",
"type": "PERSON",
"role": null,
"name": "Вано",
"organization": null,
"person": {
"name": "Вано",
"surname": "",
"patronymic": "",
"fullName": "Вано о",
"phone": "323232323232323434",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": null,
"personType": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "Барнаульская",
"house": "1",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
"fullCity": null,
"rawData": "Алтайский, Барнаул, Барнаульская, д 1",
"zip": "",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
}
}
]
}
Создание/обновление контрагента
/api/lite/settings/counteragents
Создает или обновляет данные контрагента.
Поле id в контрагенте и в организации служит для поиска существующего контрагента/организации.
Поле type может иметь следующие значения:
- COMPANY
- PERSON
Поле orgLegalType может иметь следующие значения:
- SELF_EMPLOYED
- COMPANY
- OOO
- AO
- ZAO
- PAO
Пример запроса:
{
"id": "c82e2616-91e7-702e-d666-320534119a13",
"extId": "externalSystemID-123",
"type": "COMPANY",
"name": " ИП Петров А.В.",
"organization": {
"id": "f23b14bf-1151-dcb5-1b25-57a2b931e3ac",
"name": "ИП Петров А.В.",
"fullName": "ИП Петров А.В.",
"phones": null,
"inn": "5018081484",
"kpp": null,
"ogrn": null,
"okpo": null,
"persons": null,
"orgLegalType": "SELF_EMPLOYED",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Новоалексеевская",
"house": "18",
"block": "3",
"building": "",
"flat": null,
"fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
"fullCity": null,
"rawData": null,
"zip": "129626",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"postalAddress": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Новоалексеевская",
"house": "18",
"block": "3",
"building": "",
"flat": null,
"fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
"fullCity": null,
"rawData": null,
"zip": "129626",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
"email": "abc@abc.ru"
},
"person": null
}
Пример для физлица:
{
"id": "e627aba4-bfe7-0ecf-14d8-b120233d9446",
"extId": "externalSystemID-123",
"type": "PERSON",
"role": null,
"name": "Вано",
"organization": null,
"person": {
"name": "Вано",
"surname": "",
"patronymic": "",
"fullName": "Вано о",
"phone": "323232323232323434",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": null,
"personType": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "Барнаульская",
"house": "1",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
"fullCity": null,
"rawData": "Алтайский, Барнаул, Барнаульская, д 1",
"zip": "",
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
}
}
Пример успешного ответа:
{
"success": true,
"id": "c82e2616-91e7-702e-d666-320534119a13"
}
Удаление контрагента
/api/lite/settings/counteragents?id=2fe48a36-b1fd-b6f3-417b-689ff672c50d
Удаляет контрагента по его id. Если контрагент уже где-то используется, то при удалении возникнет ошибка.
Результат запроса:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/delivery-info-list
Получение перечня способов доставки для аккаунта
/api/lite/settings/delivery-info-list
Возвращает перечень способов доставки с доступными доп. сервисами по каждому.
Пример успешного ответа:
{
"success": true,
"deliveryInfoList": [
{
"code": "08141770-8c5d-2ee0-1ddc-6733c7b29f7c",
"deliveryCode": "SELF_PICKUP",
"title": "Самовывоз со склада",
"product": null,
"imgUrl": null,
"courierTitle": null,
"freeDeliveryLimit": {
"deliverySumBelowLimitAmount": 23432432.00,
"deliverySumLimitAmount": 324234.00,
"isDeliverySumLimitActive": true
},
"type": "SELF_PICKUP",
"fbmType": "WILDBERRIES", //OZON
"fboDeliveryByCaсtus": false
"availableServices": null,
"active": true,
"publicAvailable": false
},
{
"code": "5e08e4d9-128d-ba3d-496a-d7b9c783f7d9",
"deliveryCode": "GLOBAL_DELIVERY",
"title": "GLOBAL_DELIVERY",
"product": "Терминал-дверь(Стандарт)",
"imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_global_delivery_left.svg",
"courierTitle": "Global Delivery",
"type": "COURIER",
"fbmType": null,
"availableServices": [
"CHECK_CONTENT",
"TRYING",
"PARTIAL_DELIVERY",
"REVERSE"
],
"active": true,
"publicAvailable": true
},
{
"code": "80429450-85a3-7ba9-2b92-56b459d29ed4",
"deliveryCode": "PICKPOINT",
"title": "PICKPOINT",
"product": "PICKPOINT_STANDARD",
"imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
"courierTitle": "PickPoint",
"type": "PVZ",
"availableServices": null,
"active": true,
"publicAvailable": true
},
{
"code": "8ca527c5-d1ed-0a96-bacf-b0d6d109311b",
"deliveryCode": "CDEK_CDEK_PARCEL_W_D",
"title": "CDEK_CDEK_PARCEL_W_D",
"product": "Посылка склад-дверь",
"imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_cdek_left.svg",
"courierTitle": "СДЭК",
"type": "COURIER",
"fbmType": null,
"availableServices": [
"PARTIAL_DELIVERY",
"CHECK_CONTENT",
"TRYING",
"DANGEROUS_CARGO",
"REVERSE"
],
"active": true,
"publicAvailable": true
},
{
"code": "3c43624e-9d8e-365d-979d-7f2bacf681dc",
"deliveryCode": "CDEK_CDEK_PARCEL_W_W",
"title": "CDEK_CDEK_PARCEL_W_W",
"product": "Посылка склад-склад",
"imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_cdek_left.svg",
"courierTitle": "СДЭК",
"type": "PVZ",
"availableServices": [
"PARTIAL_DELIVERY",
"CHECK_CONTENT",
"TRYING",
"DANGEROUS_CARGO",
"REVERSE"
],
"active": true,
"publicAvailable": true
},
{
"code": "2da5bac0-bfd0-2f77-7f52-498d64802c81",
"deliveryCode": "RUSSIAN_POST_TEMPOLINE_ONLINE_PARCEL",
"title": "RUSSIAN_POST_TEMPOLINE_ONLINE_PARCEL",
"product": "Посылка-онлайн",
"imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_russian_post_left.svg",
"courierTitle": "Почта РФ (Темполайн)",
"type": "RUSSIAN_POST",
"fbmType": null,
"availableServices": null,
"active": true,
"publicAvailable": true
}
]
}
Обновление способа доставки
/api/lite/settings/delivery-info-list
Можно для имеющегося канала доставки изменить название и флаги доступности и публичной доступности, а также опции лимита бесплатной доставки.
Пример запроса:
{
"code": "08141770-8c5d-2ee0-1ddc-6733c7b29f7c",
"title": "Самовывоз со склада",
"active": true,
"publicAvailable": false,
"freeDeliveryLimit": {
"deliverySumBelowLimitAmount": 23432432.00,
"deliverySumLimitAmount": 324234.00,
"isDeliverySumLimitActive": true
}
}
Результат запроса:
{
"success":true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/domainAlias
Проверка доступности домена 3 уровня
/api/lite/settings/domainAlias
Метод возвращает флаг доступности запрошенного названия для домена 3 уровня (не используется никаким другим аккаунтом)
Запрос: Передать параметр domain, например: ?domain=foodshop
В ответ возвращается
успех:
{
"success": true,
"available": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Обновление домена 3 уровня
/api/lite/settings/domainAlias
Метод обновляет домен 3 уровня на запрашиваемый
Запрос:
{
"domain":"foodshop"
}
В ответ возвращается
успех:
{
"success": true только не смогу сделать заказ, денег на карте не хватит
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/email/order
Получение текста заголовка и подвала для email оформления заказа
/api/lite/settings/email/order
Метод возвращает тексты email с заголовком и подвалом для шаблона письма покупателю после оформления заказа.
В ответ возвращается
успех:
{
"success": true,
"header": "Спасибо за оформление заказа",
"footer": "Контакты для связи: 123456"
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Обновление текста заголовка и подвала для email оформления заказа
/api/lite/settings/email/order
Метод обновляет тексты email с заголовком и подвалом для шаблона письма покупателю после оформления заказа
Запрос:
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/email/personal
Обновление данных по текущим настройкам почты
/api/lite/settings/email/personal
Обновляет данные по настройкам почты для текущего тенанта. С данных настроек идёт отправка сообщений пользователям магазина.
Отправляет тестовое письмо на тенантный адрес магазина. Если отправка удалась - сохраняет переданные настройки.
Запрос:
{
"email":"no-reply@kak2c.ru",
"password":"ra$[dsa[/01gh",
"host":"smtp.yandex.ru",
"port":"587"
}
Получение данных по текущим настройкам почты
/api/lite/settings/email/personal
Возвращает данные по настройкам почты для текущего тенанта. С данных настроек идёт отправка сообщений пользователям магазина.
Поля ответа:
Имя | Описание |
username | Адрес почты |
isActivePersonalEmail | Активна ли почта на данный момент |
errorMessage |
Описание ошибки, если почта перестала работать |
Ответ:
{
"username": "no-reply@kak2c.ru",
"password": "ra$[dsa[/01gh",
"port": "587",
"host": "smtp.yandex.ru",
"isActivePersonalEmail": true,
"errorMessage": ""
}
/api/lite/settings/offer-id-type
Задать тип поля - ключа для работы с предложениями
/api/lite/settings/offer-id-type
Задание поля HumanId или Внешний код - как ключевое для поиска товарных предложений для витрины/чекаута/создания заказа.
По умолчанию или при отсутствии значения используется поиск по HumanId
Пример запроса:
{
"type": "EXT_ID" // HUMAN_ID
}
Результат запроса:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/payment/payu
Записать данные собственного аккаунта payU
/api/lite/settings/payment/payu
Записать данные аккаунта payU для прямого зачисления оплат заказов покупателей.
Пример запроса:
{
"merchantId": "abcd",
"accountSecret": "abcd"
}
Результат запроса:
{
"success":true,
"accountId": "abcd",
"url": "abcd"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/payment/robokassa
Записать данные собственного аккаунта Робокасса
/api/lite/settings/payment/robokassa
Записать данные аккаунта Робокасса для прямого зачисления оплат заказов покупателей.
Пример запроса:
{
"merchantId": "abcd",
"accountSecret": "abcd",
"accountSecret2": "abcd"
}
Результат запроса:
{
"success":true,
"accountId": "abcd",
"resultUrl": "abcd", - основной адрес приема ipn уведомлений (только оплаченные)
"failUrl": "abcd", - адрес приема ipn уведомлений (только неоплаченные/отказ покупателя)
"successesUrl": "abcd" - адрес редиректа в магазин после оплаты
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/payment/yandex
Записать данные собственного аккаунта Yandex Касса
/api/lite/settings/payment/yandex
Записать данные аккаунта Yandex для прямого зачисления оплат заказов покупателей
Пример запроса:
{
"merchantId": "abcd",
"accountSecret": "abcd"
}
Результат запроса:
{
"success":true,
"accountId": "abcd",
"url": "abcd"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/payment-methods
Получение перечня способов оплаты для аккаунта
/api/lite/settings/payment-methods
Возвращает перечень способов оплаты
Пример успешного ответа:
{
"success": true,
"paymentMethods": [
{
"paymentMethod": "COD_CARD",
"name": "Оплата картой при получении",
"code": "cod-card"
},
{
"paymentMethod": "COD_CASH",
"name": "Оплата наличными при получении",
"code": "cod-cash"
},
{
"paymentMethod": "ONLINE",
"name": "Предоплата картой на сайте",
"code": "online"
}
]
}
Создать/изменить способ оплаты
/api/lite/settings/payment-methods
Создать / изменить способ оплаты.
Ключ для изменения - поле code - уникальное.
Все поля обязательны
Пример запроса:
{
"paymentMethod": "COD_CARD",
"name": "Оплата картой при получении",
"code": "cod-card"
}
Результат запроса:
{
"success": true,
"name": "Оплата картой при получении",
"code": "cod-card"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Удалить способ оплаты
/api/lite/settings/payment-methods
Удаление одного способа оплаты. Использовать параметр в url вида ?code=test
Если способ оплаты не использован в документах и заказах - удаление пройдет успешно.
Результат запроса:
{ "success" : true
} |
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/pickup
Сохранение настроек точки сбора
/api/lite/settings/pickup
Сохранение ФИО, телефона сотрудника на точке сбора, названия магазина и адреса точки
Пример запроса:
{
"person_full_name":"Петров Петр",
"person_phone":"8(910)101-10-01",
"shopName": "Зонты и сумки",
"address": {
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Озёрная",
"house": "4/9",
"block": "",
"building": "",
"flat": null,
"fullAddress": "г Москва, ул Озёрная, д 4/9",
"zip": "119361",
"regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias":null,
"cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias":null
}
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/promocode
Получить список промокодов аккаунта (/api/lite/settings/promocode)
/api/lite/settings/promocode
Загрузка списка неудаленных промокодов аккаунта
Результат запроса:
{
"success": true,
"recordsTotal": 2,
"promocodes": [
{
"code": "leto",
"isActive": true,
"discountType": "PERCENT",
"discountValue": 20,
"conditions": null,
'useCount":20
},
{
"code": "test",
"isActive": true,
"discountType": "FIX",
"discountValue": 12,
"conditions": [ //Условия действия (опционально). null для промокода без условий.
{
"type": "TIME_LIMIT",
"name": "Срок действия промокода",
"num": 0,
"mandatory": true,
"unsuccessMessage": "Срок действия акции истёк",
"applyDiscount": false,
"applyDeliveryDiscount": false,
"fromDate": "2018-10-08 16:21:57",
"toDate": "2019-10-08 16:21:57",
"maxNumberOfUse": 0
},
{
"type": "USE_LIMIT",
"name": "Максимальное кол-во использований промокода",
"num": 1,
"mandatory": true,
"unsuccessMessage": "Промокод более недействителен",
"applyDiscount": false,
"applyDeliveryDiscount": false,
"maxNumberOfUse": 100
},
{
"type": "ORDER_SUM",
"name": "Бесплатная доставка курьером при заказе от 5000 р",
"num": 2,
"mandatory": true,
"unsuccessMessage": "Сумма заказа меньше 5000 рублей",
"applyDiscount": false,
"applyDeliveryDiscount": true,
"deliveryDiscountType": "PERCENT",
"deliveryDiscountValue": 100,
"deliveryCodes": [
"GLOBAL_DELIVERY"
],
"maxNumberOfUse": 0,
"fromSum": 5000,
"toSum": -1
},
{
"type": "ORDER_SUM",
"name": "Скидка 200р при заказе от 2000 р",
"num": 3,
"mandatory": true,
"unsuccessMessage": "Сумма заказа меньше 2000 рублей",
"applyDiscount": true,
"discountType": "FIX",
"discountValue": 200,
"applyDeliveryDiscount": false,
"maxNumberOfUse": 0,
"fromSum": 2000,
"toSum": -1
},
{
"type": "DELIVERY_LOCATION",
"name": "Скидка 10% на доставку по Москве при оплате онлайн",
"num": 4,
"mandatory": false,
"unsuccessMessage": "Данный промокод недействителен",
"applyDiscount": false,
"applyDeliveryDiscount": true,
"deliveryDiscountType": "PERCENT",
"deliveryDiscountValue": 10,
"paymentMethodCodes": [
"online"
],
"maxNumberOfUse": 0,
"fullAddress": "Москва" //В этом поле хранится текстовый адрес для отображения в ЛК
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5"
},
{
"type": "SKU_COMBINATION",
"name": "2 + 1 Купи 2 товара, 3й в подарок",
"num": 5,
"mandatory": true,
"unsuccessMessage": "Промокод не применён. В корзине отсутствуют товары, соответствующие условию акции.",
"applyDiscount": true,
"discountType": "FIX",
"discountValue": 250,
"applyDeliveryDiscount": false,
"bonusSkus": [
{
"variantId": "1042",
"quantity": 1
}
],
"maxNumberOfUse": 0,
"requiredSkus": [
{
"variantId": "1042",
"quantity": 1
}
]
},
{
"type": "MULTI",
"anyOfSkus": [ //true, если пристутствует хотя бы 1 товар из списка (sku1 || sku2 || sku3)
{
"variantId": "1042",
"quantity": 1
},
{
"variantId": "1043",
"quantity": 1
}
],
"applyDeliveryDiscount": false, //Применять ли скидку на доставку
"applyDiscount": true, //Применять ли скидку на товары
"fullAddress": "Москва" //В этом поле хранится текстовый адрес для отображения в ЛК
"areaFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"bonusSkus": [
{
"variantId": "1042",
"quantity": 1
}
],
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"deliveryCodes": [ //Коды служб доставки
"GLOBAL_DELIVERY"
],
"deliveryDiscountType": "PERCENT", //FIX
"deliveryDiscountValue": 100,
"discountType": "PERCENT",
"discountValue": 13,
"fromDate": "2018-10-08 16:21:57", //Дата, с которой действует промокод
"fromSum": 5000, //Сумма, с которой действует промокод
"mandatory": false, //Обязательность условия. В случае MULTI не проверяется
"maxNumberOfUse": 100, //Максимальное кол-во применений промокода
"minSkuCount": 2, //Минимальное общее кол-во товаров в корзине
"maxSkuCount": 4 //Максимальное общее кол-во товаров в корзине
"name": "",
"num": 6,
"paymentMethodCodes": [ //Коды способов оплаты
"online"
],
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"requiredSkus": [ //true, если пристутствуют все товары из списка (sku1 && sku2 && sku3)
{
"variantId": "1042",
"quantity": 1
}
],
"toDate": "2019-10-08 16:21:57", //Дата, до которой действует промокод
"toSum": -1, //Сумма, с которой действует промокод. Отрицательное значение - без ограничений
"unwantedSkus": [ //true, если отсутствуют все товары из списка (!sku1 && !sku2 && !sku3)
{
"variantId": "1042",
"quantity": 1
}
],
"skusToApplyDiscount": [ //Товары, к которым примеяется скидка
{
"variantId": "1066",
"quantity": 1
}
],
}
],
'useCount":100 //Счётчик использований
}
]
}
Пейджинация
Для пейджинации используются параметры page и size: size - промокодов на странице, page - номер страницы.
Пример: /api/lite/settings/promocode?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=15
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Поиск по коду(неполное соответствие, регистронезависимый)
параметр: codeSearch (часть наименования промокода , если передано, возвращается отфильтрованный список промокодов, аналогичный списку выше. Подробная информация по списку товаров также не возвращается).
например /api/lite/settings/promocode?codeSearch=ET
Поиск производится sql запросом вида: code LIKE '%et%'
Если параметр не задан(или пустой), возвращается полный список промокодов.
Пейджинация также есть.
Поиск по коду(точное значение, регистронезависимый)
параметр: code (наименование промокода , если передано, возвращается найденный промокод)
например /api/lite/settings/promocode?code=LETO
Возвращается всегда либо 1 промокод с подробными списками товаров (anyOfskus, bonusSkus, requiredSkus, unwantedSkus), либо ошибка "Не найден промокод со значением: %сcode%"
Является приоритетным по отношению к параметру codeSearch. Если параметр code задан, поиск происходит только по его точному значению.
Положительный результат запроса:
{
"success":true,
"code":"leto20",
"isActive":true,
"useCount":241,
"discountType":"FIX",
"discountValue":0,
"conditions":[
{
"type":"SKU_COMBINATION",
"name":"Танк в подарок",
"num":1,
"mandatory":true,
"unsuccessMessage":"В корзине отсутствует волшебный дрон.",
"applyDiscount":true,
"discountType":"FIX",
"discountValue":399,
"applyDeliveryDiscount":false,
"bonusSkus":[
{
"variantId":"1041",
"quantity":1,
"product":{
"id":"1030",
"extId":"955-2",
"extId2":null,
"shortName":"волшебный дрон (синий)",
"description":"волшебный дрон (синий)",
"available":true,
"deleted":false,
"brandName":null,
"countryOfOrigin":null,
"tnvedCode":null,
"internationalDescription":null,
"additionalDescriptions":null,
"isBestseller":null,
"isNovelty":null,
"type":"SKU",
"vat":"NO_VAT",
"reviewScore":null,
"options":null,
"images":[
{
"success":true,
"url":"https://storage.yandexcloud.net/images-k2c/1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
"id":"1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
"pos":"0.000000000000000"
}
],
"variants":[
{
"id":"1041",
"extId":"955-2",
"extId2":null,
"article":"",
"price":1390.00,
"oldPrice":null,
"stock":[
{
"warehouseCode":"8b57ff7a-e63f-ecf4-2adf-8cdb093cb2c3",
"stockTotal":553,
"stockAvailable":552,
"stockReserved":1
}
],
"ordering":null,
"defaultImage":null,
"weight":300,
"dimensions":{
"height":15,
"width":16,
"depth":7
},
"barcodes":[
{
"value":"6900000138113",
"isDefault":false
},
{
"value":"6900000138129",
"isDefault":false
}
],
"vat":"NO_VAT",
"type":"SKU",
"optionsUsed":null
}
],
"collections":[
"1001"
],
"attributes":null,
"collectionPos":null,
"anyPublicCollections":null
}
}
],
"requiredSkus":[
],
"anyOfSkus":[
{
"variantId":"1041",
"quantity":1,
"product":{
"id":"1030",
"extId":"955-2",
"extId2":null,
"shortName":"волшебный дрон (синий)",
"description":"волшебный дрон (синий)",
"available":true,
"deleted":false,
"brandName":null,
"countryOfOrigin":null,
"tnvedCode":null,
"internationalDescription":null,
"additionalDescriptions":null,
"isBestseller":null,
"isNovelty":null,
"type":"SKU",
"vat":"NO_VAT",
"reviewScore":null,
"options":null,
"images":[
{
"success":true,
"url":"https://storage.yandexcloud.net/images-k2c/1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
"id":"1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
"pos":"0.000000000000000"
}
],
"variants":[
{
"id":"1041",
"extId":"955-2",
"extId2":null,
"article":"",
"price":1390.00,
"oldPrice":null,
"stock":[
{
"warehouseCode":"8b57ff7a-e63f-ecf4-2adf-8cdb093cb2c3",
"stockTotal":553,
"stockAvailable":552,
"stockReserved":1
}
],
"ordering":null,
"defaultImage":null,
"weight":300,
"dimensions":{
"height":15,
"width":16,
"depth":7
},
"barcodes":[
{
"value":"6900000138113",
"isDefault":false
},
{
"value":"6900000138129",
"isDefault":false
}
],
"vat":"NO_VAT",
"type":"SKU",
"optionsUsed":null
}
],
"collections":[
"1001"
],
"attributes":null,
"collectionPos":null,
"anyPublicCollections":null
}
},
{
"variantId":"1040",
"quantity":1,
"product":{
"id":"1029",
"extId":"955-1",
"extId2":null,
"shortName":"волшебный дрон (красный)",
"description":"волшебный дрон (красный)",
"available":true,
"deleted":false,
"brandName":null,
"countryOfOrigin":null,
"tnvedCode":null,
"internationalDescription":null,
"additionalDescriptions":null,
"isBestseller":null,
"isNovelty":null,
"type":"SKU",
"vat":"NO_VAT",
"reviewScore":null,
"options":null,
"images":[
{
"success":true,
"url":"https://storage.yandexcloud.net/images-k2c/99eec60a-a8a8-4393-9a72-0ea990e86114.jpg",
"id":"99eec60a-a8a8-4393-9a72-0ea990e86114.jpg",
"pos":"0.000000000000000"
}
],
"variants":[
{
"id":"1040",
"extId":"955-1",
"extId2":null,
"article":"",
"price":1390.00,
"oldPrice":null,
"stock":[
{
"warehouseCode":"8b57ff7a-e63f-ecf4-2adf-8cdb093cb2c3",
"stockTotal":283,
"stockAvailable":283,
"stockReserved":0
}
],
"ordering":null,
"defaultImage":null,
"weight":300,
"dimensions":{
"height":16,
"width":15,
"depth":7
},
"barcodes":[
{
"value":"6900000138120",
"isDefault":false
}
],
"vat":"NO_VAT",
"type":"SKU",
"optionsUsed":null
}
],
"collections":[
"1001"
],
"attributes":null,
"collectionPos":null,
"anyPublicCollections":null
}
}
],
"unwantedSkus":[
],
"minSkuCount":1
},
{
"type":"PAYMENT_METHOD",
"name":"Способ оплаты",
"num":2,
"mandatory":true,
"unsuccessMessage":"Промокод не применён. Способ оплаты не соответствует правилам акции",
"applyDiscount":false,
"applyDeliveryDiscount":false,
"bonusSkus":[
],
"requiredSkus":[
],
"anyOfSkus":[
],
"unwantedSkus":[
],
"skusToApplyDiscount": [
],
"paymentMethodCodes":[
"online",
"cod-card"
]
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Создать/изменить промокод (/api/lite/settings/promocode)
/api/lite/settings/promocode
Создать / изменить промокод.
Ключ для изменения - поле code - уникальное.
Регистр поля не имеет значения
все поля обязательны
Пример запроса:
{
"code": "leto",
"isActive": true,
"discountType": "PERCENT",
"discountValue": 20,
"conditions": [ //Условия действия (опционально). null для промокода без условий.
{
"type": "MULTI",
"anyOfSkus": [ //true, если пристутствует хотя бы 1 товар из списка (sku1 || sku2 || sku3)
{
"variantId": "1042",
"quantity": 1
},
{
"variantId": "1043",
"quantity": 1
}
],
"applyDeliveryDiscount": false, //Применять ли скидку на доставку
"applyDiscount": true, //Применять ли скидку на товары
"fullAddress": "Москва" //В этом поле хранится текстовый адрес для отображения в ЛК
"areaFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"bonusSkus": [
{
"variantId": "1042",
"quantity": 1
}
],
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"deliveryCodes": [ //Коды служб доставки
"GLOBAL_DELIVERY"
],
"deliveryDiscountType": "PERCENT", //FIX
"deliveryDiscountValue": 100,
"discountType": "PERCENT",
"discountValue": 13,
"fromDate": "2018-10-08 16:21:57", //Дата, с которой действует промокод
"fromSum": 5000, //Сумма, с которой действует промокод
"mandatory": false, //Обязательность условия. В случае MULTI не проверяется
"maxNumberOfUse": 100, //Максимальное кол-во применений промокода
"minSkuCount": 2, //Минимальное общее кол-во товаров в корзине
"maxSkuCount": 4 //Максимальное общее кол-во товаров в корзине
"name": "",
"num": 6,
"paymentMethodCodes": [ //Коды способов оплаты
"online"
],
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"requiredSkus": { //Товары, каждый из которых должен присутствовать в заказе в заданном кол-ве (т1 и т2 и т3)
"djburbanbackpack": 1
}
"anyOfSkus": { //Товары, хотя бы одни из которых должен присутствовать в заказе в заданном кол-ве (т1 || т2 || т3)
"1002": 2,
"1003": 1,
"1000": 1
},
"unwantedSkus": { //Товары, присутствие хотя бы одного из которых в заданном кол-ве не подходит под условие (!т1 || !т2 || !т3)
"1005": 1
},
"bonusSkus": { //Бонусные товары, добавляемые к заказу
"1000": 1
},
"toDate": "2019-10-08 16:21:57", //Дата, до которой действует промокод
"toSum": -1, //Сумма, с которой действует промокод. Отрицательное значение - без ограничений
"skusToApplyDiscount": ["1066", "1067"], //Товары, к которым применяется скидка(например, скидка 20% только на товар 1066)
},
{
"type": "SKU_COMBINATION",
"name": "Рюкзак URBAN BACKPACK",
"num": 0,
"mandatory": true,
"unsuccessMessage": "Промокод не применён. В корзине отстутствует товар: Рюкзак URBAN BACKPACK",
"applyDiscount": true,
"discountType": "FIX",
"discountValue": 1500,
"applyDeliveryDiscount": false,
"maxNumberOfUse": 0,
"requiredSkus": { //Товары, каждый из которых должен присутствовать в заказе в заданном кол-ве (т1 и т2 и т3)
"djburbanbackpack": 1
}
"anyOfSkus": { //Товары, хотя бы одни из которых должен присутствовать в заказе в заданном кол-ве (т1 || т2 || т3)
"1002": 2,
"1003": 1,
"1000": 1
},
"unwantedSkus": { //Товары, присутствие хотя бы одного из которых в заданном кол-ве не подходит под условие (!т1 || !т2 || !т3)
"1005": 1
},
"bonusSkus": { //Бонусные товары, добавляемые к заказу
"1000": 1
},
"skusToApplyDiscount": ["1066", "1067"], //Товары, к которым применяется скидка(например, скидка 20% только на товар 1066)
"minSkuCount" : 2 //Минимальное общее кол-во товаров, удовлетворяющих условию акции (сумма [товар • кол-во] всех позиций заказа)
},
{
"type": "PAYMENT_METHOD",
"name": "Обязательный способ оплаты",
"num": 5,
"mandatory": true,
"unsuccessMessage": "Промокод действителен только по предоплате картой на сайте",
"applyDiscount": false,
"applyDeliveryDiscount": false,
"maxNumberOfUse": 0,
"paymentMethodCodes": [
"online"
]
}
]
}
Результат запроса:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Удалить промокод (/api/lite/settings/promocode)
/api/lite/settings/promocode
Удаление одного промокода. Использовать параметр в url вида ?code=test
Результат запроса:
{
"success": true
}
Проверить действие промокода (публичный) (/api/lite/pub/promocode)
/api/lite/pub/promocode
Проверка переданного промокода на активность
параметр: code
например /api/lie/pub/promocode?code=test
Положительный результат запроса:
{
"success": true,
"code": "test",
"isActive": true,
"discountType": "FIX", // FIX/PERCENT
"discountValue": 13
}
Ошибка, если у промокода заданы условия:
{
"success":false,
"errors":[
{
"code":1,
"message":"У промокода заданы условия применения. Для валидации, воспользуйтесь методом /api/lite/pub/check-promocode-conditions/"
}
]
}
Отрицательный результат запроса:
{
"success": false,
"errors": []
}
Проверить действие промокода С УСЛОВИЯМИ (публичный)
/api/lite/pub/check-promocode-conditions
Для валидации условий промокода, необходимо передать весь заказ целиком, с заполненным промокодом (аналогично /api/lite/pub/order)
Пример запроса:
{
"comment":"",
"confirmStatus":"APPROVED",
"paymentStatus":"NOT_PAID",
"paymentMethodCode":"no-cod",
"totalOrderSum":1590,
"delivery":{
"receiver":{
"name":"",
"phone":"",
"alternativePhone":"",
"email":"",
"surname":"",
"patronymic":""
},
"deliveryCode":"RUSSIAN_POST_TEMPOLINE",
"timeFrom":"09:00",
"timeTo":"20:00",
"desiredDeliveryDate":null,
"deliveryComment":"",
"address":{
"region":"Московская",
"area":"Пушкинский",
"city":"Пушкино",
"settlement":null,
"street":"",
"house":"",
"block":"",
"building":"",
"flat":"",
"fullAddress":"",
"zip":"",
"regionFias":"29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias":"2f88bc57-5096-4aee-bcfc-fe26d4dd3a26",
"cityFias":"7f22cfa4-34fa-4fa0-bcb0-620cd8402cfa",
"settlementFias":null,
"country":"RU"
},
"pickupPointId":""
},
"items":[
{
"num":1,
"id":"1000",
"quantity":1,
"variants":[
]
},
{
"num":2,
"id":"delivery"
}
],
"promocode":"CODE"
}
Результат запроса:
{
"success":true,
"code":"code",
"isActive":true,
"discountType":"FIX",
"discountValue":836,
"hasConditions":true,
"deliveryDiscountValue":50, //Скидка на доставку в %
"bonusSkus":{
"1000":1 //Бонусные товары по промокоду в формате id : количество
}
}
/api/lite/settings/user_notification
Сохранение настроек уведомлений
/api/lite/settings/user_notification
Описание....
/api/lite/settings/warehouses
Получение перечня складов для аккаунта
/api/lite/settings/warehouses
Возвращает перечень складов аккаунта
operatorType: MANUAL/FULFILLMENT
fulfillmentType: TEMPOLINE
Пример успешного ответа:
{
"success": true,
"warehouses": [
{
"code": "c738ff57-424c-2a8c-aa47-5378a88dc7c9",
"title": "Свой склад",
"isDefault": true,
"operatorType": "MANUAL",
"fulfillmentType": null,
"operationType": "STORAGE",
"address": {
"country": "Russia",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "Очаковская Б.",
"house": "47А",
"block": "1",
"building": null,
"flat": null,
"fullAddress": "Москва, Очаковская Б., д 47А, к 1",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"manager": {
"name": "Не задано",
"surname": "",
"patronymic": "",
"fullName": "Егор",
"phone": "+79111111111",
"rawPhone": "+7 (911) 111 11 11",
"alternativePhone": "",
"email": "easychshnurki@yandex.ru",
"post": null,
"personType": null
}
}
]
}
Редактирование склада
/api/lite/settings/warehouses
На данном этапе реализовано только изменение имени склада ("title":"Свой склад"). (задача 1669)
склад ищется по GUID ("code":"418a1cb1-eb57-ecc8-8c8f-08efb978bd49").
Пример вызова:
{
"code":"418a1cb1-eb57-ecc8-8c8f-08efb978bd49",
"title":"Свой склад",
"isDefault":true,
"operatorType":"MANUAL",
"fulfillmentType":null,
"fulfillmentSubType":null,
"operationType":"STORAGE",
"goodsCondition":"NORMAL",
"parentCode":null,
"address":{
"country":"Россия",
"countryCode":"RU",
"region":"Москва",
"area":null,
"city":"Москва",
"settlement":null,
"street":"Проектируемый проезд № 1980",
"house":"д. 4",
"block":null,
"building":null,
"flat":null,
"fullAddress":"Москва, Проектируемый проезд № 1980, д. 4",
"fullCity":null,
"rawData":null,
"zip":null,
"regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias":null,
"cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias":null
},
"manager":{
"name":"Склада",
"surname":"Менеджер",
"patronymic":"",
"fullName":"Менеджер склада",
"phone":"+79011111111",
"rawPhone":"+79011111111",
"alternativePhone":"",
"email":"778@q.qq",
"post":null,
"personType":null,
"address":{
"country":null,
"countryCode":null,
"region":null,
"area":null,
"city":null,
"settlement":null,
"street":null,
"house":null,
"block":null,
"building":null,
"flat":null,
"fullAddress":null,
"fullCity":null,
"rawData":null,
"zip":null,
"regionFias":null,
"areaFias":null,
"cityFias":null,
"settlementFias":null
}
}
}
Пример успешного ответа
{
"success": true
}
/api/lite/settings/price-types
Получение перечня типов цен аккаунта
/api/lite/settings/price-types
Возвращает перечень типов цен
Пример успешного ответа
{
"success": true,
"priceTypes": [
{
"currency": "RUB",
"name": "Розничная цена",
"code": "Розничная цена",
"isDefault": false
},
{
"currency": "RUB",
"name": "Цена со скидкой",
"code": "Цена со скидкой",
"isDefault": false
},
{
"currency": "RUB",
"name": "BERU",
"code": "BERU",
"isDefault": false
},
{
"currency": "RUB",
"name": "Цена до скидки BERU",
"code": "Цена до скидки BERU",
"isDefault": false
},
{
"currency": "RUB",
"name": "OZON",
"code": "OZON",
"isDefault": false
}
]
}
Создание/редактирование типа цены(/api/lite/settings/price-types)
Создает / редактирует тип цены.
Ключевое поле - name
Для стандартные типов цен (Розничная цена, Цена до скидки) редактировать название и код нельзя.
/api/lite/settings/price-types
Пример запроса:
{
"currency": "RUB",
"name": "Новая цена",
"code": "Новая цена",
"isDefault": false
}
ответ
Пример запроса:
{
"success": true,
"name": "Новая цена",
"code": "Новая цена"
}
/api/lite/brief_report
Сводка по аккаунту (/api/lite/brief_report)
/api/lite/brief_report
Сводка включает блоки статистики (весь функционал со стороны Кактуса взять готовый).
/api/lite/settings/countries
Получение списка стран
/api/lite/settings/countries
Метод возвращает список всех стран, поддерживаемых бэкендом
В ответ возвращается
успех:
{
"success": true,
"countries": [
{
"code": "RU",
"rusName": "Россия"
},
{
"code": "BY",
"rusName": "Беларусь"
},
....
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/payment/portmone
Записать данные собственного аккаунта Portmone
/api/lite/settings/payment/portmone
Записать данные аккаунта Portmone для прямого зачисления оплат заказов покупателей.
Пример запроса:
{
"merchantId": "abcd",
"payeeId": "abcd",
"accountLogin": "login",
"accountPassword": "password",
"credentials":"credentials"
}
Результат запроса:
{
"success":true,
"accountId": "abcd",
"ipnUrl": "/portmone/result", - основной адрес приема ipn уведомлений
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/settings/email/templates
Получение шаблона для email, которые можно настроить
/api/lite/settings/email/templates
Метод возвращает текст email в параметре body в кодировке Base64, а так же его тип и текущий язык письма.
Параметры:
-
type - обязательный, тип письма, указывать в верхнем регистре! На данный момент может принимать значения :
REGISTRATION_CUSTOMER
PWDCHANGE_CUSTOMER
Пример запроса /api/lite/settings/email/templates/?type=REGISTRATION_CUSTOMER
В ответ возвращается:
успех:
{
"country": "RU",
"body": "OiAxMDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyIgd2lkdGg9IjE1OTUiPiA8L2E+PC9kaXY+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJ+Jm5ic3A7PC9wPg==",
"type": "REGISTRATION_CUSTOMER"
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Обновление текста письма
/api/lite/settings/email/templates
Метод обновляет тексты email
Тело запроса:
{
"country": "RU",
"body": "MDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyIgd2lkdGg9IjE1OTUiPiA8L2E+PC9kaXY+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJwPg==",
"type": "REGISTRATION_CUSTOMER"
}
- body - текст письма в Base64 закодированном виде
- type - тип письма для обновления данных, обязательный параметр. Указывается в верхнем регистре!
- country - параметр языка, игнорируется, он будет подставлен из настроек, изменять его нужно там же
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/email/templates/init
Инициализация шаблонов по умолчанию
/api/lite/settings/email/order/init
Метод добавит шаблоны email на текущем языке для регистрации покупателя и восстановления пароля для покупателя из главных настроек. Если при вызове метода шаблоны уже существуют, они обновятся на дефолтные.
Нужен для существующих магазинов, чтобы проинициализировать шаблоны.
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/users/roles
/api/lite/settings/users/roles
Метод возвращает все доступные роли
Пример ответа:
{
"success": true,
"roles": [
{
"id": "b37a0b62-0ec9-3984-8509-6ce33be54bf2",
"name": "Администратор",
"privileges": [
"ADMIN"
],
"users": [
"test@test.ru",
"test@test.ru-expert"
]
},
{
"id": "597aa7c2-4da9-ed44-669a-9710e07d6d6c",
"name": "Складская обработка",
"privileges": [
"ORDERS_READ",
"ORDERS_WRITE",
"PURCHASE_ORDERS_WRITE",
"PURCHASE_ORDERS_READ"
],
"users": []
},
{
"id": "a84dcbb4-7fec-c55c-9761-be7a68057edb",
"name": "Подтверждение заказа",
"privileges": [
"ORDERS_READ",
"ORDERS_WRITE"
],
"users": [
"test@test.ru_callcenter"
]
}
]
}
/api/lite/settings/users/roles
Обновляет или создает роль. Если указан id, то обновляет существующую роль, иначе создает новую
Пример запроса:
{
"id": "37a9dfae-c1b7-42a9-9db3-8e5015c6ae1e",
"name": "Название роли",
"privileges": ["DASHBOARD_DATA_READ"],
"users": ["test-202-1@qqq.qq"]
}
Пример ответа:
{
"success": true
}
/api/lite/settings/users/roles?id=9ad800a1-3eec-a1ea-988d-4e2c3e88e44f
Удаляет роль.
Список возможных привилегий
DASHBOARD_DATA_READ
PRODUCTS_READ
PRODUCTS_WRITE
ORDERS_READ
ORDERS_WRITE
PURCHASE_ORDERS_READ
PURCHASE_ORDERS_WRITE
SETTINGS_READ
SETTINGS_WRITE
SHOP_TEMPLATE_READ
SHOP_TEMPLATE_WRITE
ADMIN
/api/lite/settings/users
/api/lite/settings/users
Метод возвращает пользователей, созданных для магазина.
Параметры:
query - поисковый запрос (по имени/фамилии/отчеству/логину/телефону);
size - количество результатов (по умолчанию 10).
Пример ответа:
{
"success": true,
"users": [
{
"login": "test@test.ru",
"isSystemUser": true,
"isRoot": true,
"firstName": null,
"lastName": null,
"middleName": null,
"phone": null,
"roles": [
{
"id": "b37a0b62-0ec9-3984-8509-6ce33be54bf2",
"name": "Администратор"
}
]
},
{
"login": "test@test.ru_callcenter",
"isSystemUser": true,
"isRoot": false,
"firstName": null,
"lastName": null,
"middleName": null,
"phone": null,
"roles": [
{
"id": "a84dcbb4-7fec-c55c-9761-be7a68057edb",
"name": "Подтверждение заказа"
}
]
},
{
"login": "test@test.ru-expert",
"isSystemUser": true,
"isRoot": false,
"firstName": null,
"lastName": null,
"middleName": null,
"phone": null,
"roles": [
{
"id": "b37a0b62-0ec9-3984-8509-6ce33be54bf2",
"name": "Администратор"
}
]
}
]
}
/api/lite/settings/users
Обновляет или создает пользователя. Если пользователь с указанным login существует, то обновляет его, иначе создает нового.
Пример запроса:
{
"login": "test@test.ru",
"firstName": "Имя",
"lastName": "Фамилия",
"middleName": "Отчество",
"phone": "+7 999 999 99 99",
"password": "qqq222",
"roles": ["a84dcbb4-7fec-c55c-9761-be7a68057edb"]
}
Пример ответа:
{
"success": true
}
/api/lite/settings/users?login=test@test.ru
Удаляет пользователя
/api/lite/settings/checkout/payment
Получение настроек онлайн оплаты
/api/lite/settings/checkout/payment
Метод возвращает настройки онлайн оплаты
Пример ответа:
{
"merchantId": "111222",
"accountSecret": "live_1234567890",
"ipnUrl": "http://app.kak2c.ru/yandex/confirmPaid",
"additionalIpnFailUrl": null, // только для Робокассы
"additionalIpnSuccessUrl": null, // только для Робокассы
}
/api/lite/settings/checkout/delivery-region-settings
Редактирование настроек регионов доставки
/api/lite/settings/checkout/delivery-region-settings
Обновление настроек регионов доставки
orderSumMoreThan - наценка/скидка применится только от суммы заказа свыше суммы параметра.
Запрос:
{
"commonSettings": [
{
"country": "ALL", // RU, SNG, OTHER
"region": "ALL_REGIONS",
"extraFeeFixValue": 100,
"extraFeePercentValue": -50,
"orderSumMoreThan": 22000.00,
"enabled": true,
"tariffEnabled": true
},
{
"country": "SNG",
"region": "ALL_REGIONS",
"extraFeeFixValue": 100,
"extraFeePercentValue": 0,
"orderSumMoreThan": 22000.00,
"enabled": true,
"tariffEnabled": false
},
{
"country": "RU",
"region": "MOSCOW",
"extraFeeFixValue": 100,
"extraFeePercentValue": 0,
"orderSumMoreThan": 22000.00,
"enabled": false,
"tariffEnabled": true
}
]
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/settings/regions
Получение списка регионов
/api/lite/settings/regions
Ответ:
{
"regions": [
{
"title": "Все регионы",
"name": "ALL_REGIONS",
"fias": "ALL_REGIONS"
},
{
"title": "Республика Адыгея",
"name": "ADYGEA_REPUBLIC",
"fias": "d8327a56-80de-4df2-815c-4f6ab1224c50"
},
{
"title": "Республика Алтай",
"name": "ALTAI_REPUBLIC",
"fias": "5c48611f-5de6-4771-9695-7e36a4e7529d"
},
...
]
}
/api/lite/settings/adAttachments
Получение настроек допвложений
/api/lite/settings/adAttachments
Пример успешного ответа:
{
"adAttachments": [
{
"comment": "При упаковке сложить вдвое",
"deliveryInfoList": [
"ca038ac9-b0b3-2a56-ed81-79332334f551"
],
"id": "5cbce395-939e-1103-11b2-dead1fe6298f",
"img": "https://storage.yandexcloud.net/images-k2c/882e0f85-d7a6-49bd-90af-d71ea3355168.jpg",
"productId": "975616ae-106c-8fd9-ede1-35b0efb9e458",
"quantity": 1,
"shortName": "Допвложение. Буклет",
"variantId": "2473"
}
],
"success": true
}
Создание, Обновление настроек допвложений
/api/lite/settings/adAttachments
Создает/обновляет настройки допвложений.
Пример запроса:
{
"id": "5cbce395-939e-1103-11b2-dead1fe6298f", //Если не указан, создаётся новая настройка
"variantId":"2473",
"quantity": 2,
"comment":"При упаковке сложить вдвое",
"deliveryInfoList":["ca038ac9-b0b3-2a56-ed81-79332334f551"]
}
Удаление настроек допвложений
/api/lite/settings/adAttachments
Удаление одной настройки допвложений. Использовать параметр в url вида ?id=5cbce395-939e-1103-11b2-dead1fe6298f
Тарификация
Комментарии к использованию методов Тарификации
1. Получение тарифов доставки (от Кактуса), для показа в процессе чекаута
Для получения тарифов на доставку, необходимо передать данные:
- Связка ФИАС guid-ов (для РФ): регион, район, город, населенный пункт
- Вес
- Объемный вес
У нас также есть возможность отправки за границу (в любую страну) с автоматической растаможкой, для этого надо передать код страны, адрес на латинице (кроме СНГ), а также передать к товарам код тнвэд и описание на английском.
Для первого этапа, можно ограничиться доставкой по России, но заложить последующую международную доставку.
Для получения ФИАС кодов, можно воспользоваться сервисом Dadata, либо вашим внутренним решением, либо нашим подсказчиком:
/api/prompter/location
Запрос позволяет получить подсказки по городу, в ответ возвращаются данные по ФИАС, которые необходимо сохранить и использовать в дальнейшем для получения тарифов.
Для определения габаритов коробки (объемного веса), можно использовать метод:
/api/lite/pub/dimensions-by-package
Для этого необходимо передать вес и габариты каждого товара в заказе.
Запрос на получения тарифов /api/dlv/tariffs
в запросе необходимо указать:
- данные по локации доставки (фиас коды в первую очередь, остальные данные второстепенны при наличии фиас кодов),
- данные по размеру и весу,
- данные о оценочной стоимости заказа и сумму наложенного платежа (если требуется включить их в расчет) - это на усмотрение пользователя
Следует делать перерасчёт стоимости доставки в случае изменения состава заказа, изменении места доставки, изменении способа оплаты.
Для выбора точек ПВЗ на карте следует использовать скрипт вызова карты
Если при получении тарифов пришли тарифы в которых указан
type: "PVZ"
нужно дать возможность выбрать ПВЗ на карте.
Полученный результат выбора ПВЗ (код ПВЗ), стоимость доставки, и данные о локации сохранить в заказе, для передачи в сервис “Кактус” для Фулфилмент обработки.
Некоторые ПВЗ не поддерживают оплату при получении, для таких ПВЗ следует ограничить возможность выбора способа оплаты в заказе только предоплатой. В случае если paymentMethods возвращает хотя бы 1 способ оплаты - значит в этом пункте выдачи можно оплатить при получении, если список в paymentMethods вернулся пустой, значит в этот ПВЗ можно отправить только предоплаченный заказ.
По всем методам апи этого раздела - авторизация работает по параметру Domain в header запросов.
Домен для всех аккаунтов генерируется автоматически при регистрации и его можно узнать в личном кабинете
https://lk2-test.kak2c.ru/settings в поле ID аккаунта. Нужно в запросах передавать Domain = {"shop" + ID аккаунта}
/api/prompter/address
Подсказка полного адреса (/api/prompter/address)
/api/prompter/address
Для запроса необходимо выполнить следующий запрос
/api/prompter/address?query=москва1
Важно: При формировании объекта адреса доставки заказа необходимо в поле delivery.address.block передавать значение из поля block_value.
Поле block в ответе может содержать как номер корпуса, так и номер строения, в зависимости от значения поля block_type_full ("корпус"/"строение"), поэтому для сохранения обратной совместимости и однозначной интерпретации значений полей были введены 2 новых поля: block_value (всегда содержит номер корпуса) и building (всегда содержит номер строения).
В ответ возвращается
успех:
{
"success": true,
"suggestions": [
{
"value": "г Москва, ул Озёрная, д 33",
"unrestricted_value": "г Москва, ул Озёрная, д 33",
"data": {
"postal_code": "119361",
"country": "Россия",
"region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"region_kladr_id": "7700000000000",
"region_with_type": "г Москва",
"region_type": "г",
"region_type_full": "город",
"region": "Москва",
"area_fias_id": null,
"area_kladr_id": null,
"area_with_type": null,
"area_type": null,
"area_type_full": null,
"area": null,
"city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"city_kladr_id": "7700000000000",
"city_with_type": "г Москва",
"city_type": "г",
"city_type_full": "город",
"city": "Москва",
"city_area": null,
"city_district": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_with_type": null,
"city_district_type": null,
"city_district_type_full": null,
"settlement_fias_id": null,
"settlement_kladr_id": null,
"settlement_with_type": null,
"settlement_type": null,
"settlement_type_full": null,
"settlement": null,
"street_fias_id": "2de05e24-76f3-490f-9770-c0b923e0cf80",
"street_kladr_id": "77000000000211100",
"street_with_type": "ул Озёрная",
"street_type": "ул",
"street_type_full": "улица",
"street": "Озёрная",
"house_fias_id": "5e8674fb-14d4-4d24-9bf5-872d03ea5a36",
"house_kladr_id": "7700000000021110080",
"house_type": "д",
"house_type_full": "дом",
"house": "33",
"block_type": null,
"block_type_full": null,
"block": null,
"block_value": null,
"building": null,
"flat_type": null,
"flat_type_full": null,
"flat": null,
"flat_area": null,
"square_meter_price": null,
"flat_price": null,
"postal_box": null,
"fias_id": "5e8674fb-14d4-4d24-9bf5-872d03ea5a36",
"fias_level": "8",
"kladr_id": "7700000000021110080",
"capital_marker": "0",
"okato": "45268579000",
"oktmo": "45323000",
"tax_office": "7729",
"tax_office_legal": "7729",
"timezone": null,
"geo_lat": null,
"geo_lon": null,
"beltway_hit": null,
"beltway_distance": null,
"qc_geo": null,
"qc_complete": null,
"qc_house": null,
"unparsed_parts": null,
"qc": null,
"history_values": null,
"source": null
}
}
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/prompter/street
Подсказка улицы для заданного населенного пункта
/api/prompter/street
Для запроса необходимо передать название населенного пункта из метода /prompter/location и введенные пользователем буквы искомой улицы (для магазинов в России):
/api/prompter/street?query=г москва Ленинс
Для магазинов в Украине необходимо передать значение settlement_fias_id из метода /prompter/location в параметре settlementFiasCode и введенную часть улицы в параметре streetQuery:
/api/prompter/street?settlementFiasCode=e718a680-4b33-11e4-ab6d-005056801329&streetQuery=Незал
параметры запроса:
query | Запрос, включающий название населенного пункта и введенную часть искомой улицы |
city | Название города |
cityFiasCode | Код города |
settlement | Название населенного пункта |
settlementFiasCode | Код населенного пункта |
streetQuery | Введенная часть искомой улицы |
В ответ возвращаются варианты улицы (использовать значение value)
успех:
{
"success": true,
"suggestions": [
{
"value": "ул Ленинский проспект",
"unrestricted_value": "г Москва, Ленинский проспект",
"data": {
.... прочие детали варианта
}
}
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/prompter/location
Подсказка населенного пункта
/api/prompter/location
Для запроса необходимо выполнить следующий запрос
/api/prompter/location?query=москва
опциональный параметр - include_foreign=true/false - позволяет искать только по России или включая зарубежные страны (если поиск по зарубежью активирован для данной учетной записи)
опциональный параметр - country=FR - позволяет искать, например, только по Франции. Для зарубежных стран при этом подсказка будет выдаваться на латинице. Если параметр не передан, то поиск происходит только по России.
В ответ возвращается
успех:
{
"success": true,
"suggestions": [
{
"value": "г Магадан",
"unrestricted_value": "Магаданская обл, г Магадан",
"data": {
"postal_code": "685000",
"country": "Россия",
"region_fias_id": "9c05e812-8679-4710-b8cb-5e8bd43cdf48",
"region_kladr_id": "4900000000000",
"region_with_type": "Магаданская обл",
"region_type": "обл",
"region_type_full": "область",
"region": "Магаданская",
"area_fias_id": null,
"area_kladr_id": null,
"area_with_type": null,
"area_type": null,
"area_type_full": null,
"area": null,
"city_fias_id": "cb8ae35a-93df-4133-b377-50f3698c8b5e",
"city_kladr_id": "4900000100000",
"city_with_type": "г Магадан",
"city_type": "г",
"city_type_full": "город",
"city": "Магадан",
"city_area": null,
"city_district": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_with_type": null,
"city_district_type": null,
"city_district_type_full": null,
"settlement_fias_id": null,
"settlement_kladr_id": null,
"settlement_with_type": null,
"settlement_type": null,
"settlement_type_full": null,
"settlement": null,
"street_fias_id": null,
"street_kladr_id": null,
"street_with_type": null,
"street_type": null,
"street_type_full": null,
"street": null,
"house_fias_id": null,
"house_kladr_id": null,
"house_type": null,
"house_type_full": null,
"house": null,
"block_type": null,
"block_type_full": null,
"block": null,
"flat_type": null,
"flat_type_full": null,
"flat": null,
"flat_area": null,
"square_meter_price": null,
"flat_price": null,
"postal_box": null,
"fias_id": "cb8ae35a-93df-4133-b377-50f3698c8b5e",
"fias_level": "4",
"kladr_id": "4900000100000",
"capital_marker": "2",
"okato": "44401000000",
"oktmo": "44701000001",
"tax_office": "4900",
"tax_office_legal": "4900",
"timezone": null,
"geo_lat": "59.5681332",
"geo_lon": "150.8084956",
"beltway_hit": null,
"beltway_distance": null,
"qc_geo": "4",
"qc_complete": null,
"qc_house": null,
"unparsed_parts": null,
"qc": null,
"history_values": null,
"source": "Магадан, Магаданская обл"
}
}
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/prompter/iplocation
Определение населенного пункта по IP адресу
/api/prompter/iplocation
Для запроса необходимо выполнить следующий запрос
/api/prompter/iplocation?ip=87.250.250.242
параметр ip - опциональный, если не задан, то определяется на сервере автоматически
В ответ возвращается
успех:
{
"success": true,
"ip": "87.250.250.242", //ip из параметра
"sourceIp": "87.250.250.242", //ip, определённый сервером
"suggestions": [
{
"value": "г Москва",
"unrestricted_value": "101000, г Москва",
"data": {
"postal_code": "101000",
"country": "Россия",
"countryCode": "RU",
"region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"region_kladr_id": "7700000000000",
"region_with_type": "г Москва",
"region_type": "г",
"region_type_full": "город",
"region": "Москва",
"area_fias_id": null,
"area_kladr_id": null,
"area_with_type": null,
"area_type": null,
"area_type_full": null,
"area": null,
"city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"city_kladr_id": "7700000000000",
"city_with_type": "г Москва",
"city_type": "г",
"city_type_full": "город",
"city": "Москва",
"city_area": null,
"city_district": null,
"city_district_fias_id": null,
"city_district_kladr_id": null,
"city_district_with_type": null,
"city_district_type": null,
"city_district_type_full": null,
"settlement_fias_id": null,
"settlement_kladr_id": null,
"settlement_with_type": null,
"settlement_type": null,
"settlement_type_full": null,
"settlement": null,
"street_fias_id": null,
"street_kladr_id": null,
"street_with_type": null,
"street_type": null,
"street_type_full": null,
"street": null,
"house_fias_id": null,
"house_kladr_id": null,
"house_type": null,
"house_type_full": null,
"house": null,
"block_type": null,
"block_type_full": null,
"block": null,
"flat_type": null,
"flat_type_full": null,
"flat": null,
"flat_area": null,
"square_meter_price": null,
"flat_price": null,
"postal_box": null,
"fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"fias_level": "1",
"kladr_id": "7700000000000",
"capital_marker": "0",
"okato": "45000000000",
"oktmo": "45000000",
"tax_office": "7700",
"tax_office_legal": "7700",
"timezone": null,
"geo_lat": "55.7540471",
"geo_lon": "37.620405",
"beltway_hit": null,
"beltway_distance": null,
"qc_geo": "4",
"qc_complete": null,
"qc_house": null,
"unparsed_parts": null,
"qc": null,
"history_values": null,
"source": null
}
}
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/check_pickup_location
Проверка адреса сбора на возможность обслуживания (публичный)
/api/lite/pub/check_pickup_location
Запрос
Параметр |
Тип\формат | Описание |
regionFias |
string | Код региона населенного пункта по базе ФИАС. Получается ранее из поля region_fias_id подсказки (см. метод /api/prompter/location). |
areaFias |
string | Код области населенного пункта по базе ФИАС. Получается ранее из поля area_fias_id подсказки |
cityFias |
string | Код города населенного пункта по базе ФИАС. Получается ранее из поля city_fias_id подсказки |
settlementFias |
string | Код населенного пункта населенного пункта по базе ФИАС. Получается ранее из поля settlement_fias_id подсказки |
fullAddress |
string | Полное название населенного пункта по базе ФИАС. Получается ранее из поля unrestricted_value подсказки |
Результат запроса
Параметр |
Тип\формат | Описание |
pickup_point_available |
boolean |
Флаг доступности указанного в запросе населенного пункта для сбора заказов |
Пример результата запроса
{
"success": true,
"pickup_location_available": true
}
/api/lite/pub/products/dimensions
Получение габаритов условного минимального упакованного места
/api/lite/pub/products/dimensions
Получение габаритов минимальной условной коробки, в которую поместятся указанные товары с указанным количеством.
Не привязано к возможными габаритам типовых коробок или другим параметрам. Только математическое моделирование коробки с предпочтительным соотношением сторон 3:3:2
Поиск идет сначала по variantId, если он непустой, затем по variantExtId
Пример:
{
"items":[
{
"variantId":"1060",
"variantExtId":"1060",
"quantity": 22
},
{
"variantId":"1182",
"variantExtId":"1182",
"quantity": 3
}
]
}
Пример успешного ответа
{
"success": true,
"weight": 223,
"dimensions": {
"height": 40,
"width": 40,
"depth": 20
}
}
Пример ошибки
{
"success": false,
"errors": [
{
"code": 0,
"message": "Не найден id 555"
}
],
"weight": null,
"dimensions": null
}
/api/lite/pub/dimensions (deprecated)
Получение габаритов упаковки товаров (deprecated)
новый метод: /api/lite/pub/products/dimensions
/api/lite/pub/dimensions
По перечню товаров получает примерные габариты и массу упакованного места для указанного перечня
Запрос:
{
"items": [
{
"id": "1002",
"quantity": 1
},
{
"id": "1003",
"quantity": 3
}
]
}
Успех:
{
"success": true,
"weight": 357,
"dimensions": {
"height": 12,
"width": 20,
"depth": 23
}
}
Ошибка:
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/dimensions-by-package
Получение габаритов упаковки товаров по перечню параметров упаковок
/api/lite/pub/dimensions-by-package
По перечню упаковок получает примерные габариты и массу упакованного места
Запрос:
{
"items": [
{
"weight": 357, // в граммах
"quantity": 2, // в штуках
"dimensions": {
"height": 12, // в сантиметрах
"width": 20,
"depth": 23
}
},
{
"weight": 680,
"quantity": 1,
"dimensions": {
"height": 3,
"width": 20,
"depth": 4
}
}
]
}
Успех:
{
"success": true,
"weight": 357,
"dimensions": {
"height": 12,
"width": 20,
"depth": 23
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Значение поля quantity во всех позициях должно быть > 0"
}
]
}
/api/dlv/tariffs
Расчет тарифов (/api/dlv/tariffs)
/api/dlv/tariffs
Выполняет расчет доставки от пункта сбора заказов до указанного в виджете адреса доставки (в виде fias кодов) по указанным параметрам. Если sourceRegionFias, sourceAreaFias, sourceCityFias и sourcePostalCode не заданы - адрес отправления берётся из настроек точки сбора
fromTempoline - Заказ будет отправлен с нашего склада.
Для тарификации по России - нужны Фиас коды адреса получателя, для тарификации зарубежных адресов доставки - компоненты адреса Код страны, регион, город, населенный пункт.
При поиске тарифов для зарубежного города обязательно передавать поля country, region, city (также area, settlement, если есть).
Пример
{
"fromTempoline": false,
"sourceRegionFias": null,
"sourceAreaFias": null,
"sourceCityFias": null,
"sourceSettlementFias": null,
"sourcePostalCode": null,
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null,
"postalCode": "123456",
"weight": 1450,
"insuranceSum": 500, // оценочная стоимость товара для расчета суммы страховки (чаще всего передают 100% от стоимости товара)
"codSum": 500, // сумма наложенного платежа, которую курьерская компания возьмёт с покупателя, следует передавать стоимость доставки+ стоимость товаров в случае если оплата при получении.
"dimensions": {
"height": 10,
"width": 8,
"depth": 8
},
"deliveryServices": [
"PARTIAL_DELIVERY",
"TRYING"
], //опциональный список требующихся допуслуг: Частичный выкуп, Примерка, Погрузо-разгрузочные работы на руках (ПРР).
"floor": 15 //Этаж подъёма для ПРР. В случае, если указан "LIFT_TO_DOOR_MANUAL" в deliveryServices, этаж нужно указывать обязательно
}
Успех:
{
"success": true,
"tariffs": [
{
"minDeliveryTime": 5, // минимальный срок доставки после передачи заказа курьерской службе (в днях)
"maxDeliveryTime": 6, // максимальный срок доставки после передачи заказа курьерской службе (в днях)
"courier": "PickPoint", // наименование курьерской службы для покупателя
"deliveryCode": "123456", // код тарифа
"courierCode": "PICKPOINT", // код курьерской службы (из справочника)
"contractNumber": "443-12", // доп. код тарифа
"type": "PVZ", // тип доставки (курьером или в ПВЗ) // COURIER, RUSSIAN_POST, SELF_PICKUP
"price": 817.1, // суммарная стоимость доставки для отправителя
"codPrice": 0, //стоимость агентского вознаграждения курьерской службы за перевод денежных средств за наложенный платёж
"deliveryPrice": 742.1, // тариф за доставку в место назначение с учётом веса/габаритов
"deliveryServices": [
{
"price": 956.64,
"service": "BOX_NEEDED"
},
{
"price": 0,
"service": "TRYING"
},
{
"price": 0,
"service": "REVERSE"
},
{
"price": 0,
"service": "LIFT_TO_DOOR"
},
{
"price": 0,
"service": "LIFT_TO_DOOR_MANUAL"
},
{
"price": 40,
"service": "CHECK_CONTENT"
}
], //доп.услуги доставки, если есть // могут включать PERSONALLY_IN_HANDS, REVERSE, CONTACTLESS_DELIVERY, DELIVERY_DATE_APPROVE, DANGEROUS_CARGO, WAITING_ON_ADDRESS, TEMPERATURE_REGIME, VERIFY, DAY_OFF_DELIVERY, PARTIAL_DELIVERY, LIFT_TO_DOOR, TRYING, CHECK_CONTENT, LIFT_TO_DOOR_MANUAL
"insurancePrice": 75, // стоимость страховки для заказа у курьерской службы
"paymentMethods": ["COD_CARD", "ONLINE"] // доступные способы оплаты
},
{
"minDeliveryTime": 1,
"maxDeliveryTime": 1,
"courier": "Почта России",
"courierCode": "RUSSIAN_POST_TEMPOLINE",
"deliveryCode": "RUSSIAN_POST_TEMPOLINE",
"contractNumber": "s-2333",
"type": "RUSSIAN_POST",
"price": 1736.6,
"codPrice": 0,
"deliveryPrice": 1733.6,
"deliveryServices": [],
"insurancePrice": 3,
"paymentMethods": ["COD_CARD"]
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/dlv/delivery_points
Список постаматов / ПВЗ
/api/dlv/delivery_points
Выполняет поиск постаматов/ПВЗ в указанном в виджете адресе города/населенного пункта (в виде fias кодов)
Пример:
{
"regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null,
"countryCode": "RU",
"region": null, // Заполняется, если countryCode задан и не RU
"area": null, // Заполняется, если countryCode задан и не RU
"city": null, // Заполняется, если countryCode задан и не RU
"settlement": null, // Заполняется, если countryCode задан и не RU
"courierCode": "PickPoint", - опциональный параметр для запроса ПВЗ/постаматов только по данной КС. Пока актуальны значения "PickPoint", "Boxberry"
"dimensions":{ - опционально фильтр по доступным габаритам в ПВЗ
"height":50, - в см
"width":50,
"depth":50
},
"weight": 6505, - в граммах - опционально фильтр по доступной предельной массе груза в ПВЗ
"codSum": 1234, - в рублях - опционально - сумма наложенного платежа, если ненулевая
"deliveryServices":["PARTIAL_DELIVERY", "TRYING"] - опциональный список требущихся допуслуг: Частичный выкуп, Примерка.
}
Успех:
{
"success": true,
"list": [
{
"address": {
"regionFias":"18133adf-90c2-438e-88c4-62c41656de70",
"areaFias":"b502ae45-897e-4b6f-9776-6ff49740b537",
"cityFias":"",
"settlementFias":"",
"country": "RU",
"region": "Москва",
"area": "",
"city": "Москва",
"settlement": "",
"street": "Боровское ш.",
"house": "20",
"block": "",
"building": "",
"flat": "120",
"fullAddress": "Москва, Боровское ш., 20, 120",
"zip": ""
}
"metroStation": "Боровское шоссе",
"latitude": "54.508904",
"longitude": "36.262823",
"code": "4005-002",
"courier": "PickPoint",
"description": "Постамат расположен в супермаркете Фикс-Прайс, вотдельно стоящем здании. Транспорт: Автобус №12, 61, 85, 97; Троллейбус №5, 12; Маршрутное такси №95, 97. Остановка Библиотека им. Белинского.\nВойти в здание через центральный вход. Постамат и терминал расположен на 2 этаже в супермаркете Фикс-Прайс.",
"maxSize": "43x23.4x34",
"maxWeight": 1500,
"courierCode": "PICKPOINT",
"workTime": "Пн-Вс 10:00-19:00, Обед 10:00-19:00",
"paymentMethods": ["COD_CARD", "ONLINE"],
"deliveryServices":["PARTIAL_DELIVERY", "TRYING"],
"type": "Postamat"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/dlv/delivery_point
Данные по одному ПВЗ
/api/dlv/delivery_point
Выполняет поиск одного ПВЗ по коду курьерской службы и коду ПВЗ
Пример:
{
"courierCode": "PickPoint",
"pvzCode":"7302-015"
}
Успех:
{
"success": true,
"list": [
{
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Ульяновская",
"area": null,
"city": "Ульяновск",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Рябикова ул., д. 21, стр. 1",
"fullCity": null,
"rawData": null,
"zip": "432045",
"regionFias": "fee76045-fe22-43a4-ad58-ad99e903bd58",
"areaFias": null,
"cityFias": "bebfd75d-a0da-4bf9-8307-2e2c85eac463",
"settlementFias": null
},
"metroStation": "",
"latitude": "54.284595",
"longitude": "48.30217",
"code": "7302-015",
"courier": "PickPoint",
"description": "Пункт выдачи заказов расположен в ТЦ Вавилон. Транспорт: Маршрутное такси №4, 5, 43, 50, 52, 61, 71, 77, 81, 88, 96. Остановка Улица Станкостроителей.\nВойти в ТЦ Вавилон через центральный вход, на 2 этаже расположен пункт выдачи заказов.",
"maxSize": "180",
"maxWeight": 15,
"workTime": "Пн-Пт 11:00-18:30, Сб 12:00-16:00",
"paymentMethods": [
"COD_CASH",
"COD_CARD"
]
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/tariffs
Расчет тарифов приватный
/api/lite/tariffs
Метод тарификации для вызова из ЛК (приватного доступа).
Сигнатура полностью идентична публичному методу api/dlv/tariffs
Отличие - в ответе могут быть включены тарифы, которые публично недоступны. но каналы доставки которых активны.
В этом методе доступно поле dlvPrice, содержащее исходную цену от DLV
/api/lite/delivery_points
Список постаматов / ПВЗ
/api/lite/delivery_points
Метод списка ПВЗ для вызова из ЛК (приватного доступа).
Сигнатура полностью идентична публичному методу api/dlv/delivery_points
/api/lite/delivery_point
Данные по одному ПВЗ
/api/lite/delivery_point
Метод загрузки одного ПВЗ для вызова из ЛК (приватного доступа).
Сигнатура полностью идентична публичному методу api/dlv/delivery_point
/api/prompter/region
Подсказка улицы для заданного населенного пункта
/api/prompter/region
Для запроса необходимо передать введенные пользователем буквы искомого региона:
/api/prompter/region?query=Рязан
В ответ возвращаются варианты улицы (использовать значение value)
успех:
{
"success": true,
"suggestions": [
{
"value": "Рязанская область",
"unrestricted_value": "Рязанская область",
"data": {
.... прочие детали варианта
}
}
]
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/prompter/countries
Список стран
/api/prompter/countries
(метод требует авторизации по домену)
Выводит список стран с их кодами
Пример ответа:
{
"countries": [
{
"title": "Россия",
"code": "RU"
},
{
"title": "Беларусь",
"code": "BY"
},
{
"title": "Казахстан",
"code": "KZ"
},
...
]
}
Описание методов (old)
Описание методов (old)
Запрос данных аккаунта (публичный)
/api/lite/pub/account_info
Документация обновляется.
Получение информации по предзаказу (публичный)
/api/lite/pub/order
Документация обновляется.
Создание / обновление товарного предложения
/api/lite/offer
создает или обновляет (если задан sku.humanID) товарное предложение
Запрос:
{
"sku": {
"id": "12345", - опциональный параметр, только для обновления существующего предложения. значение генерируется при создании предложения.
"shortName": "краткое наименование",
"fullName": "полное наименование",
"article": "234234",
"description": "описание"
},
"price": 33.45,
"discountPrice": 20,
"weight": 357, - единица измерения: грамм
"dimensions":{
"height":12, - единица измерения: сантиметр
"width":20, - единица измерения: сантиметр
"depth":8 - единица измерения: сантиметр
},
"enabled":true,
"pos": 123.456
}
Успех:
{
"success": true,
"humanId": "12345"
}
Ошибка:
/api/lite/offer/pos
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Обновление позиции товарного предложения
/api/lite/offer/pos
Обновляет значение позиции для сортировки предложений в списке
Запрос:
{
"id": "1002",
"pos": 123.456
}
Ответ:
{
"success": true
}
Создание картинки к товарному предложению
/api/lite/offer/image
Загружает на сервер картинку и привязывает изображение к товару.
Используется заголовок запроса Content-type: multipart/form-data.
В качестве параметров запроса передается:
- id - идентификатор товара
- upfile - картинка
На стороне сервера:
- Сохраняется оригинал картинки (но с ограничением в максимальное количество пикселей) - original
- Сохраняется обрезанное изображение 1х1 (ближе к центру) - cropper
- Сохраняется миниатюра обрезанного изображения - thumbnail
В ответ возвращается информация о загруженной картинке:
Успех:
{
"success": true,
"image": {
"orig": "https://img.kak2c.ru/g/d/123abc.jpg",
"crop": "https://img.kak2c.ru/g/d/123abc_crop.jpg",
"prev": "https://img.kak2c.ru/g/d/123abc_p.jpg",
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
"pos": 123.456,
"crop_p": [
10,
500,
400,
150
]
}
}
Параметры:
- orig - прямая ссылка на оригинал картинки
- crop - прямая ссылка на кропнутое изображение
- prev - прямая ссылка
- id - идентификатор картинки (для последующего обновления или удаления)
- crop_p - координаты кропнутого изображения относительно оригинала (topLeftX, topLeftY, bottomRightX, bottomRightY)
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Загрузка картинки без привязки к предложению
/api/lite/image
Загружает на сервер картинку в исходных размерах без сжатия.
Используется заголовок запроса Content-type: multipart/form-data.
В качестве параметров запроса передается:
- upfile - картинка
На стороне сервера:
- Сохраняется оригинал картинки (без ограничений) - original
В ответ возвращается информация о загруженной картинке:
Успех:
{
"success": true,
"orig": "https://img.kak2c.ru/g/d/123abc.jpg"
}
Параметры:
- orig - прямая ссылка на оригинал картинки
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Обновление кропа картинки к товарному предложению
/api/lite/offer/image/crop
Обновляет параметры кропа (обрезки) у картинки товарного предложения.
Запрос:
{
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
"crop_p": [
10,
500,
400,
150
]
}
В ответ возвращается результат операции, id обновленной картинки и новый url на кропнутое изображение и превью.
Пример успешного ответа:
{
"success": true,
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
"crop": "https://img.kak2c.ru/g/d/123abc_cropped.jpg",
"prev": "https://img.kak2c.ru/g/d/123abc_preview.jpg"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Картинки с указанным id не существует"
}
]
}
Удаление картинки у товарного предложения
/api/lite/offer/image
Для удаления метки, выполняется следующий POST запрос с указанием идентификатора картинки.
Пример запроса:
{
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}
В ответ возвращается результат операции и id удаленной картинки.
Пример успешного ответа:
{
"success": true,
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Картинки с указанным id не существует"
}
]
}
Обновление позиции картинки
/api/lite/offer/image/pos
Обновляет значение позиции для сортировки картинок в списке
Запрос:
{
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
"pos": 123.456
}
Ответ:
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Создание/обновление заказа
/api/lite/order
Создает новый заказ в системе Кактус или обновляет существующий.
Доставка выгружается как позиция в items (id = "delivery").
Цены позиций задаются в запросе.
Пример запроса:
{
"order": {
"comment": "",
"confirmStatus": "NEED_CONFIRM",
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"totalOrderSum": 1212,
"delivery": {
"receiver": {
"name": "Олег",
"surname": "Коробов",
"patronymic": "",
"phone": "9153112255",
"alternativePhone": "",
"email": "korobov.oleg@gmail.com"
},
"deliveryCode": "courier",
"timeFrom": "10:30",
"timeTo": "20:00",
"desiredDeliveryDate": "2018-10-18",
"deliveryComment": "",
"address": {
"regionFias":"18133adf-90c2-438e-88c4-62c41656de70",
"areaFias":"b502ae45-897e-4b6f-9776-6ff49740b537",
"cityFias":"",
"settlementFias":"",
"country": "RU",
"region": "Москва",
"area": "",
"city": "Москва",
"settlement": "",
"street": "Боровское ш.",
"house": "20",
"block": "",
"building": "",
"flat": "120",
"fullAddress": "",
"zip": ""
},
"pickupPointId": ""
},
"items": [
{
"num":1,
"id": "48488",
"quantity": 1,
"price": 1212
}
]
}
}
В ответ возвращается
успех:
{
"success": true,
"orderId": "12345"
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → обновление контактной информации получателя
/api/lite/order/receiver
Возможность обновить только контактную информацию
Запрос:
{
"orderId": "1234",
"name": "Олег",
"surname": "Коробов",
"patronymic": "",
"phone": "9153112255",
"alternativePhone": "",
"email": "korobov.oleg@gmail.com"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → обновление товарной части
/api/lite/order/items
Возможность обновить только табличную часть заказа
Необходимо в запросе передать новое желаемое состояние табличной части в виде непустого перечня позиций
Запрос:
{
"orderId": "1234",
"items": [
{
"num":1,
"id": "48488",
"quantity": 1,
"price": 1212
}
]
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → отменить
/api/lite/order/cancelled
Производит отмену заказа.
Пример запроса
{
"orderId":"1029"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → пометить оплаченным получателем
/api/lite/order/payment
Ставит статус оплаты покупателем.
Пример запроса
{
"orderId":"1029"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Заказ → снять пометку оплаты заказа получателем
/api/lite/order/payment
Снимает статус оплаты покупателем.
Пример запроса
{
"orderId":"1029"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Пример ошибки:
Документация обновляется.
Заказ → получить акт приема передачи
/api/lite/order/takeout_list
Получение печатной формы в pdf для указанного списка заказов
Печатная форма возвращается в формате base64.
Пример ошибки:
{
"orders": ["1001", "1002", "1003"]
}
Успех:
{
"success": true,
"content" : "base64data"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Оплатить доставку заказа/заказов
/api/lite/order_delivery_payment
Производит списание средств за доставку указанных заказов.
После успешного списания - создает заявку на сбор курьером на указанную дату. Если заявка уже есть - новая не создается. Если на указанную дату заявку оформить уже нельзя (опоздал) - автоматом создается заявка на ближайшую возможную дату.
{
"orders": ["1005", "1008"],
"date": "2018-01-01", - обязательные для всех способов отгрузки кроме Своих курьеров
"timeFrom": "09:00", - см выше
"timeTo": "14:00", - см выше
"courierId": "aa23s" - обязательный только для способа отгрузки Свои курьеры
}
Успех:
Возвращается дата и интервал запрошенного приезда курьера.
{
"success": true,
"date": "2018-01-01",
"timeFrom": "09:00",
"timeTo": "14:00"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Отменить оплату доставки заказа/заказов
/api/lite/order_delivery_payment
Пока не реализуем этот метод.
Вариант:
Производит отмену списания с баланса доставки указанных заказов, если по ним не было статусов от GD по сбору. Если какие то статусы по заказу поступали от GD - значит они уже забрали груз - тогда все заказы данного реестра отгрузки автоматом помечаются отгруженными и вернуть сумму по ним нельзя.
Оформить вызов курьера
/api/lite/courier_call
Создает заявку на сбор курьером на указанную дату. Если заявка уже есть - возвращает ошибку, что заявка уже есть.
Пример ошибки:
{
"date": "2018-01-01",
"timeFrom": "09:00",
"timeTo": "14:00"
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Отменить вызов курьера
/api/lite/courier_call
Отменяет заявку на вызов курьера, если заявка на эту дату и интервал есть. если заявки нет - возвращает ошибку.
Пример ошибки:
{
"date": "2018-01-01",
"timeFrom": "09:00",
"timeTo": "14:00"
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить список транзакций
/api/lite/transaction
Получение списка транзакций баланса аккаунта.
Пример ошибки:
{
"transactions":[
{
"date": "2019-03-01 17:53:23.538",
"sum": 1500.50,
"documentId": "1003",
"documentType": "PAYMENT",
"description": "Пополнение баланса по счету", // из справочника
"orderId": null
},
{
"date": "2019-03-02 19:57:23.538",
"sum": -265.57,
"documentId": "1050",
"documentType": "ORDER_PAYMENT_DOC_FACT",
"description": "Оплата доставки заказа 1024 (доставка)", // в скобках - справочник статей расхода: доставка, страховка, наложенный платеж
"orderId": "1024"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить список транзакций по заказу
/api/lite/order/transaction
Получение списка транзакций баланса оплаты доставки и услуг указанного заказа
запрос должен содержать параметр orderId с номером заказа, например
?orderId=1020
Результат запроса:
{
"transactions":[
{
"date": "2019-03-02 19:57:23.538",
"sum": -265.57,
"documentId": "1050",
"documentType": "ORDER_EXPENSE_PAYMENT_DOC",
"description": "Списание по расходам на оплату услуг заказа 1020 (доставка)",
"orderId": "1020"
},
{
"date": "2019-03-02 19:57:23.538",
"sum": 265.57,
"documentId": "1052",
"documentType": "ORDER_PAYMENT_DOC_FACT",
"description": "Оплата доставки заказа 1020 (доставка)",
"orderId": "1020"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Создать счет на оплату и получить информацию для оплаты
/api/lite/payment
Запрос:
{
"sum" : "222"
}
Ответ:
{
"success": true,
"errors": [],
"redirectData": {
"data": {
"entries": [
{
"num": 0,
"name": "MERCHANT",
"value": "kaktwocr"
},
{
"num": 1,
"name": "ORDER_REF",
"value": "25567175-8d84-e371-90fa-8a6e86a69aa4"
},
{
"num": 2,
"name": "ORDER_DATE",
"value": "2019-03-11 17:09:35"
},
{
"num": 3,
"name": "ORDER_PNAME[]",
"value": "Пополнение баланса аккаунта №6419855"
},
{
"num": 4,
"name": "ORDER_PCODE[]",
"value": "balance"
},
{
"num": 5,
"name": "ORDER_PRICE[]",
"value": "222.00"
},
{
"num": 6,
"name": "ORDER_QTY[]",
"value": "1"
},
{
"num": 7,
"name": "ORDER_VAT[]",
"value": "0"
},
{
"num": 8,
"name": "PRICES_CURRENCY",
"value": "RUB"
},
{
"num": 9,
"name": "DESTINATION_CITY",
"value": ""
},
{
"num": 10,
"name": "DESTINATION_STATE",
"value": ""
},
{
"num": 11,
"name": "DESTINATION_COUNTRY",
"value": ""
},
{
"num": 12,
"name": "PAY_METHOD",
"value": "CCVISAMC"
},
{
"num": 13,
"name": "ORDER_PRICE_TYPE[]",
"value": "GROSS"
},
{
"num": 14,
"name": "ORDER_HASH",
"value": "6fe466d056fcc82836a861c322070381"
},
{
"num": 15,
"name": "BILL_FNAME",
"value": "Петр"
},
{
"num": 16,
"name": "BILL_LNAME",
"value": "Петров"
},
{
"num": 17,
"name": "BILL_EMAIL",
"value": "abc3@abc.ru"
},
{
"num": 18,
"name": "BILL_PHONE",
"value": "111111"
},
{
"num": 19,
"name": "BILL_COUNTRYCODE",
"value": "RU"
},
{
"num": 20,
"name": "BACK_REF",
"value": ""
},
{
"num": 21,
"name": "LANGUAGE",
"value": "RU"
},
{
"num": 22,
"name": "CURRENCY",
"value": "RUB"
}
],
"url": "https://sandbox.payu.ru/order/lu.php"
},
"paymentProvider": "PAYU"
}
}
Для работы в песочнице PayU использовать карты из https://secure.payu.ru/docs/integration-sandbox/ru/
Пример формы, которую нужно сгенерировать на клиенте:
<html>
<head></head>
<body>
<form name="example" method="POST" action="https://sandbox.payu.ru/order/lu.php">
<input type="hidden" name="MERCHANT" value="kaktwocr">
<input type="hidden" name="ORDER_REF" value="25567175-8d84-e371-90fa-8a6e86a69aa4">
<input type="hidden" name="ORDER_DATE" value="2019-03-11 17:09:35">
<input type="hidden" name="ORDER_PNAME[]" value="Пополнение баланса аккаунта №6419855">
<input type="hidden" name="ORDER_PCODE[]" value="balance">
<input type="hidden" name="ORDER_PRICE[]" value="222.00">
<input type="hidden" name="ORDER_QTY[]" value="1">
<input type="hidden" name="ORDER_VAT[]" value="0">
<input type="hidden" name="PRICES_CURRENCY" value="RUB">
<input type="hidden" name="DESTINATION_CITY" value="">
<input type="hidden" name="DESTINATION_STATE" value="">
<input type="hidden" name="DESTINATION_COUNTRY" value="">
<input type="hidden" name="PAY_METHOD" value="CCVISAMC">
<input type="hidden" name="ORDER_PRICE_TYPE[]" value="GROSS">
<input type="hidden" name="ORDER_HASH" value="6fe466d056fcc82836a861c322070381">
<input type="hidden" name="BILL_FNAME" value="Петр">
<input type="hidden" name="BILL_LNAME" value="Петров">
<input type="hidden" name="BILL_EMAIL" value="abc3@abc.ru">
<input type="hidden" name="BILL_PHONE" value="111111">
<input type="hidden" name="BILL_COUNTRYCODE" value="RU">
<input type="hidden" name="BACK_REF" value="">
<input type="hidden" name="LANGUAGE" value="RU">
<input type="hidden" name="CURRENCY" value="RUB">
<button type="submit">Оплатить</button>
</form>
</body>
</html>
Получить список своих курьеров
/api/lite/own_courier
Получение списка своих курьеров.
Пример ошибки:
{
"couriers":[
{
"id": "123456abc",
"fullName": "Василий",
"phone": "+7(901)1122121"
},
{
"id": "123457abc",
"fullName": "Петр",
"phone": "+7(901)1122122"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Создать/обновить своего курьера
/api/lite/own_courier
Создание или обновление (если задан id) своего курьера
Пример запроса:
{
"id": "123456abc",
"fullName": "Василий",
"phone": "+7(901)1122121"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Удаление курьера
/api/lite/own_courier
Для удаления курьера, выполняется следующий POST запрос с указанием идентификатора курьера.
Пример запроса:
{
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}
В ответ возвращается результат операции
Пример успешного ответа:
{
"success": true
}
В случае ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "курьера с указанным id не существует"
}
]
}
Заказ - отметить доставку
/api/lite/delivery_result
Для доставки своими курьерами - простановка результата доставки: доставлен/отказ/утеря.
Пример запроса:
{
"orderId": "123456abc",
"result": "DELIVERED", //LOST,RETURNING,RETURNED
"comment": "abcd"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Ответ:
Документация обновляется.
Пример ошибки:
Документация обновляется.
Записать данные собственного аккаунта Робокасса
/api/lite/settings/payment/robokassa
Записать данные аккаунта робокасса для прямого зачисления оплат заказов покупателей.
Пример запроса:
{
"merchantId": "abcd",
"accountSecret": "abcd",
"accountSecret2": "abcd"
}
Результат запроса:
{
"success":true,
"accountId": "abcd",
"resultUrl": "abcd", - основной адрес приема ipn уведомлений (только оплаченные)
"failUrl": "abcd", - адрес приема ipn уведомлений (только неоплаченные/отказ покупателя)
"successesUrl": "abcd" - адрес редиректа в магазин после оплаты
}
Ошибка:
Документация обновляется.
Получить макет витрины(публичный)
/api/lite/pub/settings/template
Получение макета витрины магазина аккаунта, в формате, предназначенном для ui витрины
Результат запроса:
{
"templates" : [
{
"id": "123456",
"isDefault": true,
"htmlContent": "<html>...."
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить макеты витрин
/api/lite/settings/template
Получение перечня макетов витрин магазинов аккаунта, в формате, предназначенном для ui конструктора витрины
Для получения одного макета по id - использовать параметр в url вида ?id=123456
Результат запроса:
{
"templates" : [
{
"id": "123456",
"isDefault": true,
"content": "contentData...."
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Создать/обновить макет витрины
/api/lite/settings/template
Создание/обновление данных о макете витрины в формате для ui конструтора
Пример запроса:
{
"id": "123456", // при наличии параметра - обновляет существующий макет по его id
"isDefault": true,
"content": "contentData....",
"htmlContent": "html content Data"
}
Результат запроса:
{
"success": true,
"id": "123456"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Удалить макет витрины
/api/lite/settings/template
Удаление одного макета. Использовать параметр в url вида ?id=123456
Результат запроса:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить общие макеты витрин
/api/lite/settings/template/general
Получение перечня стандартных макетов витрин магазинов в формате, предназначенном для ui конструктора витрины
Для получения одного макета по id - использовать параметр в url вида ?id=123456
Результат запроса:
{
"templates" : [
{
"id": "123456",
"isDefault": true,
"content": "contentData...."
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить общие шаблоны блоков витрин
/api/lite/settings/template/block
Получение перечня стандартных блоков витрин магазинов в формате, предназначенном для ui конструктора витрины
Для получения одного блока по id - использовать параметр в url вида ?id=123456
Результат запроса:
{
"blocks": [
{
"id": "f4173840-f409-424d-a000-24542b391c5d",
"name": "block name",
"content": "contentData...."
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить заявки на сбор
/api/lite/gather
Получение списка заявок на сбор, сортировка - свежие по полю date - сначала
Результат запроса:
{
"gathers": [
{
"success": true,
"comment": null,
"id": "1000-GD",
"date": "2019-03-07 12:37:18",
"desiredDate": "2019-03-15",
"desiredHourStart": "09:00",
"desiredHourEnd": "14:00",
"status": "AWAITING_CARGO", //CREATED,CARGO_SHIPPED,HOLD,CANCELED
"trackingNumber": "100039439"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Получить варианты курьерских пакетов
/api/lite/pub/courier_pack
Получение списка доступных типов курьерских пакетов с размерами
Результат запроса:
{
"courier_packs": [
{
"success": true,
"type": "PACKET", // PAPERBOX
"sizeType": "S", // M/L
"cargoWeight": 1500, // максимальный вес содержимого в граммах
"dimensions": {
"height": 12,
"width": 20,
"depth": 8
}
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Создать пользователя для Expert
/api/lite/settings/go-expert
Метод только для админов системы. Генерирует для аккаунта Lite нового пользователя чтобы под ним можно было рабоатть в интерфейсе Expert.
Логин равен логину исходного аккаунта (тенанта) + суффикс "-expert", например: manager@shop.ru-expert
Пароль равен паролю исходного аккаунта. При смене пароля исходного пользователя - expert логин останется с прошлым паролем.
Параметр URL: ?с=123 - проверочный код.
Результат запроса:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/pub/settings/catalog
Получение текущего основного каталога
/api/lite/pub/settings/catalog
Пример успешного ответа:
{
"success": true,
"name": "Каталог 1",
"code": "1000",
"items": [
{
"title": "Смартфоны iPhone",
"code": null,
"collectionId": "1026",
"defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
"items": null
}
]
}
Методы API для системы "Кактус"
api/lite/courier_callЧасть методов представлена из "надстройки" – Кактус Лайт (/api/lite/*), часть методов относится к работе подсказок (/api/prompter/*), а часть к работе механизма по доставкам.
Необходимо во всех вызовах, содержащих /pub, /dlv, /prompter, кроме регистрации и авторизации, (например /api/lite/pub/order) указывать имя текущего домена в заголовках запроса (Header) в параметре Domain. Если в вызове нет /pub, /dlv, /prompter - (например /api/lite/offer) - то нужно указывать токен доступа, полученный в методе регистрации/авторизации.
Запрос | Метод | Авторизация | Описание | Разработано | Комментарии для бэкенда |
---|---|---|---|---|---|
Создание нового аккаунта Кактус Lite | POST /api/lite/pub/register | нет | public | ✓ | |
Запрос на сброс пароля Кактус Lite | POST /api/lite/pub/password_reset | нет | public | ✓ | |
Сброс пароля | POST /api/lite/pub/password_reset_confirm | нет |
public, защита по временному токену сброса пароля
|
✓ | |
Методы для автоподсказок по вводу адресов | |||||
Подсказка населенного пункта |
GET /api/prompter/location | нет | По переданной части населенного пункта, возвращает варианты возможных населенных пунктов | ✓ | |
Подсказка полного адреса | GET /api/prompter/address | нет | По переданной части адреса, возвращает варианты адресов | ✓ | |
Методы для работы CMS составляющий Кактус Лайт | |||||
Запрос данных аккаунта (публичный) |
GET /api/lite/pub/account_info |
нет |
По указанному имени домена получает информацию об аккаунте - только данные для публичного использования. Например, настройки виджета. Также используется для проверки домена на доступность.
|
для проверки доступности домена и его присвоения есть отдельный метод: /api/lite/settings/domainAlias - работает по токену доступа
-публичные настройки виджета: порог бесплатной доставки 2 |
|
Получение информации по заказу | GET /api/lite/pub/order | нет | По указанному домену и номеру заказа, возвращает текущее состояние заказа и публичную информацию | ✓ |
-по новой dto заказа ?требуется маппинг инфостатусов заказа и статусов lite 6 |
Получение информации по предзаказу | GET /api/lite/pub/preorder | нет | Получает информацию по предзаказу (метод доступен только если заказ еще в состоянии предзаказа) |
-по новой dto заказа 2 |
|
Проверка адреса сбора на возможность обслуживания | GET /api/lite/pub/check_pickup_location | нет |
По указанному населенному пункту (код по базе ФИАС), возвращает возможность указание данного адреса как точки сбора.
|
✓ |
в кактусе - нетенантная таблица с фиас кодами доступных городов сбора и опциональными часами сбора залить данные от gd
8 |
Список товарных предложений/предложение | GET /api/lite/pub/offer | нет |
Возвращает список товаров + цены + фото
|
✓ |
-добавить фото
1 |
Создание заказа для виджета | POST /api/lite/pub/order | нет | Для указанного домена, возможность оформить заказ из виджета обычному покупателю | ✓ |
-по новой dto 4 |
Методы для административного интерфейса Кактус Лайт | |||||
Авторизация | POST /api/lite/auth | – |
Создает новую пользовательскую сессию, получая токен. С данным токеном возможно последующее обращение к API. |
✓ | |
Запрос данных аккаунта (админский) |
GET /api/lite/account_info | session token |
Возвращает сведения о текущем аккаунте – имя аккаунта, баланс, настройки и т.п.
|
✓ | |
Информация о датах приезда курьера | GET /api/lite/pickup_dates | session token |
Возвращает информацию о датах приезда курьера за указанный период.
|
-в кактусе из настроек заявок на сбор выбираются ближайшие доступные дни. с учетом города сбора и доступного времени сбора - стоит скопировать реализацию настроек в части календаря в нетенантую область чтобы можно было разом для всех учетных записей лайта править
часы сбора и географию брать в той же таблице как в методе /api/lite/pub/check_pickup_location 5 |
|
Перечень уведомлений для пользователя | GET /api/lite/notifications | session token | Возвращает информацию об уведомлениях для пользователя. Либо по с фильтрацией по последним (с глубиной выборки), либо по определенному ID сообщения. |
отложили |
|
Сводка по аккаунту | GET /api/lite/brief_report | session token |
Возвращает срез отчетности по аккаунту. Например, информация о заказах (общая). |
-рефакторинг в отдельный сервис имеющихся методов отчетов DevApiController:
reportGetOrderCount, reportGetOrderMeanBill, reportGetOrderSum -вызов этих методов из апи лайта 8 |
|
Запрос списка заказов / определенного заказа |
GET /api/lite/order | session token |
Возвращает информацию о списке заказов, или о конкретном заказе. Возможно задавать фильтрацию, а также требуемый набор полей. |
✓ |
-по новой dto или ее расширенной версии для админа магазина -фильтрация по статусам, меткам, строке(номер заказа, телефон покупателя, фио покупателя) -набор полей, задаваемый в запросе пока не делаем 4 |
Сохранение настроек точки сбора | POST /api/lite/settings/pickup | session token |
Сохраняет информацию об адресе и контактах для сбора заказов
|
✓ | |
Проверка доступности домена 3 уровня | GET /api/lite/settings/domainAlias | session token | Проверка свободного желаемого домена 3 уровня | ✓ | |
Обновление домена 3 уровня | POST /api/lite/settings/domainAlias | session token | Обновление текущего домена 3 уровня (помимо автосозданного) | ✓ | |
Сохранение настроек уведомлений | POST /api/lite/settings/user_notification | session token |
Сохраняет настройки уведомлений пользователя о событиях
|
отложили | |
Запрос настроек виджета чекаута | GET /api/lite/settings/checkout | Выводит настройки виджета чекаута | ✓ | ||
Сохранение настроек работы виджета чекаута | POST /api/lite/settings/checkout | session token |
Сохраняет настройки виджета чекаута
|
✓ |
-добавить тенантую сущность настроек виджета с указанными полями
2 |
Список товарных предложений/предложение | GET /api/lite/offer | session token |
Возвращает список товаров + цены + фото
|
✓ | |
Создание / обновление товарного предложения | POST /api/lite/offer | session token |
Обновление полей товара, цен, веса, отображения в каталоге
|
✓ |
3 |
Создание/удаление картинки к товару |
POST /api/lite/offer/image DELETE /api/lite/offer/image |
session token | создание картинки к товару с ресайзом / удаление указанной картинки | ✓ |
-интеграция с хранилищем картинок + ресайз картинок
8 |
Обновление параметров кропа картинки к товару | POST /api/lite/offer/image/crop | session token | Обновляет параметры кропа (обрезки) картинки | ✓ | |
Создание/редактирование/удаление метки |
POST /api/lite/tag DELETE /api/lite/tag |
session token | Редактирование меток для заказов | ✓ |
4 |
Получение списка меток | GET /api/lite/tag | session token | Получить все созданные метки заказов | ✓ | 1 |
Создание заказа | POST /api/lite/order | session token |
Возможность создать новый заказ. Также, возможность создать заказ в статусе “Предзаказ”, когда только указана табличная часть, а все остальное должен заполнить покупатель |
✓ |
-если полный заказ: копия метода публичного создания заказа -если предзаказ: не проверять данные заказа не относящиеся к табличной части в OrderDocManager (по наличию домена определить что учетка - лайт и не проверять)
3 |
Заказ → обновление контактной информации получателя |
POST /api/lite/order/receiver | session token |
Имя, телефон, email
|
-используется новая dto заказа -обрабатывается только та ее часть которая относится к указанным данным: в заказе не обновлются никакие иные поля
2 |
|
Заказ → обновление товарной части | POST /api/lite/order/items | session token | Обновить только товарную часть заказа |
-аналогично 2 |
|
Заказ → упаковать | POST /api/lite/order/packing | session token | Помечает заказ упакованным | ✓ |
-вызывается быстрая упаковка в одно место 4 |
Заказ → распаковать | DELETE /api/lite/order/packing | session token | Удаляет упаковку заказа | ✓ |
-распроводит все имеющиеся упакованные места 2 |
Заказ → пометить оплаченным получателем | POST /api/lite/order/payment | session token | Помечает заказ полностью оплаченным | ✓ |
-ставит статус PAID в заказе 1 |
Заказ → снять пометку оплаты заказа получателем | DELETE /api/lite/order/payment | session token |
Удаляет оплату заказа
|
✓ |
-ставит статус PAID в заказе 0 |
Заказ → установить метку на заказе | POST /api/lite/order/tag | session token | Устанавливает метку на заказ | ✓ | 2 |
Заказ → снять метку с заказа | DELETE /api/lite/order/tag | session token | Снимает метку с заказа | ✓ | 2 |
Заказ → получить инвойс + стикер к заказу | GET /api/lite/order/invoice_and_stiker | session token | Получает инвойс для заказа (также содержит стикер) | ✓ |
-dlv - сделать слепленную ПФ (инвойс + стикер), добавить в enum запроса ПФ -кактус: вызывать при упаковке места ПФ с указанным enum -по вызову данного метода апи - возвращение base64 с данными ПФ 3 |
Оплатить доставку заказа/заказов | POST /api/lite/order_delivery_payment | session token |
Блокирует средства с баланса для указанного перечня заказов.
|
-реализовать регистр баланса аккаунта (16) -документ оплаты со статусами подготовлен (средства блокируются) и оплачен (средства списаны) ?требуется описание схемы работы |
|
Отменить оплату доставки заказа/заказов | DELETE /api/lite/order_delivery_payment | session token | Отменяет оплату заказа | ?требуется описание схемы работы | |
Оформить вызов курьера | POST /api/lite/courier_call | session token | Создает в системе заявку на вызов курьера | - не делаем. заявка на вызов курьера автоматом делается при успешной оплате доставки указанных заказов в методе order_delivery_payment | |
Отменить вызов курьера | DELETE /api/lite/courier_call | session token | Удаляет заявку на вызов курьера |
-удаляет по humanId 2 |
|
Получить список транзакций | GET /api/lite/transaction | session token | С фильтрацией по дате, номеру заказу (или номеру трекинга) | ?требуется описание схемы работы | |
Создать счет на оплату и получить информацию для оплаты | POST /api/lite/payment | session token |
Создает новый счет к оплате на указанную сумму, затем возвращает данные для последующей оплаты (PayU)
|
?требуется описание схемы работы | |
Методы для работы с доставкой (в большей степени требуются для работы чекаута) | |||||
Получить тарифы и способы доставки для указанного населенного пункта | GET /api/dlv/tariffs | нет | с фильтрацией по городу (guid ФИАС) - запрос тарифа от точки сбора до указанной точки | ✓ |
-добавить fias код в сущность адреса -авторизация по домену -добавить проксирование в кактусе с возможностью на лету в тарифы добавить процентную и фиксированную часть из настроек виджета данного клиента 4 |
Получить список пунктов выдачи заказов | GET /api/dlv/delivery_points | нет |
с фильтрацией по городу (guid ФИАС) / по курьерской службе, получает доступный список пунктов выдачи заказов. Возможно запрашивать краткий и полный списки, с фильтрацией по ID пункта выдачи. |
✓ |
-авторизация по домену -прокси до dlv по методу запроса постаматов и фильтром по городу (фиас), коду постамата 4 |
/api/lite/pub/order
Получение информации по заказу (публичный)
/api/lite/pub/order
Метод получает информацию о заказе, доступную покупателю. например по ссылке из email
Обязательный параметр: query - содержащий номер (id) заказа.
например, ?id=FF6Z-000017
Результат запроса
Найденный заказ, по форамату аналогичный методу добавления заказа (POST /api/lite/pub/order)
{
"orders": [
{
"success": true,
"comment": "",
"id": "FF6Z-000017",
"date": "2019-06-25 16:48:36",
"updateTs": "2019-06-25 16:48:44.180",
"confirmStatus": "APPROVED",
"paymentStatus": "NOT_PAID",
"status": "NEW",
"paymentMethodCode": "no-cod",
"trackingNumber": null,
"customData": null,
"totalOrderSum": 3715,
"delivery": {
"deliveryCode": "GLOBAL_DELIVERY",
"timeFrom": "09:00",
"timeTo": "20:00",
"desiredDeliveryDate": null,
"deliveryComment": "",
"pickupPointId": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"areaFias": null,
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlementFias": null
},
"receiver": {
"name": "Тест4",
"surname": "",
"patronymic": "",
"phone": "9151321211",
"alternativePhone": "",
"email": ""
},
"type": "COURIER",
"courier": "Global Delivery",
"trackingLink": "https://global-delivery.ru/monitoring/",
"logoUrl": "https://app.kak2c.ru/VAADIN/themes/valo-oms/img/logos/delivery-resized/global_delivery.png"
},
"items": [
{
"num": 1,
"id": "1001",
"quantity": 8,
"price": 237,
"name": "Lavazza Passionale",
"img": "https://img.kak2c.ru/i/c/H/lQS7nFGe_c.png?1561052854",
"variants": null
},
{
"num": 2,
"id": "1002",
"quantity": 5,
"price": 289,
"name": "Lavazza Bio Organic",
"img": "https://img.kak2c.ru/i/C/f/jhqOneIC_c.png?1561052854",
"variants": null
},
{
"num": 3,
"id": "delivery",
"quantity": 1,
"price": 374,
"name": "Доставка",
"img": null,
"variants": null
}
],
"tags": [],
"packings": null,
"expenses": null,
"needCustomerPayment": false,
"customerPaymentInProcess": false,
"promocode": "testpercent",
"promocodeAppliedDiscount": 1169,
"c": "29726802-015c-3c2b-14d2-9f84e1a8be9a"
}
]
}
Копия /api/lite/file/image
Закачка картинки в облако
/api/lite/file/image
Закачка картинки в облако и получение url
Одновременно выполняет ресайз картинки в несколько разрешений, аналогично методу POST /api/lite/products/image
Принимает файл в виде multipart запроса в параметре upfile.
Хедер - только Authorization
Пример из Postman:
Пример ответа:
{
"success": true,
"url": "https://storage.yandexcloud.net/images-k2c/66ac26ec-08b2-4d4a-ae22-44c182847984.jpg",
"id": "66ac26ec-08b2-4d4a-ae22-44c182847984.jpg"
}
Импорт/экспорт
Импорт и экспорт номенклатуры, заказов, итд
/api/lite/import/upload
Загрузка файла номенклатуры (/api/lite/import/upload)
POST /api/lite/import/upload |
---|
/api/lite/import/upload
Используется заголовок запроса Content-type: multipart/form-data.
В качестве параметров запроса передается:
-
templateType - Тип шаблона (SKU, ORDER) - обязательный параметр. Для номенклатуры - значение SKU
- upfile - файл с номенклатурой
После успешной загрузки, возвращается идентификатор загруженного файла, fieldMatching - последнее актуальное сопоставление полей, header - распознанная первая строка, с автоматически примененным сопоставлением полей из fieldMatching, body - несколько первых строк файла с данными (начиная со второй строки), columnMatching - сопоставление номера столбца и распознанного ключа fieldMatching.
Положительный результат запроса:
{
"success":true,
"id":"1002",
"rowsCount":8,
"totalRows":9,
"lastParsedRow":8,
"headerRow":0,
"header":[
{
"matchedId":"id",
"title":"Код в Kak2c",
"id":"0"
},
{
"matchedId":"extId",
"title":"Внешний код",
"id":"1"
},
{
"matchedId":"article",
"title":"Артикул",
"id":"2"
},
{
"matchedId":"shortName",
"title":"Наименование",
"id":"3"
},
{
"matchedId":null,
"title":"Полное наименование",
"id":"4"
},
{
"matchedId":null,
"title":"Штрихкоды",
"id":"5"
},
{
"matchedId":"defaultImage",
"title":"URL картинки",
"id":"6"
},
{
"matchedId":null,
"title":"Код варианта",
"id":"7"
},
{
"matchedId":null,
"title":"Код родительского варианта",
"id":"8"
},
{
"matchedId":null,
"title":"Цвет",
"id":"9"
},
{
"matchedId":null,
"title":"Размер",
"id":"10"
},
{
"matchedId":"VAT",
"title":"Ставка НДС",
"id":"11"
},
{
"matchedId":null,
"title":"Количество (GLOBAL_DELIVERY)",
"id":"12"
},
{
"matchedId":null,
"title":"Количество (Tempoline)",
"id":"13"
},
{
"matchedId":"price",
"title":"Розничная цена",
"id":"14"
},
{
"matchedId":null,
"title":"Цена до скидки",
"id":"15"
},
{
"matchedId":null,
"title":"OZON",
"id":"16"
},
{
"matchedId":null,
"title":"GOODS",
"id":"17"
},
{
"matchedId":null,
"title":"BERU",
"id":"18"
}
],
"body":[
{
"rowNum":1,
"rowBody":{
"0":"1067",
"1":"300212295",
"2":"4620771200101-4",
"3":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
"4":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
"5":"4620771200100",
"6":"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Solomin_field.JPG/1200px-Solomin_field.JPG",
"7":"20%",
"8":"0",
"9":"0",
"10":"",
"11":"",
"12":"",
"13":"100",
"14":"257.00",
"15":"",
"16":"",
"17":"",
"18":""
}
},
{
"rowNum":2,
"rowBody":{
"0":"1049",
"1":"300204695",
"2":"4620771201909-1",
"3":"#Садовый_вар дезинфекция ран, Октябрина Апрелевна 150 гр",
"4":"#Садовый_вар дезинфекция ран, Октябрина Апрелевна 150 гр",
"5":"4620771201893",
"6":"https://img2.wbstatic.net/big/new/9240000/9243894-1.jpg",
"7":"20%",
"8":"0",
"9":"0",
"10":"",
"11":"",
"12":"",
"13":"100",
"14":"77.00",
"15":"",
"16":"",
"17":"",
"18":""
}
}
],
"fieldMatching":{
"isNovelty":"новинка",
"available":"доступен",
"VAT":"ставка ндс",
"description":"описание",
"stockAvailable":"остаток",
"price":"цена",
"id":"id",
"extId":"внешний id",
"variantId":"ид варианта",
"barcode":"штрихкод",
"defaultImage":"url картинки",
"height":"высота",
"brandName":"бренд",
"stockReserved":"резерв",
"productId":"ид продукта",
"oldPrice":"старая цена",
"weight":"вес",
"isBestseller":"хит",
"article":"артикул",
"deleted":"удален",
"depth":"глубина",
"width":"ширина",
"countryOfOrigin":"страна производитель",
"shortName":"наименование",
"price$Цена до скидки":"цена: цена до скидки",
"price$Розничная цена":"цена: розничная цена",
"attribute$material":"атрибут: материал",
"feature$color":"свойство: цвет",
"feature$size":"свойство: размер"
},
"columnMatching":{
"0":"id",
"11":"VAT",
"1":"extId",
"2":"article",
"3":"shortName",
"14":"price",
"6":"defaultImage"
},
"importMethod":"UPDATE",
"replacePictures":false,
"searchField":"ID"
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/import/preview
Получить первые N строк загруженного файла (/api/lite/import/preview)
/api/lite/import/preview
параметр: id (Идентификатор загруженного файла)
например api/lite/import/preview?id=1001
параметр count (количество строк документа. Если не передан, то по умолчанию - 25)
например api/lite/import/preview?id=1001&count=10
Положительный результат запроса:
{
"success":true,
"id":"1001",
"rowsCount":1,
"totalRows":9,
"lastParsedRow":0,
"headerRow":0,
"header":[
{
"matchedId":"id",
"title":"Код в Kak2c",
"id":"0"
},
{
"matchedId":"extId",
"title":"Внешний код",
"id":"1"
},
{
"matchedId":"article",
"title":"Артикул",
"id":"2"
},
{
"matchedId":"shortName",
"title":"Наименование",
"id":"3"
},
{
"matchedId":null,
"title":"Полное наименование",
"id":"4"
},
{
"matchedId":null,
"title":"Штрихкоды",
"id":"5"
},
{
"matchedId":"defaultImage",
"title":"URL картинки",
"id":"6"
},
{
"matchedId":null,
"title":"Код варианта",
"id":"7"
},
{
"matchedId":null,
"title":"Код родительского варианта",
"id":"8"
},
{
"matchedId":null,
"title":"Цвет",
"id":"9"
},
{
"matchedId":null,
"title":"Размер",
"id":"10"
},
{
"matchedId":"VAT",
"title":"Ставка НДС",
"id":"11"
},
{
"matchedId":null,
"title":"Количество (GLOBAL_DELIVERY)",
"id":"12"
},
{
"matchedId":null,
"title":"Количество (Tempoline)",
"id":"13"
},
{
"matchedId":"price",
"title":"Розничная цена",
"id":"14"
},
{
"matchedId":null,
"title":"Цена до скидки",
"id":"15"
},
{
"matchedId":null,
"title":"OZON",
"id":"16"
},
{
"matchedId":null,
"title":"GOODS",
"id":"17"
},
{
"matchedId":null,
"title":"BERU",
"id":"18"
}
],
"body":[
{
"rowNum":1,
"rowBody":{
"0":"1067",
"1":"300212295",
"2":"4620771200101-4",
"3":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
"4":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
"5":"4620771200100",
"6":"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Solomin_field.JPG/1200px-Solomin_field.JPG",
"7":"20%",
"8":"0",
"9":"0",
"10":"",
"11":"",
"12":"",
"13":"100",
"14":"257.00",
"15":"",
"16":"",
"17":"",
"18":""
}
}
],
"fieldMatching":{
"isNovelty":"новинка",
"brandName":"бренд",
"stockReserved":"резерв",
"productId":"ид продукта",
"oldPrice":"старая цена",
"available":"доступен",
"VAT":"ставка ндс",
"description":"описание",
"weight":"вес",
"isBestseller":"хит",
"stockAvailable":"остаток",
"article":"артикул",
"deleted":"удален",
"depth":"глубина",
"price":"розничная цена",
"width":"ширина",
"id":"код в kak2c",
"extId":"внешний код",
"countryOfOrigin":"страна производитель",
"variantId":"ид варианта",
"shortName":"наименование",
"barcode":"штрихкод",
"defaultImage":"url картинки",
"height":"высота"
},
"columnMatching":{
"0":"id",
"11":"VAT",
"1":"extId",
"2":"article",
"3":"shortName",
"14":"price",
"6":"defaultImage"
},
"importMethod":"UPDATE",
"searchField":"ID"
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/import/task
Список заданий(подробная информация по заданию) (/api/lite/import/task)
/api/lite/import/task
Положительный результат запроса:
{
"success": true,
"recordsTotal": 2,
"tasks": [
{
"success": true,
"date": "2020-07-13 18:58:57",
"id": "1002",
"processed": false,
"enqueued": false,
"rowsTotal": 9,
"emptyRowsCount":0,
"lastProcessedRow": 0,
"itemsProcessedCount": 0,
"itemsFailedCount": 0,
"progressPercentage": 0,
"failedRowsNum": "",
"itemsCreatedCount": null,
"itemsUpdatedCount": null,
"startTime": "2020-07-13 18:58:57",
"finishTime": null
},
{
"success": true,
"date": "2020-07-12 17:45:00",
"id": "1001",
"processed": true,
"enqueued": true,
"rowsTotal": 9,
"emptyRowsCount":0,
"lastProcessedRow": 9,
"itemsProcessedCount": 9,
"itemsFailedCount": 0,
"progressPercentage": 100,
"failedRowsNum": "",
"itemsCreatedCount": 0,
"itemsUpdatedCount": 9,
"startTime": "2020-07-13 16:44:12,
"finishTime": "2020-07-13 16:45:22
}
]
}
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/import/task?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
параметр: templateType=SKU тип заданий для отображения. Возможные варианты: [SKU, ORDER] Если не передан, то по умолчанию - SKU
параметр: id (Идентификатор задания, если передан, возвращается подробная информация по заданию)
например api/lite/import/task?id=1001
Положительный результат запроса:
{
"success": true,
"date": "2020-07-13 18:58:57",
"id": "1002",
"processed": false,
"enqueued": false,
"rowsTotal": 9,
"emptyRowsCount":0,
"lastProcessedRow": 0,
"itemsProcessedCount": 0,
"itemsFailedCount": 0,
"progressPercentage": 11,
"failedRowsNum": "",
"itemsCreatedCount": null,
"itemsUpdatedCount": null,
"startTime": null,
"finishTime": null,
"warehouseName": "Свой склад",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/f328ff56-ec93-4663-b747-7ee96957ca8e.xls",
"fieldMatching": {
"isNovelty": "новинка",
"brandName": "бренд",
"stockReserved": "резерв",
"productId": "ид продукта",
"oldPrice": "старая цена",
"available": "доступен",
"VAT": "ставка ндс",
"description": "описание",
"weight": "вес",
"isBestseller": "хит",
"stockAvailable": "остаток",
"article": "артикул",
"deleted": "удален",
"depth": "глубина",
"price": "розничная цена",
"width": "ширина",
"id": "код в kak2c",
"extId": "внешний код",
"countryOfOrigin": "страна производитель",
"variantId": "ид варианта",
"shortName": "наименование",
"barcode": "штрихкод",
"defaultImage": "url картинки",
"height": "высота"
},
"processingLog": [
{
"time":"2020-07-30 11:25:14",
"strNum":1,
"event":"Строка успешно обработана",
"level":"INFO"
},
{
"time": "2020-08-05 16:15:53",
"strNum": 2,
"event": "Обнаружена пустая строка",
"level": "WARNING"
},
{
"time": "2020-08-05 16:15:53",
"strNum": 3,
"event": "Не задано наименование для нового продукта.",
"level": "ERROR"
}
],
"importType" : "UPDATE", //"CREATE" Режим загрузки номенклатуры
"searchField" : "ID", //"EXTID" | "ARTICLE" | "BARCODE" Сопоставление номенклатуры
"replacePictures" : false, //Заменять изображения
"updateRests", : false //Загружать остатки
"clearEmptyValues" : false //Стирать значения, если они пустые
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Обновить настройки задания (/api/lite/import/task)
/api/lite/import/task
параметр: id (идентификатор задания)
например api/lite/import/task?id=1001
Пример запроса:
{
"id": "ed83074b-0072-43b0-a3fb-3f741cc8dc21", //Идентификатор загруженного файла
"warehouseName": "Свой склад", //Наименование склада
"fieldMatching" : {
"id":"Код в Kak2c",
"article":"Артикул",
"extId":"Внешний ИД",
"barcode":"Штрихкоды",
"shortName":"Наименование",
"description":"Полное наименование",
"vat":"Ставка НДС",
"stockAvailable":"Количество",
"price":"Цена",
"currency":"Валюта",
"picture":"URL картинки"
}, //Сопоставление полей
"importType" : "UPDATE", //"CREATE" Режим загрузки номенклатуры
"searchField" : "ID", //"EXTID" | "ARTICLE" | "BARCODE" Сопоставление номенклатуры
"replacePictures" : false, //Заменять изображения
"updateRests", : false //Загружать остатки
"clearEmptyValues" : false //Стирать значения, если они пустые
}
Положительный результат запроса:
{
"success": true,
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/import/process
Запустить обработку загруженного файла (/api/lite/import/process)
/api/lite/import/process
параметр: id (Идентификатор загруженного файла) обязательный
например api/lite/import/process?id=ed83074b-0072-43b0-a3fb-3f741cc8dc21
Положительный результат запроса:
{
"success": true,
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/import/field_list
Получить список возможных полей номенклатуры(/api/lite/import/field_list)
/api/lite/import/field_list
Положительный результат запроса:
{
"success": true,
"fields": {
"id": "ID",
"extId": "Внешний ID",
"shortName": "Наименование",
"article": "Артикул",
"barcode": "Штрихкод",
"brandName": "Бренд",
"vat": "Ставка НДС",
"defaultImage": "URL картинки",
"productId": "ID Продукта",
"productExtId": "Внешний ID продукта",
"weight": "Вес (кг)",
"width": "Ширина (см)",
"height": "Высота (см)",
"depth": "Глубина (см)",
"tnved": "ТНВЭД",
"type": "Тип",
"internationalDescription": "Международное описание товара",
"isBestseller": "Хит",
"isNovelty": "Новинка",
"description": "Описание",
"countryOfOrigin": "Страна производитель",
"stockTotal": "Остаток",
"stockReserved": "В резерве",
"available": "Доступен",
"price$Цена до скидки": "Цена: цена до скидки",
"price$Розничная цена": "Цена: розничная цена",
"feature$size": "Свойство: размер",
"feature$color": "Свойство: цвет"
}
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/export/sku
Список результатов экспорта(подробная информация по экспорту) (/api/lite/export/sku)
/api/lite/export/sku
Положительный результат запроса:
{
"success": true,
"recordsTotal": 2
"exportResults": [
{
"success": true,
"id": "1001",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileSize": "122 KB",
"rowsCount": 296,
"startTime": "2020-08-27 15:48:25",
"finishTime": "2020-08-27 15:48:26",
"cloudUploadFinishTime": "2020-08-27 15:48:27"
},
{
"success": true,
"id": "1000",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/452e74b0-3660-4c80-bfcb-78034097b720.xls",
"fileID": "452e74b0-3660-4c80-bfcb-78034097b720.xls",
"fileSize": "122 KB",
"rowsCount": 296,
"startTime": "2020-08-27 15:27:53",
"finishTime": "2020-08-27 15:27:54",
"cloudUploadFinishTime": "2020-08-27 15:27:55"
}
]
}
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/export/sku?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
параметр: id (Идентификатор результата, если передан, возвращается подробная информация по результату)
например /api/lite/export/sku?id=1001
Положительный результат запроса:
{
"success": true,
"id": "1001",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileSize": "122 KB",
"rowsCount": 296,
"startTime": "2020-08-27 15:48:25",
"finishTime": "2020-08-27 15:48:26",
"cloudUploadFinishTime": "2020-08-27 15:48:27"
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Инициировать экспорт товаров (/api/lite/export/sku)
/api/lite/export/sku
Пример запроса:
{
"warehouse":null, //ИД Склада(фильтр)
"exportStock":true, //Выгружать остатки
"exportPrice":true, //Выгружать цены
"exportFeatures":true, //Выгружать свойства
"exportAttributes":true, //Выгружать атрибуты
"exportPictures":true, //Выгружать картинки
"exportArchive":false //Выгружать архивные товары
}
Положительный результат запроса:
{
"success": true,
"id": "1000",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileSize": "122 KB", //Размер файла(строка)
"rowsCount": 296, //Количество строк в файле
"startTime": "2020-08-27 15:48:25", //Время начала подготовки файла
"finishTime": "2020-08-27 15:48:26", //Время окончания подготовки файла
"cloudUploadFinishTime": "2020-08-27 15:48:27" //Время окончания загрузки в облако
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/import/templates/sku
Получение шаблона импорта номенклатуры (с вариантами)
/api/lite/import/templates/sku
В ответ возвращается в бинарном виде с типом application/octet-stream xls файл для выгрузки в браузер пользователю
В файл записываются первые 10 товаров аккаунта
Можно задавать ему название "ItemTemplate.xls"
Успех:
application/octet-stream
Ошибка:
status 500
{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/settings/templates/items"
}
/api/lite/export/order
Список результатов экспорта заказов(подробная информация по экспорту) (/api/lite/export/order)
/api/lite/export/order
Положительный результат запроса:
{
"success": true,
"recordsTotal": 2
"exportResults": [
{
"success": true,
"id": "1001",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileSize": "122 KB",
"rowsCount": 296,
"startTime": "2020-08-27 15:48:25",
"finishTime": "2020-08-27 15:48:26",
"cloudUploadFinishTime": "2020-08-27 15:48:27"
"requestJson":"{\"fromDate\":\"2020-09-25 20:31:00\",\"exportTechData\":false,\"orderType\":\"CUSTOM\",\"orderSubType\":\"KAK2C_SUBSCRIPTION\",\"exportItems\":false,\"searchDateType\":\"CREATE_DATE\",\"toDate\":\"2020-12-01 20:31:07\",\"exportTags\":true,\"extendedAddress\":false,\"exportPackages\":false}",
"processed":true,
"rowsTotal":987,
"itemsProcessedCount":987,
"itemsFailedCount":0,
"processingLog":[]
},
{
"success": true,
"id": "1000",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/452e74b0-3660-4c80-bfcb-78034097b720.xls",
"fileID": "452e74b0-3660-4c80-bfcb-78034097b720.xls",
"fileSize": "122 KB",
"rowsCount": 296,
"startTime": "2020-08-27 15:27:53",
"finishTime": "2020-08-27 15:27:54",
"cloudUploadFinishTime": "2020-08-27 15:27:55"
"processed":true,
"rowsTotal":987,
"itemsProcessedCount":987,
"itemsFailedCount":0,
"processingLog":[]
}
]
}
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/export/order?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
параметр: id (Идентификатор результата, если передан, возвращается подробная информация по результату)
например /api/lite/export/order?id=1001
Положительный результат запроса:
{
"success": true,
"id": "1001",
"fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
"fileSize": "122 KB",
"rowsCount": 296,
"startTime": "2020-08-27 15:48:25",
"finishTime": "2020-08-27 15:48:26",
"cloudUploadFinishTime": "2020-08-27 15:48:27"
"processed":true,
"rowsTotal":987,
"itemsProcessedCount":987,
"itemsFailedCount":0,
"processingLog":[]
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Инициировать экспорт заказов (/api/lite/export/order)
(асинхронный запрос)
/api/lite/export/order
Пример запроса:
{
"searchDateType":"CREATE_DATE", //TAKEOUT_DATE, DELIVERY_DATE, RETURN_DATE - Метод отбора (по дате создания/отгрузки/доставки/возврата)
"fromDate":"2020-08-01 00:00:00", //Дата от
"toDate":"2020-10-01 00:00:00", //Дата до
"extendedAddress":true, //Выгрузить адрес по частям
"exportTags":true, //Выгрузить метки
"exportItems":true, //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
"exportPackages":true, //Данные по транспортным местам
"exportPackedItems": true, //Данные по упакованным товарам
"exportTechData":true, //Технические данные
"orderType":"CUSTOM", //STANDARD | KAKTUS_DOSTAVKA_V2 У обычных заказов - STANDARD
"orderSubType":"KAK2C_SUBSCRIPTION", //У обычных заказов он null.
"ids":["49379964-0003-2", "49379964-0003-3"], //Если требуется выгрузить заказы с указанными HumanId
"city":"Новосибирск",
"deliveryInfos":["f7c887bc-2161-a53e-0c98-8180f458b79d"], //Список служб доставки
"orderTags":["Метка"], //список ИМЁН меток (не гуидов!)
"promocode":"ajaton3000",
"statuses":["ORDER_INFO_REQUIRE_PAYMENT"], //Список статусов заказа
"variantId":"982880" //sku humanId
}
"orderSubType" - Отбор по подтипу заказа. У обычных заказов он null. Отбор моно проводить как по совокупности (тип + подтип), так и по отдельности (тип или подтип). Если тип и подтип не заданы, возвращаются все заказы в заданном промежутке дат (fromDate, toDate). Если задан orderSubType == "KAK2C_SUBSCRIPTION", название и количество колонок xls документа может изменится, для отображения данных по подпискам.
Положительный результат запроса:
{
"id": "1000",
"itemsFailedCount": 0,
"itemsProcessedCount": 0,
"processed": false,
"processingLog": [],
"requestJson": "{\"fromDate\":\"2023-07-04 16:17:46\",\"searchDateType\":\"TAKEOUT_DATE\",\"toDate\":\"2023-07-05 16:17:46\",\"exportTags\":true}",
"success": true
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Шаблоны подписок
Создание/редактирование шаблона подписок
/api/lite/product/subscription/parse
Создаёт структуру шаблона подписок по заданному шаблону. Все заданные товары должны существовать в кактусе до загрузки шаблона.
Если тип оплаты recurrent:
- Стоимость товара-подписки становится равной сумме первых отправлений
- Стоимость остальных отправлений становится 0
Если тип оплаты all_in_moment:
- Стоимость товара-подписки становится равен сумме всех отправлений
Передаваемые параметры:
Имя | Тип | Описание |
file | MultipartFile | Файл (.XLS) для парсинга. Пример файла . Возможные значения в payment_method: RECURRENT и ALL_IN_MOMENT |
productId | String | productId товара-подписки |
variantId | String | variantId товара-подписки |
startDate (optional) | String | Дата с которой начинается первое отправление. Если не задано, берётся текущая |
При удачном парсинге возвращает структуру шаблона:
{
"success": true,
"productId": "1002",
"variantId": "1002",
"type": "SUBSCRIPTION",
"onlinePaymentType": "recurrent",
"useShipmentDelayInterval": true,
"items": [
{
"productId": "1002",
"variantId": "1006",
"count": 1,
"subscriptionShipmentNum": 1,
"shipmentDelayIntervalDays": 30,
"subscriptionStartDate": "2020-09-10",
"itemPrice": 120.0
},
{
"productId": "1002",
"variantId": "1007",
"count": 1,
"subscriptionShipmentNum": 1,
"shipmentDelayIntervalDays": 30,
"subscriptionStartDate": "2020-09-10",
"itemPrice": 120.0
},
{
"productId": "1002",
"variantId": "1008",
"count": 1,
"subscriptionShipmentNum": 2,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-09-30",
"itemPrice": 150.0
},
{
"productId": "1002",
"variantId": "1009",
"count": 1,
"subscriptionShipmentNum": 2,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-09-30",
"itemPrice": 150.0
},
{
"productId": "1002",
"variantId": "1010",
"count": 1,
"subscriptionShipmentNum": 3,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-10-20",
"itemPrice": 250.0
}
]
}
Пример ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Update SubscriptionTemplate not implemented yet!\n"
}
]
}
Получение информации о шаблоне
/api/lite/product/subscription
Передаваемые параметры:
Имя | Тип | Описание |
id | String | productId товара-подписки |
Пример успешного ответа:
{
"success": true,
"productId": "1002",
"variantId": "1002",
"type": "SUBSCRIPTION",
"onlinePaymentType": "recurrent",
"useShipmentDelayInterval": true,
"items": [
{
"productId": "1002",
"variantId": "1006",
"count": 1,
"subscriptionShipmentNum": 1,
"shipmentDelayIntervalDays": 30,
"subscriptionStartDate": "2020-09-10",
"itemPrice": 120.0
},
{
"productId": "1002",
"variantId": "1007",
"count": 1,
"subscriptionShipmentNum": 1,
"shipmentDelayIntervalDays": 30,
"subscriptionStartDate": "2020-09-10",
"itemPrice": 120.0
},
{
"productId": "1002",
"variantId": "1008",
"count": 1,
"subscriptionShipmentNum": 2,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-09-30",
"itemPrice": 150.0
},
{
"productId": "1002",
"variantId": "1009",
"count": 1,
"subscriptionShipmentNum": 2,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-09-30",
"itemPrice": 150.0
},
{
"productId": "1002",
"variantId": "1010",
"count": 1,
"subscriptionShipmentNum": 3,
"shipmentDelayIntervalDays": 20,
"subscriptionStartDate": "2020-10-20",
"itemPrice": 250.0
}
]
}
/api/lite/export/purchase_order
Инициировать экспорт заказа поставщику (/api/lite/export/purchase_order?id=1016)
(синхронный запрос)
/api/lite/export/purchase_order?id=1016
{
"success": true,
"id": null,
"fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/export_takein_max@panshinteam.com_26.10.2020_16-09-15.xls",
"fileID": "export_takein_max@panshinteam.com_26.10.2020_16-09-15.xls",
"fileSize": "8 KB",
"rowsCount": 12,
"startTime": "2020-10-26 16:09:14",
"finishTime": "2020-10-26 16:09:15",
"cloudUploadFinishTime": "2020-10-26 16:09:16"
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/import/order_field_list
Получить список возможных полей заказа(/api/lite/import/order_field_list)
/api/lite/import/order_field_list
Положительный результат запроса:
{
"success": true,
"fields": {
"id": "ID заказа",
"date": "Дата заказа",
"fullName": "ФИО покупателя",
"phone": "Телефон",
"paymentMethodCode": "Способ оплаты",
"paymentStatus": "Заказ оплачен",
"email": "Email",
"post": "Индекс",
"pvzNum": "Код пункта выдачи",
"country": "Страна",
"fullAddress": "Полный адрес",
"region": "Регион",
"area": "Район",
"city": "Город",
"settlement": "Населенный пункт",
"street": "Улица",
"house": "Дом",
"block": "Корпус",
"flat": "Квартира",
"deliveryCode": "Код способа доставки",
"variantId": "ID товара",
"variantExtId": "Внешний ID товара",
"article": "Артикул",
"barcode": "Штрихкод",
"price": "Цена",
"quantity": "Количество",
"vat": "Ставка НДС"
}
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/export/sku/movements/json
Получить движения по товару в json формате (/api/lite/export/sku/movements/json?id=MA001)
(синхронный запрос)
/api/lite/export/sku/movements/json?id=MA001
{
"success": true,
"humanId": "MA001",
"article": "MA001",
"shortName": "Мастера рисунка и живописи. Випуск 1",
"extId": null,
"extId2": null,
"barcodes": "977253178460500001",
"movements": [
{
"success": true,
"period": "2020-09-30 03:09:21",
"humanId": "1000",
"documentType": "TAKE_IN_FACT",
"operationType": "PLUS",
"amountAvailable": 194,
"amountReserved": 0,
"sourceDocHumanId": null,
"sourceDocType": null,
"warehouseName": "Tempoline - Украина"
},
{
"success": true,
"period": "2020-11-10 06:11:44",
"humanId": "1580",
"documentType": "TAKE_OUT_PACKING",
"operationType": "MINUS",
"amountAvailable": 1,
"amountReserved": 1,
"sourceDocHumanId": "9098-1715",
"sourceDocType": "ORDER",
"warehouseName": "Tempoline - Украина"
}
]
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/export/sku/movements
Получить движения по товару в xls файле (/api/lite/export/sku/movements?id=MA001)
(синхронный запрос)
/api/lite/export/sku/movements?id=MA001
{
"success": true,
"id": null,
"fileUrl": "https://ycloud.kak2c.ru/items-export-kak2c/export_movement_info@centauria.com.ua_18.11.2020_18-05-26.xls",
"fileID": "export_movement_info@centauria.com.ua_18.11.2020_18-05-26.xls",
"fileSize": "190 KB",
"rowsCount": 1169,
"startTime": "2020-11-18 18:05:26",
"finishTime": "2020-11-18 18:05:26",
"cloudUploadFinishTime": "2020-11-18 18:05:26"
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/export/order/count
Подсчитать кол-во заказов (/api/lite/export/order/count)
/api/lite/export/order/count
Пример запроса:
{
"searchDateType":"CREATE_DATE", //TAKEOUT_DATE, DELIVERY_DATE, RETURN_DATE - Метод отбора (по дате создания/отгрузки/доставки/возврата)
"fromDate":"2020-08-01 00:00:00", //Дата от
"toDate":"2020-10-01 00:00:00", //Дата до
"extendedAddress":true, //Выгрузить адрес по частям
"exportTags":true, //Выгрузить метки
"exportItems":true, //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
"exportPackages":true, //Данные по транспортным местам
"exportTechData":true, //Технические данные
"orderType":"CUSTOM", //STANDARD | KAKTUS_DOSTAVKA_V2 У обычных заказов - STANDARD
"orderSubType":"KAK2C_SUBSCRIPTION", //У обычных заказов он null.
"ids":["49379964-0003-2", "49379964-0003-3"] //Если требуется выгрузить заказы с указанными HumanId
"city":"Новосибирск",
"deliveryInfos":["f7c887bc-2161-a53e-0c98-8180f458b79d"], //Список служб доставки
"orderTags":["Метка"], //список ИМЁН меток (не гуидов!)
"promocode":"ajaton3000",
"statuses":["ORDER_INFO_REQUIRE_PAYMENT"], //Список статусов заказа
"variantId":"982880" //sku humanId
}
"orderSubType" - Отбор по подтипу заказа. У обычных заказов он null. Отбор моно проводить как по совокупности (тип + подтип), так и по отдельности (тип или подтип). Если тип и подтип не заданы, возвращаются все заказы в заданном промежутке дат (fromDate, toDate). Если задан orderSubType == "KAK2C_SUBSCRIPTION", название и количество колонок xls документа может изменится, для отображения данных по подпискам.
Положительный результат запроса:
{
"success": true,
"count": 2274, //Число заказов в выборке
"limit": 3000 //Максимальное кол-во заказов, которое может быть выгружено в эксель
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/import/templates/order
Получение шаблона импорта заказов
/api/lite/import/templates/order
В ответ возвращается в бинарном виде с типом application/octet-stream xls файл для выгрузки в браузер пользователю
В файл записываются первые 10 товаров аккаунта
Можно задавать ему название "orderTemplate.xls"
Успех:
application/octet-stream
Ошибка:
status 500
{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/settings/templates/order"
}
/api/lite/export/order/now
Экспеорт выбранного заказа в Excel (/api/lite/export/order/now)
/api/lite/export/order/now
Параметр id - номер заказа
Положительный результат запроса:
{
"success": true,
"recordsTotal": 1,
"exportResults": [
{
"success": true,
"id": null,
"fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/export_orders_info@hot-wave.ru_28.07.2021_09-29-24.xls",
"fileID": "export_order_4247-2840",
"fileSize": null,
"rowsCount": null,
"startTime": null,
"finishTime": null,
"processed": null,
"rowsTotal": 1,
"itemsProcessedCount": null,
"itemsFailedCount": null
}
]
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/export/order/invoice
Экспорт инвойса по номеру заказа (/api/lite/export/order/invoice)
/api/lite/export/order/invoice
Параметр id - номер заказа
Положительный результат запроса:
{
"success": true,
"recordsTotal": 1,
"exportResults": [
{
"success": true,
"id": null,
"fileUrl": "https://storage.yandexcloud.net/items-import-kak2c/tl_invoice_test@tempo.ru_31.08.2021_17-34-51.pdf",
"fileID": "export_invoice_2502-123458",
"fileSize": null,
"rowsCount": null,
"startTime": null,
"finishTime": null,
"processed": null,
"rowsTotal": 1,
"itemsProcessedCount": null,
"itemsFailedCount": null
}
]
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
api/lite/export/supply
Список результатов экспорта поставок (подробная информация по экспорту) (/api/lite/export/supply)
api/lite/export/supply
Положительный результат запроса:
{
"exportResults": [
{
"id": "1136",
"itemsFailedCount": 0,
"itemsProcessedCount": 0,
"processed": false,
"processingLog": [],
"requestJson": "{\"fromDate\":\"2023-06-03 15:29:54\",\"exportItems\":\"true\",\"suppliers\":[\"8a65065d-7b68-57a7-692d-8d8db78b38cc\"],\"toDate\":\"2023-06-03 15:29:54\",\"statuses\":[\"NEW\"],\"ids\":[]}",
"success": true
},
{
"cloudUploadFinishTime": "2023-06-03 19:01:57",
"fileID": "d39741e3-2338-4875-9309-75f7aeceb121.xls",
"fileSize": "32 KB",
"fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/d39741e3-2338-4875-9309-75f7aeceb121.xls",
"finishTime": "2023-06-03 19:01:41",
"id": "1135",
"itemsFailedCount": 0,
"itemsProcessedCount": 46,
"processed": true,
"processingLog": [],
"requestJson": "{\"exportItems\":true,\"suppliers\":[\"b1b74b49-dd24-999d-c1f7-31a7d3afa6e7\",\"11430b37-7f78-1202-f6cf-e4b460d81aca\"],\"statuses\":[]}",
"rowsCount": 46,
"rowsTotal": 46,
"startTime": "2023-06-03 19:01:36",
"success": true
}
]
}
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/export/supply?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
параметр: id (Идентификатор результата, если передан, возвращается подробная информация по результату)
например /api/lite/export/supply?id=1001
Положительный результат запроса:
{
"cloudUploadFinishTime": "2023-06-05 11:07:00",
"fileID": "4b205bee-cff2-43e4-adf6-8b44da45ed83.xls",
"fileSize": "10 KB",
"fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/4b205bee-cff2-43e4-adf6-8b44da45ed83.xls",
"finishTime": "2023-06-05 11:07:00",
"id": "1001",
"itemsFailedCount": 0,
"itemsProcessedCount": 11,
"processed": true,
"processingLog": [],
"requestJson": "{\"fromDate\":\"2022-06-03 15:29:54\",\"exportItems\":\"true\",\"suppliers\":[],\"toDate\":\"2023-06-03 15:29:54\",\"statuses\":[\"NEW\"],\"ids\":[]}",
"rowsCount": 11,
"rowsTotal": 11,
"startTime": "2023-06-05 11:06:57",
"success": true
}
Отрицательный результат запроса:
Пример ошибки:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Инициировать экспорт поставок (/api/lite/export/supply)
(асинхронный запрос)
/api/lite/export/supply
Пример запроса:
{
"exportItems": "true", //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
"statuses": ["NEW"], //InfoStatus поставки
"suppliers": ["8a65065d-7b68-57a7-692d-8d8db78b38cc"], //Id поставщика
"fromDate": "2022-06-03 15:29:54", //Дата от
"toDate": "2023-06-03 15:29:54", //Дата до
"ids": [] //Если требуется выгрузить заказы с указанными HumanId
}
Положительный результат запроса:
Пример
{
"success": true,
"id": "1001",
"fileUrl": null,
"fileID": null,
"fileSize": null,
"rowsCount": null,
"startTime": null,
"finishTime": null,
"cloudUploadFinishTime": null
}
Отрицательный результат запроса:
Пример ошибки
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/export/supply/count
Подсчитать кол-во поставок (/api/lite/export/supply/count)
api/lite/export/supply/count
Пример запроса:
{
"exportItems": "true", //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
"statuses": ["NEW"], //InfoStatus поставки
"suppliers": ["8a65065d-7b68-57a7-692d-8d8db78b38cc"], //Id поставщика
"fromDate": "2022-06-03 15:29:54", //Дата от
"toDate": "2023-06-03 15:29:54", //Дата до
"ids": [] //Если требуется выгрузить заказы с указанными HumanId
}
Положительный результат запроса:
{
"success": true,
"count": 2274, //Число поставок в выборке
"limit": 3000 //Максимальное кол-во поставок, которое может быть выгружено в эксель
}
Отрицательный результат запроса:
Пример ошибки
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Дэшборд
Получение отчетов для дэшборда
/api/lite/reports
Возвращает список всех отчетов для дэшборда.
Опционально можно указать список интересующих отчетов, чтобы не загружать все.
Параметр types, например ?types=report_sales_sum_1,report_sales_avg_order_1
Пример данных по отчетам:
{
"success": true,
"errors": [],
"report_sales_sum_1":{
"currency": "RUB",
"today": 99500,
"week": 929000,
"diffPercent": 12.2,
"diffDirection": "UP"
},
"report_orders_sum_1":{
"today": 41,
"week": 120,
"diffPercent": 8.2,
"diffDirection": "DOWN"
},
"report_sales_avg_order_1":{
"currency": "RUB",
"month": 2330,
"allTime": 1700,
"diffPercent": 8.2,
"diffDirection": "DOWN"
},
"report_orders_sale_percent_1":{
"month": 96.5,
"allTime": 94.2,
"diffPercent": 8.2,
"diffDirection": "DOWN"
},
"report_sales_dynamic_1":{
"currency": "RUB",
"week": 7800,
"previousWeek": 140000,
"previousWeekDiffDirection": "UP"
"previousMonth": 820000,
"previousMonthDiffDirection": "DOWN"
"weeklyData":[
{"point": "Пн", "currentValue": 10, "previousValue": 8},
{"point": "Вт", "currentValue": 12, "previousValue": 11},
{"point": "Ср", "currentValue": 10, "previousValue": 8},
{"point": "Чт", "currentValue": 10, "previousValue": 8},
{"point": "Пт", "currentValue": 10, "previousValue": 8},
{"point": "Сб", "currentValue": null, "previousValue": null},
{"point": "Вс", "currentValue": null, "previousValue": null}
],
"monthlyData":[
{"point": 1, "currentValue": 10, "previousValue": 8},
{"point": 2, "currentValue": 12, "previousValue": 11},
{"point": 3, "currentValue": 10, "previousValue": 8},
{"point": 4, "currentValue": 10, "previousValue": 8},
...
{"point": 31, "currentValue": null, "previousValue": null}
],
"annuallyData":[
{"point": "Янв", "currentValue": 10, "previousValue": 8},
{"point": "Фев", "currentValue": 12, "previousValue": 11},
{"point": "Мар", "currentValue": 10, "previousValue": 8},
{"point": "Апр", "currentValue": 10, "previousValue": 8},
...
{"point": "Дек", "currentValue": null, "previousValue": null}
]
},
"report_sales_dynamic_1_delivered":{
"currency": "RUB",
"week": 7800,
"previousWeek": 140000,
"previousWeekDiffDirection": "UP"
"previousMonth": 820000,
"previousMonthDiffDirection": "DOWN"
"weeklyData":[
{"point": "Пн", "currentValue": 10, "previousValue": 8},
{"point": "Вт", "currentValue": 12, "previousValue": 11},
{"point": "Ср", "currentValue": 10, "previousValue": 8},
{"point": "Чт", "currentValue": 10, "previousValue": 8},
{"point": "Пт", "currentValue": 10, "previousValue": 8},
{"point": "Сб", "currentValue": null, "previousValue": null},
{"point": "Вс", "currentValue": null, "previousValue": null}
],
"monthlyData":[
{"point": 1, "currentValue": 10, "previousValue": 8},
{"point": 2, "currentValue": 12, "previousValue": 11},
{"point": 3, "currentValue": 10, "previousValue": 8},
{"point": 4, "currentValue": 10, "previousValue": 8},
...
{"point": 31, "currentValue": null, "previousValue": null}
],
"annuallyData":[
{"point": "Янв", "currentValue": 10, "previousValue": 8},
{"point": "Фев", "currentValue": 12, "previousValue": 11},
{"point": "Мар", "currentValue": 10, "previousValue": 8},
{"point": "Апр", "currentValue": 10, "previousValue": 8},
...
{"point": "Дек", "currentValue": null, "previousValue": null}
]
},
"report_orders_dynamic_1":{
"currency": "RUB",
"week": 7800,
"previousWeek": 140000,
"previousWeekDiffDirection": "UP"
"previousMonth": 820000,
"previousMonthDiffDirection": "DOWN"
"weeklyData":[
{"point": "Пн", "currentValue": 10, "previousValue": 8},
{"point": "Вт", "currentValue": 12, "previousValue": 11},
{"point": "Ср", "currentValue": 10, "previousValue": 8},
{"point": "Чт", "currentValue": 10, "previousValue": 8},
{"point": "Пт", "currentValue": 10, "previousValue": 8},
{"point": "Сб", "currentValue": null, "previousValue": null},
{"point": "Вс", "currentValue": null, "previousValue": null}
],
"monthlyData":[
{"point": 1, "currentValue": 10, "previousValue": 8},
{"point": 2, "currentValue": 12, "previousValue": 11},
{"point": 3, "currentValue": 10, "previousValue": 8},
{"point": 4, "currentValue": 10, "previousValue": 8},
...
{"point": 31, "currentValue": null, "previousValue": null}
],
"annuallyData":[
{"point": "Янв", "currentValue": 10, "previousValue": 8},
{"point": "Фев", "currentValue": 12, "previousValue": 11},
{"point": "Мар", "currentValue": 10, "previousValue": 8},
{"point": "Апр", "currentValue": 10, "previousValue": 8},
...
{"point": "Дек", "currentValue": null, "previousValue": null}
]
},
"report_orders_dynamic_1_with_canceled":{
"currency": "RUB",
"week": 7800,
"previousWeek": 140000,
"previousWeekDiffDirection": "UP"
"previousMonth": 820000,
"previousMonthDiffDirection": "DOWN"
"weeklyData":[
{"point": "Пн", "currentValue": 10, "previousValue": 8},
{"point": "Вт", "currentValue": 12, "previousValue": 11},
{"point": "Ср", "currentValue": 10, "previousValue": 8},
{"point": "Чт", "currentValue": 10, "previousValue": 8},
{"point": "Пт", "currentValue": 10, "previousValue": 8},
{"point": "Сб", "currentValue": null, "previousValue": null},
{"point": "Вс", "currentValue": null, "previousValue": null}
],
"monthlyData":[
{"point": 1, "currentValue": 10, "previousValue": 8},
{"point": 2, "currentValue": 12, "previousValue": 11},
{"point": 3, "currentValue": 10, "previousValue": 8},
{"point": 4, "currentValue": 10, "previousValue": 8},
...
{"point": 31, "currentValue": null, "previousValue": null}
],
"annuallyData":[
{"point": "Янв", "currentValue": 10, "previousValue": 8},
{"point": "Фев", "currentValue": 12, "previousValue": 11},
{"point": "Мар", "currentValue": 10, "previousValue": 8},
{"point": "Апр", "currentValue": 10, "previousValue": 8},
...
{"point": "Дек", "currentValue": null, "previousValue": null}
]
},
"report_goods_turnover_1":{
"week":1500,
"previousWeek":4300,
"previousWeekDiffDirection": "UP",
"previousMonth": 6400,
"previousMonthDiffDirection": "DOWN",
"weeklyData":[
{"point": "Пн", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Вт", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Ср", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Чт", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Пт", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Сб", "warehoused": null, "shipped": null, "available": null},
{"point": "Вс", "warehoused": null, "shipped": null, "available": null}
],
"annuallyData":[
{"point": "Янв", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Фев", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Мар", "warehoused": 10, "shipped": 8, "available": 2},
{"point": "Апр", "warehoused": 10, "shipped": 8, "available": 2},
...
{"point": "Авг, "warehoused": null, "shipped": null, "available": null}
]
},
"report_sales_channels_1":{
"channelSales":[
{"channel": "Ozon", "amount": 3487},
{"channel": "Beru", "amount": 3100},
{"channel": "Goods", "amount": 2900},
{"channel": "Aliexpress", "amount": 2850},
{"channel": "Online", "amount": 4865}
]
},
"report_sales_avg_order_full_1":{
"currency": "RUB",
"week": 1256,
"month": 2330,
"allTime": 1700,
"annuallyData":[
{"point": "Янв", "amount": 3487},
{"point": "Фев", "amount": 4569},
{"point": "Мар", "amount": 1223},
{"point": "Апр", "amount": 4755},
...
{"point": "Авг", "warehoused": null, "shipped": null, "available": null}
]
},
"report_orders_sum_full_1":{
"week": 12,
"month": 25,
"allTime": 36,
"annuallyData":[
{"point": "Янв", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
{"point": "Фев", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
{"point": "Мар", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
{"point": "Апр", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
...
{"point": "Авг", "amount": null, "amount_no_cod": null, "amount_online": null, "amount_cod": null}
]
},
"report_top_selling_products_1":{
"currency": "RUB",
"products":[
{"name": "Ботинки мужские, модель Privet, размер 41", "productId": 1001, "variantId": 1020, "amount": 56, "totalSum": 6598.65, "avgItemSum": 117.8},
{"name": "Ботинки мужские, модель Privet, размер 42", "productId": 1003, "variantId": 1018 "amount": 48, "totalSum": 5598.65, "avgItemSum": 120.8}
]
},
"report_last_changed_orders_1":{
"orders":[
{"id": "5966-5698", "updateTs": "2020-08-01 16:35:45", "status": "ORDER_INFO_SHIPPED", "totalOrderSum": 6598.65},
{"id": "5966-5695", "updateTs": "2020-08-01 16:28:41", "status": "ORDER_INFO_DELIVERED", "totalOrderSum": 256.65}
]
}
}
Отчеты сформированы под визуализацию, описанную в задачах:
https://openproject.notasoft.ru/work_packages/1003
https://openproject.notasoft.ru/work_packages/1009
https://openproject.notasoft.ru/work_packages/1010
https://openproject.notasoft.ru/projects/lk2/work_packages/1034/activity
Пример макета визуализации по указанным отчетам:
Обновление данных для графика оборота товаров
/api/lite/report/update_goods
Принудительно обновляет пересчет по обороту из БД.
Личный кабинет покупателей
Апи для работы с личным кабинетом покупателей
/api/customer/account/register
Создание нового аккаунта покупателя
/api/customer/account/register
Для регистрации необходимо выполнить следующий запрос
{
"email": "test@test.com",
"phone": "+798585858",
"firstName": "Ivan",
"lastName": "Ivanov",
"middleName": "Ivanocich"
}
Обязательные поля: email
Также необходимо в Header добавить domain, в котором указать нужный домен магазина.
Успех
возвращается сгенерированный пароль и jwt token для доступа
{
"success": true,
"authToken": {
"success": true,
"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpdmFuQHRlc3QuY29tIiwiZXhwIjoxNTk5MDU2MDA1fQ.-eEOV2NxHQAmt0habFOB18dr-P_drgS0S4YJmx15RMnTZYcGElwi7oEAgm-8qakr-aroYwyxrdwQ1NS_WVgYqA",
"token_type": "bearer",
"login": "ivan@test.com",
"expires_in": 14400,
"init_state": "completed"
},
"password": "8N9y8Jqb"
}
Ошибка
{
"success": false,
"errors": [
{
"code": 403,
"message": "Данный покупатель уже существует"
}
],
"authToken": null,
"password": null
}
/api/customer/auth
Авторизация
/api/customer/auth
Для авторизации необходимо выполнить следующий запрос
{
"emailLogin": "yura@test.com",
"password": "123456"
}
Также необходимо в Header добавить domain, в котором указать нужный домен магазина.
В ответ возвращается
Успех
{
"success": true,
"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NkBtYWlsLnJ1IiwiZXhwIjoxNTQ2OTc2NzQ5fQ.4Zdev5PSIk1TmsPFxjxHukYwH1wa_efn19cfLIkT8k2g9xEeVMOnYK4A4pTC6NCpsp2kq8_dvygRxAyyEKNwiQ",
"token_type": "bearer",
"login": "wow56@mail.ru",
"expires_in": 14400
}
где access_token содержит токен для доступа
expires_in - количество секунд действительности выданного токена.
Ошибка:
{
"success": false,
"errors": [
{
"code": 401,
"message": "Unauthorized"
}
]
}
Для последующих методов, использовать ключ токена следующим образом:
в запросе должен быть header
и значением вида "Bearer {access_token}"
например Bearer
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NUBtYWlsLnJ1IiwiZXhwIjoxNTQ2ODA3MjU3fQ.1vSO5DXhewQfjKITK76W8JhEZM_Wx2YgyEbdjfg9GDs0ymtRtmRgFuZen_n8fM00H1Uda_i6M2-Y1PbjN4edZA
/api/customer/account/password_reset
Запрос на сброс пароля покупателя
api/customer/account/password_reset
Для запроса сброса необходимо отправить следующий запрос:
{
"email":"test@test.ru"
}
Также необходимо в Header добавить domain, в котором указать нужный домен магазина.
В ответ возвращается
Успех:
{
"success": true
}
при этом, по указанному email отправляется письмо со ссылкой вида
http://localhost:33043/customer_password_reset_confirm/?t=6aaccd91-1045-4200-b105-b4db79490fee
Где адрес сервера будет взят из текущего адреса, включая домен 3 уровня.
срок действия токена - 1 час
Данная ссылка будет открыта пользователем в браузере GET запросом.
js код должен обработать открытие подобной ссылки и вывести пользователю запрос на ввод нового пароля и подтверждение пароля.
По нажатию кнопки подтверждения на данном экране создания нового пароля следует выполнить POST запрос на адрес
/api/customer/password_reset_confirm
с передачей токена из ссылки и нового пароля (см следующий метод).
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/customer/account/password_reset_confirm
Сброс пароля
/api/customer/account/password_reset_confirm
Для сброса необходимо выполнить запрос с передачей временного токена сброса пароля и нового пароля:
{
"token":"6aaccd91-1045-4200-b105-b4db79490fee",
"password": "abcd"
}
Также необходимо в Header добавить domain, в котором указать нужный домен магазина, для этого покупателя.
В ответ возвращается
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
api/customer/info
Запрос данных покупателя
api/customer/info
Метод возвращает информацию о текущем покупателе.
Параметр | Тип / формат | Описание |
id |
string |
Идентификатор пользователя |
emailLogin |
string |
Почта пользователя - является логином |
firstName |
string |
Имя |
lastName | string | Фамилия |
middleName | string | Отчество |
fullName | string | Имя в формате ФИО |
phone | string | Отформатированный телефон |
rawPhone | string | Телефон |
alternativeRawPhome | string | Дополнительный телефон |
alternativePhone | string | Дополнительный отформатированный телефон |
address |
object |
Адрес пользователя |
consentToNewsletter |
boolean |
Согласие на email рассылку |
Пример результата запроса:
{
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "ivan@test.com",
"firstName": "Ivan",
"lastName": "Ivanov",
"middleName": "Ivanovich",
"fullName": "Ivanov Ivan Ivanovich",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": ""
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
},
"consentToNewsletter": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Покупатель не найден"
}
]
}
(POST) api/customer/info
Редактировать информацию о покупателе
api/customer/info
Производит редактирование профиля текущего покупателя.
пример запроса:
{
"rawPhone": "+7985858585",
"firstName": "Oleg",
"lastName": "Pushkin",
"middleName": "Ivanov"
"password": "123456",
"rawAlternativePhone": "+85645545454",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
},
"consentToNewsletter": true
}
В ответ возвращается
Успех:
В случае успеха вернется обновленный покупатель:
{
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "ivan@test.com",
"rawPhone": "+7985858585",
"firstName": "Oleg",
"lastName": "Pushkin",
"middleName": "Ivanov"
"rawAlternativePhone": "+85645545454",
"fullName": "Pushkin Oleg Ivanov",
"phone": "",
"alternativePhone": ""
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
},
"consentToNewsletter": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Покупатель не найден"
}
]
}
api/customer/orders
Запрос списка заказов
api/customer/orders
Метод возвращает список заказов текущего покупателя.
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: api/customer/orders?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=10
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Пример результата запроса
{
"success": true,
"recordsTotal": 2,
"orders": [
{
"id": "20412212",
"date": "2020-06-03 09:22:06",
"updateTs": "2020-06-10 16:09:43.226",
"status": "ORDER_INFO_DONE",
"totalOrderSum": 1208,
"insuranceSum": 1059,
"insuranceSumAutoCalculation": true,
"paymentStatus": "PAID",
"confirmStatus": "APPROVED",
"paymentMethodCode": "online",
"paymentMethodType": "ONLINE",
"needCustomerPayment": true,
"shortUrl": "http://r.kak2c.ru/o6meazi",
"delivery": {
"code": "b26909d5-8424-7de9-42ca-53f668f70a8a",
"type": "COURIER",
"title": "BERU",
"pickupPointId": null,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_beru_middle.svg",
"trackingNumber": "20412212",
"trackingURL": null,
"desiredDeliveryDate": null,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"actualDeliveryDate": null,
"pvzComment": null,
"deliveryComment": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"receiver": {
"name": "Покупатель на Беру",
"surname": null,
"patronymic": null,
"phone": "+70000000000",
"rawPhone": "+70000000000",
"alternativePhone": "",
"email": null,
"post": null,
"personType": "CUSTOMER",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
},
"deliveryServices": null
},
"items": [
{
"num": 1,
"variantId": "83491",
"variantExtId": "NL290-83491",
"productId": "1052",
"productExtId": "83490",
"name": "CC крем «Абсолютное совершенство» SPF 20, 30 мл, Оттенок: Light ",
"article": "NL290-83491",
"quantity": 1,
"vatRate": "VAT_20",
"price": 1059,
"skuType": "SKU",
"itemDimensions": {
"height": 0,
"width": 0,
"depth": 0
},
"itemWeight": 0,
"barcode": "6412600834918"
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"article": "",
"quantity": 1,
"vatRate": "VAT_20",
"price": 149,
"skuType": "SERVICE",
"barcode": ""
}
],
"customerPaymentInProcess": false,
"customer": {
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "yura@test.com",
"firstName": "Yura",
"lastName": "Dan",
"middleName": "Dan",
"fullName": "Dan Yura Dan",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
}
},
"c": "f132f0d9-ced0-1134-573c-5dba550e3792"
},
{
"id": "19918626",
"date": "2020-05-25 21:19:24",
"updateTs": "2020-06-05 17:38:27.352",
"status": "ORDER_INFO_DONE",
"totalOrderSum": 579,
"insuranceSum": 579,
"insuranceSumAutoCalculation": true,
"paymentStatus": "NOT_PAID",
"confirmStatus": "APPROVED",
"paymentMethodCode": "cod-cash",
"paymentMethodType": "COD_CASH",
"needCustomerPayment": false,
"shortUrl": "http://r.kak2c.ru/jc2dyb2",
"delivery": {
"code": "b26909d5-8424-7de9-42ca-53f668f70a8a",
"type": "COURIER",
"title": "BERU",
"pickupPointId": null,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_beru_middle.svg",
"trackingNumber": "19918626",
"trackingURL": null,
"desiredDeliveryDate": null,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"actualDeliveryDate": null,
"pvzComment": null,
"deliveryComment": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"receiver": {
"name": "Покупатель на Беру",
"surname": null,
"patronymic": null,
"phone": "+70000000000",
"rawPhone": "+70000000000",
"alternativePhone": "",
"email": null,
"post": null,
"personType": "CUSTOMER",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
},
"deliveryServices": null
},
"items": [
{
"num": 1,
"variantId": "84981",
"variantExtId": "NL110-84981",
"productId": "1019",
"productExtId": "NL110-84981",
"name": "Тушь с черникой для чувствительных глаз, 9 мл, Оттенок: Черный ",
"article": "NL110-84981",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 579,
"img": "https://storage.yandexcloud.net/images-k2c/eef378d6-853f-4c75-a3b4-b2bdec352fe7.jpg",
"skuType": "SKU",
"itemDimensions": {
"height": 0,
"width": 0,
"depth": 0
},
"itemWeight": 0,
"barcode": "6412600849813"
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"article": "",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 0,
"skuType": "SERVICE",
"barcode": ""
}
],
"customerPaymentInProcess": false,
"customer": {
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "yura@test.com",
"firstName": "Yura",
"lastName": "Dan",
"middleName": "Dan",
"fullName": "Dan Yura Dan",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
}
},
"c": "326a2701-e668-c8b2-dda6-ab259921aaee"
}
],
}
Ошибка:
{
"success": false,
"errors": [{"code": 0,"message": "Текст ошибки"}]
}
api/customer/orders/cancelled
Отменить заказ покупателя
api/customer/orders/cancelled
Производит отмену заказа.
пример тела запроса:
{
"orderId":"1029"
}
В ответ возвращается
успех:
{
"success": true
}
ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Покупатели
Апи для менеджеров магазина, позволяет создавать и редактировать покупателей
/api/lite/customers/
Запрос списка покупателей
api/lite/customers/
Метод возвращает список покупателей текущего аккаунта
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: api/lite/customers?page=0&size=10
Если параметры не переданы, то дефолтные значения page=0&size=10
Фильтрация
api/lite/customers?page=0&size=10&text=Ivan
Также, для отображение пейджинации следует анализировать параметр totalElements и totalPages, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть) и страниц.
Пример результата запроса:
{
"content": [
{
"id": "e63d94d8-258f-489a-00fe-b8b6025ce677",
"emailLogin": "ivan@test.com",
"firstName": "Ivan",
"lastName": null,
"middleName": null,
"fullName": "Ivan",
"phone": "",
"rawPhone": "+79995556677",
"alternativePhone": "",
"consentToNewsletter": true
},
{
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "yura@test.com",
"firstName": "Yura",
"lastName": "Dan",
"middleName": "Dan",
"fullName": "Dan Yura Dan",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
},
"consentToNewsletter": false
}
],
"pageable": {
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"offset": 0,
"pageNumber": 0,
"pageSize": 10,
"paged": true,
"unpaged": false
},
"last": true,
"totalElements": 2,
"totalPages": 1,
"size": 10,
"number": 0,
"sort": {
"sorted": false,
"unsorted": true,
"empty": true
},
"first": true,
"numberOfElements": 2,
"empty": false
}
/api/lite/customers/{email}
Запрос данных покупателя
/api/lite/customers/{email}
- email - логин-почта пользователя
Метод возвращает информацию о текущем данном покупателе.
Пример: /api/lite/customers/test@test.com
Метод возвращает информацию о текущем покупателе.
Параметр | Тип / формат | Описание |
id |
string |
Идентификатор пользователя |
emailLogin |
string |
Почта пользователя - является логином |
firstName |
string |
Имя |
lastName | string | Фамилия |
middleName | string | Отчество |
fullName | string | Имя в формате ФИО |
phone | string | Отформатированный телефон |
rawPhone | string | Телефон |
alternativeRawPhome | string | Дополнительный телефон |
alternativePhone | string | Дополнительный отформатированный телефон |
address |
object |
Адрес пользователя |
Пример результата запроса:
{
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "ivan@test.com",
"firstName": "Ivan",
"lastName": "Ivanov",
"middleName": "Ivanovich",
"fullName": "Ivanov Ivan Ivanovich",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": ""
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Не найден покупатель с указанным email test@test.com"
}
]
}
POST /api/lite/customers/
Редактировать информацию о покупателе
/api/lite/customers/
Производит редактирование выбранного покупателя или добавление нового, если покупатель не найден.
Пример запроса:
{
"emailLogin": "test@test.com",
"firstName": "Oleg",
"lastName": "Pushkin",
"middleName": "Ivanov"
"rawPhone": "+792556123456",
"rawAlternativePhone": "+85645545454"
}
Успех:
В случае успеха вернется обновленный покупатель:
{
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "ivan@test.com",
"rawPhone": "+7985858585",
"firstName": "Oleg",
"lastName": "Pushkin",
"middleName": "Ivanov"
"rawAlternativePhone": "+85645545454",
"fullName": "Pushkin Oleg Ivanov",
"phone": "",
"alternativePhone": ""
}
DELETE /api/lite/customers/
Удаление покупателя
/api/lite/customers/
Параметры:
- email
Метод удаляет выбранного покупателя
Пример: /api/lite/customers?email=test@test.com
Успех:
Вернет id удаленного покупателя
{
"success": true,
"id":"9a5e8591-7ea7-adb6-34db-546f105fc11a"
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Не найден покупатель с указанным email test@test.com"
}
]
}
customers.enable=true
Данный параметр приложения отвечает за включение или отключение автоматического добавление(создание нового покупателя) при заказе.
- customers.enable=true
- customers.enable=false
Фиды для Я.Маркета
/api/lite/feed/settings
Список фидов(подробная информация по фиду) (/api/lite/feed/settings)
/api/lite/feed/settings
Положительный результат запроса:
{
"success": true,
"recordsTotal": 1,
"settings": [
{
"success": true,
"id": "83dcafbd-ba01-9742-88c0-03746cbfca48",
"name": "Фид для маркета",
"cloudUrl": "https://storage.yandexcloud.net/images-k2c/0de5d740-b2d4-4425-9490-7f5153daa698.xml",
"cloudId": "0de5d740-b2d4-4425-9490-7f5153daa698",
"active": false,
"lastUpdate": null,
"collections": [
"1001"
],
"shopName": "Магазин 01",
"shopUrl": "https://lumene.ru/", //Адрес магазина, влияет на тег <url>https://lumene.ru/</url>
"shopOfferUrl": "https://lumene.ru/catalog/{UTM}#/item/{ID}", //Шаблон адреса товара.
"companyName": "ООО ААА",
"deliveryEnabled": true,
"selfPickupEnabled": true,
"nonPreorderEnabled": false,
"deliveryMethods": [
{
"deliveryPrice": 150,
"minDays": 1,
"maxDays": 3,
"placeOrderHour": 18
}
],
"pickupMethods": [
{
"deliveryPrice": 0,
"minDays": 1,
"maxDays": 1,
"placeOrderHour": 0
}
],
"adult": false,
"offerNameFormat": "NAME",
"utm": "utm_token=12332&utm_source=ya.ru",
"salesNote": "Все товары сертифицированы",
"useOfferGroups": true,
"attrMatching": {
"manufacturer_warranty": "warranty"
},
"priceCode": null,
"oldPriceCode": "Цена до скидки"
}
]
}
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/feed/settings?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
параметр: id (Идентификатор фида, если передан, возвращается подробная информация по фиду)
например /api/lite/feed/settings?id=83dcafbd-ba01-9742-88c0-03746cbfca48
Положительный результат запроса:
{
"success": true,
"id": "83dcafbd-ba01-9742-88c0-03746cbfca48",
"name": "Фид для маркета",
"cloudUrl": null,
"cloudId": null,
"active": false,
"lastUpdate": null,
"collections": [
"1001"
],
"shopName": "Магазин 01",
"shopUrl": "https://shop.ru/",
"shopOfferUrl": "https://shop.ru/catalog/{UTM}#/item/{ID}",
"companyName": "ООО ААА",
"deliveryEnabled": true,
"selfPickupEnabled": true,
"nonPreorderEnabled": false,
"deliveryMethods": [
{
"deliveryPrice": 150,
"minDays": 1,
"maxDays": 3,
"placeOrderHour": 18
}
],
"pickupMethods": [
{
"deliveryPrice": 0,
"minDays": 1,
"maxDays": 1,
"placeOrderHour": 0
}
],
"adult": false,
"offerNameFormat": "NAME",
"utm": "utm_token=12332&utm_source=ya.ru",
"salesNote": "Все товары сертифицированы",
"useOfferGroups": true,
"attrMatching": {
"manufacturer_warranty": "warranty"
},
"priceCode": null,
"oldPriceCode": "Цена до скидки",
"checkStock": false, //Проставлять отсутствующим товарам флаг "под заказ"
"excludeZeroStock":false, //Исключать из фида товар с нулевыми остатками
"warehouseCode": null //ИД склада
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Обновить настройки фида (/api/lite/feed/settings)
/api/lite/feed/settings
Пример запроса:
{
"id": "83dcafbd-ba01-9742-88c0-03746cbfca48", //если не задан, то создаётся новый фид
"name": "Фид для маркета",
"active": false,
"collections": [
"1001"
],
"shopName": "Магазин 01",
"shopUrl": "https://shop.ru/", //Адрес магазина, влияет на тег <url>https://shop.ru/</url>
"shopOfferUrl": "https://shop.ru/catalog/{UTM}#/item/{ID}", //Шаблон адреса товара.
"companyName": "ООО ААА",
"deliveryEnabled": true,
"selfPickupEnabled": true,
"nonPreorderEnabled": true,
"deliveryMethods": [{"deliveryPrice":150, "minDays":1, "maxDays":3, "placeOrderHour":18}],
"pickupMethods": [{"deliveryPrice":0, "minDays":1, "maxDays":1, "placeOrderHour":0}],
"adult": false,
"offerNameFormat": "NAME", //NAME_COLLECTION_PARENTHESES | NAME_COLLECTION_COLON
"utm": "utm_token=12332&utm_source=ya.ru",
"salesNote": "Все товары сертифицированы",
"useOfferGroups": true,
"attrMatching": {"manufacturer_warranty":"warranty", "sales_notes": "notes"}, //"код в маркете" : "код в кактусе"
"priceCode": "Розничная цена",
"oldPriceCode": "Цена до скидки"
"updateInterval": 10, //Интервал автообновления фида, минуты. Минимально - 10 мин. По умолчанию: 24 * 60 = 1440 минут
"checkStock": false, //Проверять наличие товара на складе, влияет на параметр available в теге <offer>. false по умолчанию
"excludeZeroStock":false, //Исключать из фида товар с нулевыми остатками. false по умолчанию
"warehouseCode": null //ид склада остатков (guid). если не указан, остатки проверяются на всех складах. null по умолчанию
}
Положительный результат запроса:
{
"success": true,
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Удаление фида
/api/lite/feed/settings&id=
параметр: id (Идентификатор фида)
например /api/lite/feed/settings?id=83dcafbd-ba01-9742-88c0-03746cbfca48
Успех:
{
"success": true,
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/feed/settings/download_yml
Сгенерировать и скачать yml файл (/api/lite/feed/settings/download_yml)
/api/lite/feed/settings/download_yml?id=
параметр: id (идентификатор фида)
например /api/lite/feed/settings/download_yml?id=83dcafbd-ba01-9742-88c0-03746cbfca48
Успех:
application/octet-stream
Ошибка:
status 500
{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/feed/settings/download_yml"
}
/api/lite/feed/market_attributes
Список возможных атрибутов Я.Маркета(/api/lite/feed/market_attributes)
Возвращает все возможные атрибуты из маркета.
Служит ключом в маппинге "attrMatching"
* Для получения всех атрибутов продукта в кактусе есть метод: /api/lite/products/attributes
(код атрибута продукта служит значением в маппинге "attrMatching")
/api/lite/feed/market_attributes
Положительный результат запроса:
{
"success": true,
"marketAttributes": [
{
"id": "available",
"name": "Статус товара (в наличие/на заказ)"
},
{
"id": "bid",
"name": "Ставка"
},
{
"id": "url",
"name": "URL страницы товара "
},
{
"id": "oldPrice",
"name": "Старая цена товара"
},
{
"id": "vendor",
"name": "Производитель"
},
{
"id": "vendorCode",
"name": "Код производителя"
},
{
"id": "model",
"name": "Модель"
},
{
"id": "sales_notes",
"name": "Комментарий к товару"
},
{
"id": "description",
"name": "Описание товарного предложения"
},
{
"id": "name",
"name": "Название товарного предложения"
},
{
"id": "delivery",
"name": "Возможность курьерской доставки"
},
{
"id": "pickup",
"name": "Возможность самовывоза"
},
{
"id": "store",
"name": "Возможность купить товар без предварительного заказf"
},
{
"id": "manufacturer_warranty",
"name": "Официальная гарантия производителя (да/нет)"
},
{
"id": "country_of_origin",
"name": "Страна производства товара"
},
{
"id": "adult",
"name": "Товары adult-тематики"
},
{
"id": "age",
"name": "Возрастная категория товара (годы)"
},
{
"id": "downloadable",
"name": "Продукт можно скачать"
}
]
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
/api/lite/feed/refresh
Обновить содержимое фида(в облаке) (/api/lite/feed/refresh)
/api/lite/feed/refresh?id=
Обновляет файл в облаке.
параметр: id (Идентификатор фида) обязательный
Положительный результат запроса:
{
"success": true,
"id": "83dcafbd-ba01-9742-88c0-03746cbfca48",
"name": "Фид для маркета",
"cloudUrl": "https://storage.yandexcloud.net/images-k2c/0de5d740-b2d4-4425-9490-7f5153daa698.xml",
"cloudId": "0de5d740-b2d4-4425-9490-7f5153daa698.xml",
"active": false,
"lastUpdate": "2020-10-20 19:52:09",
"collections": [
"1001"
],
"shopName": "Магазин 01",
"companyName": "ООО ААА",
"deliveryEnabled": true,
"selfPickupEnabled": true,
"nonPreorderEnabled": false,
"deliveryMethods": [
{
"deliveryPrice": 150,
"minDays": 1,
"maxDays": 3,
"placeOrderHour": 18
}
],
"pickupMethods": [
{
"deliveryPrice": 0,
"minDays": 1,
"maxDays": 1,
"placeOrderHour": 0
}
],
"adult": false,
"offerNameFormat": "NAME",
"utm": "utm_token=12332&utm_source=ya.ru",
"salesNote": "Все товары сертифицированы",
"useOfferGroups": true,
"attrMatching": {
"manufacturer_warranty": "warranty"
},
"priceCode": null,
"oldPriceCode": "Цена до скидки"
}
Отрицательный результат запроса:
{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
FBO WB/OZON API
/api/lite/orders/worksheet/form_template
Запрос шаблона анкеты FBM
/api/lite/orders/worksheet/form_template?order_id=123437
параметр order_id - ИД заказа в Кактусе, обязательный
Поле | Тип | Описание |
id | string | ИД поля анкеты в Кактусе. |
extId | string | Внешний ИД поля анкеты. Используется для сопоставления при передаче во внешние системы |
name | string | Вопрос, который отображается над полем |
tooltip | string |
Подсказка к полю (всплывайка при наведении на символ (?)) Если null, или отсутствует, то символ подсказки не отображается |
value | string |
Значение поля по умолчанию |
mandatory | boolean |
Обязательность заполнения поля. При дальнейшей валидации, проверяется заполненность value |
inputType | string |
Тип поля ввода. Влияет на отрисовку на форме. Значения: INPUT, TEXTAREA |
Пример результата запроса
{
"success": true,
"requirements": {
"form": true,
"packing_sticker_type": "NONE",
"pallet_sticker_type":"PDF"
},
"form_content": [
{
"id": "1000",
"name": "Наименование юрлица",
"value": "",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1001",
"name": "Номер поставки МП",
"value": "",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1002",
"name": "Дата доставки на склад МП",
"value": "",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1003",
"name": "Тип отгрузки: короба, моно, микс",
"value": "",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1004",
"name": "Дополнительная упаковка: да/нет",
"value": "",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1005",
"name": "Нанесение дополнительного стикера с описанием товара",
"value": "",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1006",
"name": "Минимальное количество товара в коробе",
"value": "",
"mandatory": true,
"inputType": "INPUT"
}
]
}
/api/lite/orders/worksheet
Запрос анкеты FBM по заказу
/api/lite/orders/worksheet?orderId=TS100307
параметр orderId - ИД заказа в Кактусе, обязательный.
Поле |
Тип | Описание |
id | string | ИД поля анкеты в Кактусе. |
extId | string | Внешний ИД поля анкеты. Используется для сопоставления при передаче во внешние системы |
name | string | Вопрос, который отображается над полем |
tooltip | string |
Подсказка к полю (всплывайка при наведении на символ (?)) Если null, или отсутствует, то символ подсказки не отображается |
value | string |
Значение поля по умолчанию |
mandatory | boolean |
Обязательность заполнения поля. При дальнейшей валидации, проверяется заполненность value |
inputType | string |
Тип поля ввода. Влияет на отрисовку на форме. Значения: INPUT, TEXTAREA |
Пример результата запроса
Если анкета заполнялась:
{
"success": true,
"orderId": "1000",
"form_content": [
{
"id": "1000",
"extId":"WB000001"
"name": "Порядковый номер палеты",
"tooltip": "Подсказка к полю (всплывайка при наведении на символ (?))"
"value": "23445",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1001",
"name": "Количество палет в поставке",
"value": "5",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1002",
"name": "Количество коробов на данной палете",
"value": "2",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1003",
"name": "Номер поставки",
"value": "4433221",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1004",
"name": "Склад назначения (а при транзите также транзитный склад)",
"value": "ООО Вектор, ул. Складская, стр.1",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1005",
"name": "Тип коробов (моно, микс)",
"value": "моно",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1006",
"name": "Наименование юридического лица",
"value": "ООО Вектор",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1007",
"name": "Дата поставки",
"value": "20.07.2021",
"mandatory": true,
"inputType": "INPUT"
}
]
}
Либо, если анкета не заполнялась:
{
"success": true,
"orderId": "1000",
"form_content": null
}
Создание/редактирование анкеты FBM по заказу
/api/lite/orders/worksheet
orderId - ИД заказа в Кактусе, следует обязательно указывать.
Пример запроса
{
"success": true,
"orderId": "1000",
"form_content": [
{
"id": "1000",
"extId":"WB000001"
"name": "Порядковый номер палеты",
"tooltip": "Подсказка к полю (всплывайка при наведении на символ (?))"
"value": "23445",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1001",
"name": "Количество палет в поставке",
"value": "5",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1002",
"name": "Количество коробов на данной палете",
"value": "2",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1003",
"name": "Номер поставки",
"value": "4433221",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1004",
"name": "Склад назначения (а при транзите также транзитный склад)",
"value": "ООО Вектор, ул. Складская, стр.1",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1005",
"name": "Тип коробов (моно, микс)",
"value": "моно",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1006",
"name": "Наименование юридического лица",
"value": "ООО Вектор",
"mandatory": true,
"inputType": "INPUT"
},
{
"id": "1007",
"name": "Дата поставки",
"value": "20.07.2021",
"mandatory": true,
"inputType": "INPUT"
}
]
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Массовое получение данных анкет по списку заказов
/api/lite/orders/worksheet/batch/get
Параметр orders - список номеров заказов.
Ограничение - не более 500 номеров в запросе
Пример запроса
{
"orders": [
"444555",
"555666"
]
}
Пример результата запроса
{
"orders": [
{
"form_content": [],
"orderId": "444555",
"success": true
},
{
"form_content": [
{
"id": "1000",
"inputType": "INPUT",
"mandatory": true,
"name": "Поставщик",
"value": "ООО 123"
},
{
"id": "1001",
"inputType": "INPUT",
"mandatory": true,
"name": "Номер поставки МП",
"value": "77777"
},
{
"id": "shipment_warehouse_destination",
"inputType": "INPUT",
"mandatory": true,
"name": "Склад назначения",
"value": "Склад Москва"
},
{
"id": "shipment_date",
"inputType": "INPUT",
"mandatory": true,
"name": "Дата и время поставки",
"value": "01.12"
}
],
"orderId": "555666",
"success": true
}
],
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/orders/packing/fbm/sticker/file
/api/lite/orders/packing/fbm/sticker/file
Добавляет PDF файл стикера к упакованному месту.
Параметры передаются как form-data:
upfile | Файл(ы) для загрузки |
id | Идентификатор заказа (humanId) |
barcode |
ШК упакованного места ("packings":[{"barcode":"201000000315",) (Если параметр не передан, то поиск ШК происходит по значению имени файла) |
print_when_packing | Печатать при упаковке |
copies_qty | Кол-во копий |
Если в значении upfile передан всего 1 файл и значение barcode передано, то загрузка происходит в режиме одиночного файла. Поиск осуществляется по ШК из значения barcode.
Если же в значении upfile 2 или более файлов или значение barcode отсутствует(null или пустое) то загрузка происходит в режиме массового прикрепления. Поиск осуществляется по ШК из названия файлов. (пример: файл BC2003.pdf, поиск будет происходить по значению "BC2003")
Пример ответа (одиночный файл):
{
"success": true,
"id": "39a3dde4-f1ab-fc40-8ac2-fd658e2ab596",
"fileType": "JPG",
"fileSource": "USER",
"fileName": "Битва_экстрасенсов_(логотип)",
"fileExt": "jpg",
"fileSize": 195261,
"url": "https://storage.yandexcloud.net/order-files-kak2c/cf2d5a4a-77c0-453d-94f6-30df07bfc261.jpg",
"printWhenPacking": false,
"copiesQty": 1,
"md5sum": "DAC4EB25F5605B754A70093312AC8B65"
}
Пример ответа (массовое прикрепление):
{
"docFiles": [
{
"copiesQty": 1,
"fileExt": "png",
"fileName": "1489000096876",
"fileSize": 57906,
"fileSource": "USER",
"fileType": "PNG",
"id": "7702bb9c-f849-8623-72f3-da02b919d78e",
"md5sum": "413A2416808C1F4C6FFE47B3E03BEA75",
"printWhenPacking": false,
"success": true,
"url": "https://storage.yandexcloud.net/order-files-kak2c/097bcfb8-e657-4592-b692-b33a858dec1a.png"
},
{
"copiesQty": 1,
"fileExt": "jpg",
"fileName": "11111111111111",
"fileSize": 38543,
"fileSource": "USER",
"fileType": "JPG",
"id": "70a4cf8e-0f15-6c0b-4585-bfb0be1354ff",
"md5sum": "3431AC1E1A19E37E33461F6B9BF3FEC5",
"printWhenPacking": false,
"success": true,
"url": "https://storage.yandexcloud.net/order-files-kak2c/2087ac74-6b97-4264-a889-3905293da836.jpg"
}
],
"success": true
}
/api/lite/orders/packing/fbm/sticker/file
Удаляет файл
В параметре id передается идентификатор файла.
Пример запроса:
DELETE https://app.kak2c.ru/api/lite/packing/fbm/sticker/file?id=b233372d-cf7b-f07b-446b-128912be7c8a
Пример ответа:
{
"success": true
}
данные по стикерам упакованных мест возвращаются в методе
/api/lite/orders?id=1001&full_info=true
...
"packings": [
{
"barcode": "4343001973680",
"fbmStickerBarcode": "WB_0032345",
"measurements": {
"success": true,
"weight": 345,
"dimensions": {
"height": 100,
"width": 180,
"depth": 100
}
},
"items": [
...
],
"files": [
{
"success": true,
"id": "da7b5b5c-34f8-1b87-0937-410c251e3b8e",
"fileType": "JPG",
"fileSource": "USER",
"fileName": "1_T-qHsJ6L5UjpJP-6JVZz0w (1)",
"fileExt": "jpeg",
"fileSize": 110724,
"url": "https://storage.yandexcloud.net/order-files-kak2c/d5e2c0ea-f968-44d1-9d70-d270ab38a773.jpeg",
"printWhenPacking": false,
"copiesQty": 1,
"md5sum": "D61372833808D44DE5F47BE77BDB4CB5"
}
]
}
],
...
/api/lite/orders/packing/fbm/sticker
/api/lite/orders/packing/fbm/sticker
Добавляет текстовый стикер к упакованному месту
Пример запроса
{
"packing_barcode": "4343001973680", //шк упакованноко места
"sticker_barcode": "WB_003234" //шк текстового стикера маркетплейса
}
Ответ
{
"success": true
}
/api/lite/orders/upload_fbm_docs_ff
/api/lite/orders/upload_fbm_docs_ff
Отправляет данные прикрепленных FBM стикеров упакованных мест и файлов заказа в темпо
Пример запроса
{
"id": "2502-123437"
}
Ответ
{
"success": true
}
/api/lite/orders/pallet/fbm/sticker/file
/api/lite/orders/pallet/fbm/sticker/file
Добавляет PDF файл стикера к паллете.
Параметры передаются как form-data:
upfile | Файл для загрузки |
barcode |
ШК паллеты ("pallets":[{"barcode":"201000000315",) (Если параметр не передан, то поиск ШК происходит по значению имени файла) |
print_when_packing | Печатать при упаковке |
copies_qty | Кол-во копий |
Если в значении upfile передан всего 1 файл и значение barcode передано, то загрузка происходит в режиме одиночного файла. Поиск осуществляется по ШК из значения barcode.
Если же в значении upfile 2 или более файлов или значение barcode отсутствует(null или пустое) то загрузка происходит в режиме массового прикрепления. Поиск осуществляется по ШК из названия файлов. (пример: файл BC2003.pdf, поиск будет происходить по значению "BC2003")
Пример ответа(одиночный файл):
{
"success": true,
"id": "39a3dde4-f1ab-fc40-8ac2-fd658e2ab596",
"fileType": "JPG",
"fileSource": "USER",
"fileName": "Битва_экстрасенсов_(логотип)",
"fileExt": "jpg",
"fileSize": 195261,
"url": "https://storage.yandexcloud.net/order-files-kak2c/cf2d5a4a-77c0-453d-94f6-30df07bfc261.jpg",
"printWhenPacking": false,
"copiesQty": 1,
"md5sum": "DAC4EB25F5605B754A70093312AC8B65"
}
Пример ответа (массовое прикрепление):
{
"docFiles": [
{
"copiesQty": 1,
"fileExt": "png",
"fileName": "1489000096876",
"fileSize": 57906,
"fileSource": "USER",
"fileType": "PNG",
"id": "7702bb9c-f849-8623-72f3-da02b919d78e",
"md5sum": "413A2416808C1F4C6FFE47B3E03BEA75",
"printWhenPacking": false,
"success": true,
"url": "https://storage.yandexcloud.net/order-files-kak2c/097bcfb8-e657-4592-b692-b33a858dec1a.png"
},
{
"copiesQty": 1,
"fileExt": "jpg",
"fileName": "11111111111111",
"fileSize": 38543,
"fileSource": "USER",
"fileType": "JPG",
"id": "70a4cf8e-0f15-6c0b-4585-bfb0be1354ff",
"md5sum": "3431AC1E1A19E37E33461F6B9BF3FEC5",
"printWhenPacking": false,
"success": true,
"url": "https://storage.yandexcloud.net/order-files-kak2c/2087ac74-6b97-4264-a889-3905293da836.jpg"
}
],
"success": true
}
/api/lite/orders/pallet/fbm/sticker/file
Удаляет файл
В параметре id передается идентификатор файла.
Пример запроса:
DELETE https://app.kak2c.ru/api/lite/pallet/fbm/sticker/file?id=b233372d-cf7b-f07b-446b-128912be7c8a
Пример ответа:
{
"success": true
}
данные по стикерам паллет возвращаются в методе
/api/lite/orders?id=1001&full_info=true
...
"pallets": [
{
"barcode": "pl705970976005-1",
"files": [
{
"copiesQty": 1,
"fileExt": "pdf",
"fileName": "ИП Ozon Хоругвино Шк на палету",
"fileSize": 22535,
"fileSource": "USER",
"fileType": "PDF",
"id": "aa22d7fa-65a2-6be0-8e0d-430ec6c874d3",
"printWhenPacking": false,
"success": true,
"url": "https://storage.yandexcloud.net/order-files-kak2c/b42eebd1-eb7e-4603-a781-5240699288d9.pdf" //ШК в формате PDF
}
],
"measurements": {
"dimensions": {
"depth": 120,
"height": 100,
"width": 120
},
"success": true,
"weight": 200
},
"num": 1,
"packings": [
{
"barcode": "201000000469",
"measurements": {
"dimensions": {
"depth": 400,
"height": 200,
"width": 300
},
"success": true,
"weight": 700
},
"palletBarcode": "pl705970976005-1"
}
]
}
],
...
/api/lite/orders/pallet/fbm/sticker
/api/lite/orders/pallet/fbm/sticker
Добавляет текстовый стикер к паллете
Пример запроса
{
"pallet_barcode": "pl705970976005-1", //шк паллеты
"sticker_barcode": "WB_003234" //шк текстового стикера маркетплейса
}
Ответ
{
"success": true
}
/api/lite/orders/packing/fbm/sticker/xls
/api/lite/orders/packing/fbm/sticker/xls
Позволяет скачать сопоставление ШК упакованных мест
параметр id - ИД заказа, обязательный
пример:
/api/lite/orders/packing/fbm/sticker/xls?id=2502-123447
Ответ
{
"exportResults": [
{
"fileID": "export_order_2502-123447",
"fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/export_orders_test@tempo.ru_09.11.2021_21-53-03.xls",
"rowsTotal": 1,
"success": true
}
],
"recordsTotal": 1,
"success": true
}
/api/lite/orders/packing/fbm/sticker/xls
Импортирует сопоставление ШК из экселя
Используется заголовок запроса Content-type: multipart/form-data.
В качестве параметров запроса передается:
- id - ИД заказа, обязательный параметр
- upfile - файл с сопоставлением
Ответ
{
"success": true
}
/api/lite/orders/fbo/delivery/warehouses
/api/lite/orders/fbo/delivery/warehouses
Позволяет получить список возможных адресов доставки для FBO заказов
параметр fbmType - тип FBM, обязательный. Возможные значения: OZON, WILDBERRIES
пример:
/api/lite/orders/fbo/delivery/warehouses?fbmType=WILDBERRIES
Ответ
{
"addresses": [
{
"availabilityClass": 1,
"city": "Подольск",
"cityFias": "b22cf685-e391-42c8-aab5-a9aadb9193d4",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "Московская обл, г Подольск, ул Поливановская, д 9",
"house": "9",
"name": "Wildberries Подольск",
"region": "Московская",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"street": "Поливановская",
"zip": "142103"
},
{
"availabilityClass": 1,
"city": "Подольск",
"cityFias": "b22cf685-e391-42c8-aab5-a9aadb9193d4",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "Московская обл, г Подольск, деревня Коледино, ул Троицкая, стр 20",
"house": "20",
"name": "Wildberries Коледино",
"region": "Московская",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"settlement": "Коледино",
"settlementFias": "6473edb3-f716-4987-ac0d-60068c2f0bb4",
"street": "Троицкая ",
"zip": "142181"
},
{
"area": "Ногинск",
"areaFias": "40ae04e3-9a69-44ea-8bd7-6c6f08e1a4ca",
"availabilityClass": 1,
"city": "Ногинск",
"cityFias": "40ae04e3-9a69-44ea-8bd7-6c6f08e1a4ca",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "Московская обл, г Ногинск, рп Обухово, тер Атлант-Парк, д 35 ",
"house": "35",
"name": "WILDBERRIES Обухово",
"region": "Московская",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"settlement": "Атлант-Парк (рп Обухово)",
"settlementFias": "72c5aacd-c5af-46c4-a1fa-0768c4fa0cf7",
"zip": "142440"
},
{
"area": "Марушкинское",
"areaFias": "37477930-7e8d-47f6-89a0-f6ad39e946c9",
"availabilityClass": 2,
"city": "Москва",
"cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "г Москва, поселение Марушкинское, кв-л 8",
"name": "Wildberries Внуково",
"region": "Москва",
"regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"settlement": "кв-л 8",
"settlementFias": "86e37fff-3ffe-4ff9-986d-fa214853b764",
"zip": "108809"
},
{
"availabilityClass": 2,
"building": "7",
"city": "Чехов",
"cityFias": "7eeb876e-7b67-4ed7-91ec-0588712db96c",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "Московская обл, г Чехов, село Новоселки, тер промышленная зона Новоселки, влд 11 стр 7",
"house": "11",
"name": "Wildberries Чехов 2",
"region": "Московская",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"settlement": "Березка СХ2 (село Новоселки)",
"settlementFias": "5d4ab092-eaf2-4ffa-ae4f-a60916511063",
"zip": "142326"
},
{
"availabilityClass": 2,
"city": "Электросталь",
"cityFias": "e0b171b6-bf2e-4d68-ab05-4d42ab2b375a",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "Московская обл, г Электросталь, поселок Случайный, тер Массив 3, д 5",
"house": "5",
"name": "Wildberries Электросталь",
"region": "Московская",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"settlement": "Массив 3 (поселок Случайный)",
"settlementFias": "89efc91f-6875-4527-b27e-3fb03dc94971",
"zip": "144004"
},
{
"area": "Пушкино",
"areaFias": "7f22cfa4-34fa-4fa0-bcb0-620cd8402cfa",
"availabilityClass": 1,
"block": "4",
"city": "Пушкино",
"cityFias": "7f22cfa4-34fa-4fa0-bcb0-620cd8402cfa",
"country": "Россия",
"fbmType": "WILDBERRIES",
"fullAddress": "Московская обл, г Пушкино, тер 33-й км автодороги М8 Холмогоры, д 16в",
"house": "16в",
"name": "Wildberries Пушкино",
"region": "Московская",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"settlement": "33-й км автодороги М8 Холмогоры",
"settlementFias": "a9b12f5e-b2c4-48b6-9cf3-31923f4750a1",
"zip": "141202"
}
],
"success": true
}
Сервис уведомлений (Кактус)
Апи для работы с настройкой уведомлений для аккаунта
/api/lite/domain_notification
Создание нового уведомления
/api/lite/domain_notification
Для регистрации необходимо выполнить следующий запрос
{
"notificationType" : "PURCHASE_CREATED",
"notificationChannels" : ["EMAIL","SMS"],
"notificationReceivers" : "test@email.com,test2@notasoft.ru"
}
Обязательные поля: notificationType, notificationChannels, notificationReceivers
Также необходимо в Header добавить domain, в котором указать нужный домен магазина и авторизацию
notificationType |
enum |
Может содержать значения -> Смотри пункт апи - "Получение возможных типов уведомлений" |
notificationChannels |
[]enum |
Может содержать значения SMS, EMAIL,TELEGRAM, WHATSAPP Так же можно получить все актуальные возможные значения вызвав соответствующий пункт апи |
notificationReceivers |
String |
Логины пользователей через запятую, которым нужно отправить уведомление |
Успех
возвращается id созданного уведомления
{
"success": true,
"id": "efea87fb-91d7-b2f6-d705-148727002b13"
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "Не задан тип уведомлений"
}
]
}
Обновление уведомления
/api/lite/domain_notification
Для обновления нужно дополнительно указать id, далее указать нужные для обновления поля
{
"id" : "efea87fb-91d7-b2f6-d705-148727002b13",
"notificationChannels" : ["EMAIL"],
"notificationReceivers" : "test@email.com"
}
Успех
возвращается id созданного уведомления
{
"success": true,
"id": "efea87fb-91d7-b2f6-d705-148727002b13"
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "Данное уведомление не найдено"
}
]
}
GET /api/lite/domain_notification
Получение всех уведомлений для аккаунта
/api/lite/domain_notification
Метод возвращает список уведомлений текущего аккаунта.
Параметры:
- type - Тип уведомления для поиска, например PURCHASE_COMPLETED. Если его указать отфильтрует по данному типу
Пр. /api/lite/domain_notification/?type=PURCHASE_COMPLETED
Пример результата запроса
{
"success": true,
"notifications": [
{
"id": "efea87fb-91d7-b2f6-d705-148727002b13",
"notificationType": "PURCHASE_CREATED",
"notificationChannels": [
"EMAIL",
"SMS"
],
"notificationReceivers": "donchenko.y@notasoft.ru"
}
]
}
Ошибка:
{
"success": false,
"errors": [{"code": 0,"message": "Текст ошибки"}]
}
DELETE /api/lite/domain_notification
Удаление уведомления
api/customer/info
Производит удаление данного уведомления.
Параметры:
- id - идентификатор уведомления, которое необходимо удалить
api/customer/info?id=efea87fb-91d7-b2f6-d705-148727002b13
Успех
возвращается id удаленного уведомления
{
"success": true,
"id": "efea87fb-91d7-b2f6-d705-148727002b13"
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "Данное уведомление не найдено"
}
]
}
/api/lite/domain_notification/{id}
Поиск определенного уведомления
/api/lite/domain_notification/{id}
Производит поиск уведомлния
/api/lite/domain_notification/efea87fb-91d7-b2f6-d705-148727002b13
Успех
возвращается найденное уведомление
{
"id": "efea87fb-91d7-b2f6-d705-148727002b13",
"notificationType": "PURCHASE_CREATED",
"notificationChannels": [
"EMAIL"
],
"notificationReceivers": "test@email.com"
}
Ошибка
{
"success": false,
"errors": [
{
"code": 0,
"message": "Данное уведомление не найдено"
}
]
}
/api/lite/domain_notification/types
Получение возможных типов уведомлений
/api/lite/domain_notification/types
Метод возвращает список всех возможных типов уведомлений и их значения
Пример результата запроса
{
"success": true,
"types": [
{
"type": "PURCHASE_CREATED",
"value": "Поставка успешно создана"
},
{
"type": "PURCHASE_EXPORTED_FF",
"value": "Поставка успешно выгружена на Фулфилмент"
},
{
"type": "PURCHASE_EXPORT_FF_ERROR",
"value": "Ошибка выгрузки на Фулфилмент"
},
{
"type": "PURCHASE_TAKE_IN_PROCESS",
"value": "Поставка в процессе приемки"
},
{
"type": "PURCHASE_COMPLETED",
"value": "Поставка успешно принята"
},
{
"type": "PURCHASE_COMPLETED_WITH_DIFFERENCE",
"value": "Поставка принята с расхождениями"
},
{
"type": "PURCHASE_COMPLETED_WITH_BRAK",
"value": "Поставка принята с браком"
},
{
"type": "PURCHASE_CANCELED",
"value": "Поставка отменена"
},
{
"type": "ORDER_CREATED_FROM_CHECKOUT",
"value": "Оформлен через умную корзину"
},
{
"type": "ORDER_CREATED_FROM_MARKETPLACE",
"value": "Оформлен по маркетплейсам"
},
{
"type": "ORDER_CREATED_FROM_ESHOP",
"value": "Оформлен из магазина"
},
{
"type": "ORDER_CREATED_FROM_PRIVATE_API",
"value": "Оформлен по АПИ менеджера"
},
{
"type": "ORDER_CREATE_ERROR",
"value": "Ошибка при создании"
},
{
"type": "ORDER_ONLINE_PAID_OK",
"value": "Успешно оплачен онлайн"
},
{
"type": "ORDER_INSUFFICIENT_RESERVE",
"value": "Не хватает резервов"
},
{
"type": "ORDER_EXPORT_FF_ERROR",
"value": "Ошибка выгрузки на Фулфилмент"
},
{
"type": "ORDER_IN_PACKING",
"value": "На сборке"
},
{
"type": "ORDER_PACKED",
"value": "Упакован"
},
{
"type": "ORDER_SHIPPED",
"value": "Отгружен"
},
{
"type": "ORDER_IN_DELIVERY",
"value": "На доставке"
},
{
"type": "ORDER_AT_TAKEOUT_POINT",
"value": "Доставлен в ПВЗ/отделение"
},
{
"type": "ORDER_AT_TAKEOUT_POINT_DEADLINE",
"value": "Доставлен в ПВЗ/отделение, но еще не получен"
},
{
"type": "ORDER_DONE",
"value": "Выполнен"
},
{
"type": "ORDER_RETURNING",
"value": "Возвращается"
},
{
"type": "ORDER_RETURNED",
"value": "Возвращен"
}
]
}
/api/lite/domain_notification/channels
Получение возможных каналов для отправки уведомлений
/api/lite/domain_notification/channels
Метод возвращает список всех возможных каналов для отправки уведомлений
Пример результата запроса
{
"success": true,
"types": [
{
"type": "SMS",
"value": "SMS"
},
{
"type": "EMAIL",
"value": "EMAIL"
},
{
"type": "TELEGRAM",
"value": "TELEGRAM"
},
{
"type": "WHATSAPP",
"value": "WHATSAPP"
}
]
}
Физические наборы
/api/lite/physical_set_orders
Запрос списка заданий на сборку/разборку
/api/lite/physical_set_orders
Метод возвращает список заданий с заданной фильтрацией.
Фильтрация
Для фильтрации используется параметр query. Если он задан, то будут показаны задания на сборку/разборку наборов, которые содержат query в id, артикуле, имени или ШК.
Также есть параметры dateFrom и dateTo для фильтра по датам
Пример: /api/lite/physical_set_orders?query=1038&dateFrom=2023-01-10T15:35:46&dateTo=2023-02-02T15:35:46
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/physical_set_orders?page=0&size=100
Если параметры не переданы, то дефолтные значения page=0&size=100
Пример результата запроса
{
"physicalSetOrders": [
{
"id": "1008",
"createTs": "2021-01-13 17:23:44.058",
"action": "ASSEMBLY", // DISASSEMBLY
"status": "NEW", // IN_PROCESS, DONE
"quantity": 2,
"physicalSet": {
"id": "1044",
"shortName": "Набор ложек",
"article": null,
"images": null,
"items": [
{
"id": "1042",
"shortName": "Ложка",
"article": "loz",
"quantity": 2,
"images": null
}
]
}
}
]
}
Создание задания на сборку/разборку
/api/lite/physical_set_orders
Создает задание на сборку/разборку физического набора.
Пример запроса
{
"variantId": "1044",
"quantity": 2,
"warehouseCode": "2970c244-20f4-bab8-4c29-b04504281120",
"action": "ASSEMBLY" // DISASSEMBLY
}
Успех:
{
"id": "1047",
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Копирование задания на сборку/разборку
/api/lite/physical_set_orders/copy
Копирует задание на сборку/разборку физического набора
Пример запроса
{
"id": "1008"
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/physical_sets
Запрос списка физических наборов
/api/lite/products/physical_sets
Метод возвращает список наборов с заданной фильтрацией.
Фильтрация
Для фильтрации используется параметр query. Если он задан, то будут показаны наборы, содержащие query в id, артикуле, имени или ШК.
Для поиска только по id можно использовать параметр "id".
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/products/physical_sets?page=0&size=100
Если параметры не переданы, то дефолтные значения page=0&size=100
Пример результата запроса
{
"physicalSets": [
{
"id": "1044",
"shortName": "Набор ложек",
"article": null,
"images": null,
"price": null,
"stockAvailable": 0,
"barcodes": [
{
"value": "70100401010210",
"isDefault": false,
"type": "COMMON"
}
],
"items": [
{
"id": "1042",
"shortName": "Ложка",
"article": "loz",
"quantity": 2,
"images": null,
"price": "50.00",
"stockAvailable": 45,
"barcodes": [
{
"value": "70100401010204",
"isDefault": true,
"type": "COMMON"
}
]
}
]
}
]
}
Создание/редактирование физического набора
/api/lite/products/physical_sets
Делает из существующего товара физический набор. Если состав набора пустой, то набор будет преобразован обратно в обычный товар
Пример запроса
{
"id": "1044",
"items": [
{
"id": "1042",
"quantity": 2
}
]
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/products/sku_sets
Запрос списка наборов
/api/lite/products/sku_sets
Метод возвращает список наборов с заданной фильтрацией.
Фильтрация
Для фильтрации используется параметр query. Если он задан, то будут показаны наборы, содержащие query в id, артикуле, имени или ШК.
Для поиска только по id можно использовать параметр "id".
Для фильтрации по типу набора можно использовать параметр "type". Возможные значения: BUNDLE и PHYSICAL_SET
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/products/physical_sets?page=0&size=100
Если параметры не переданы, то дефолтные значения page=0&size=100
Пример результата запроса
{
"skuSets": [
{
"id": "1044",
"shortName": "Набор ложек",
"article": null,
"skuType": "BUNDLE", // PHYSICAL_SET
"bundleOptionalCount": 0,
"images": null,
"price": null,
"stockAvailable": 0,
"barcodes": [
{
"value": "70100401010210",
"isDefault": false,
"type": "COMMON"
}
],
"items": [
{
"id": "1042",
"shortName": "Ложка",
"article": "loz",
"quantity": 2,
"images": null,
"price": "50.00",
"stockAvailable": 45,
"barcodes": [
{
"value": "70100401010204",
"isDefault": true,
"type": "COMMON"
}
],
"optional": false
}
]
}
]
}
Создание/редактирование набора
/api/lite/products/sku_sets
Делает из существующего товара физический набор. Если состав набора пустой, то набор будет преобразован обратно в обычный товар
Пример запроса
{
"id": "1044",
"skuType": "PHYSICAL_SET",
"bundleOptionalCount": 0,
"items": [
{
"id": "1042",
"quantity": 2,
"optional": false
}
]
}
Успех:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
/api/lite/pub/products/sku_sets
/api/lite/pub/products/sku_sets
Аналогичен приватному методу
Наложенные платежи
/api/lite/cod_payments
Запрос списка обработанных наложенных платежей
/api/lite/cod_payments
Метод возвращает список наложенных платежей, поступивших на аккаунт
Опциональные параметры:
id - номер платежа
dateFrom
dateTo - фильтр по дате исполнения платежа (executionTime), в формате yyyy-MM-dd'T'HH:mm:ss
Пейджинация
Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.
Пример: /api/lite/cod_payments?page=0&size=10
Если параметры не переданы, то дефолтные значения page=0&size=15
Пример результата запроса
{
"payments": [
{
"activated": true,
"date": "2021-04-10 10:00:00",
"executionTime": "2021-02-17 18:00:00",
"id": "OST-1000317",
"inn": "123456789",
"items": [
{
"num": 1,
"orderId": "8477-3900",
"sum": 3260,
"trackingNum": "1192306085"
}
],
"orgName": "ООО Привет",
"paymentId": "33342",
"updateTs": "2021-07-08 19:09:03.020"
}
],
"recordsTotal": 1,
"success": true
}
API osTicket
Общее описание
Все запросы к API osTicket http post. Ко всем передаются следующие http-заголовки:
X-API-Key - Ключ API-доступа к osticket
User-Login - Логин пользователя osTicket, от имени которого выполняется запрос. Должен быть правильным email.
User-Password - Пароль пользователя. Не используется для специальных API ключей, работающих совместно с авторизацией lk2.
Запрос должен содержать хотя бы один post-параметр. Если параметры по логике запроса не нужны, его следует вызывать с параметром-заглушкой.
{
"param": 1
}
/api/tickets.json
Создает тикет.
- subject - тема сообщения. В нашем интерфейсе традиционно используется как номер заказа но системных ограничений на это нет.
- message - содержимое сообщения
- topicId - id категории заявки. Полный их список задан в системных настройках osTicket. Например "topicId": 103 соответствует категории "Срочная доставка день в день"
- attachments - массив вложенных файлов. Ключ - имя файла. Значение - содержимое файла в виде base64 - строки (data URL).
- returnWorkingNow - булев параметр. Если true - возвращает json в котором кроме номера созданного тикета содержится признак работает ли отдел в текущее время. И сообщение с рабочим временем отдела, которое можно выдать клиенту.
{
"success": true,
"number":"219600",
"is_working_now":false,
"not_working_message":"График работы сервисного отдела ежедневно с 9:00 до 21:00. Мы ответим Вам в рабочие часы. Спасибо за обращение!"
}
- returnJson - булев параметр. Если true возвращает номер и ID созданного тикета в формате JSON. Иначе - просто строковое значение номера тикета (режим совместимости с нативным osTicket)
{
"success": true,
"number": "526252",
"id": 224336
}
Пример запроса:
{
"subject":"777",
"message":"data:text/html;charset=utf-8,<p>Пробное сообщение</p>",
"topicId":103,
"returnJson": true,
"attachments":[
{"logo-color.svg":"data:image/svg+xml;base64,..."},
{"test.log":"data:text/x-log;base64,..."}
]
}
/api/tickets/get.json
Возвращает список тикетов пользователя, переданного в http-заголовке запроса
Все параметры не обязательны.
- size, page - пагинация. Номер страницы начинается с 0. Если не задано - возвращает все тикеты
- search - поиск. Если значение начинается с цифры ищет по вхождению в номер тикета или в поле subject, которое в нашем интерфейсе применяется как номер заказа. Иначе - полнотекстовый поиск по тикету.
- direction - outbound входящие тикеты, inbound - исходящие, пустое значение - все.
- collaborator_visibility - в возвращаемые тикеты включаются те, для которых пользователь является соавтором
- org_visibility - в возвращаемые тикеты включаются созданные другими пользователями организации. Если у пользователя в osTicket нет прав просмотра тикетов других пользователей организации - не влияет на результат.
- unreaded_only - возвращает только непрочитанные тикеты
- subject - фильтрация тикетов по номеру заказа. В отличие от search поиск не по вхождению а по полному соответствию строки.
- updated_from - возвращаются тикеты измененные в указанное время или позднее. Время измененя тикета - это время его создания или последнего сообщения в цепочке его переписки
{
"page":0,
"size":10,
"search":"878",
"direction":"outbound",
"collaborator_visibility": true,
"org_visibility": true,
"unreaded_only": true,
"subject": "171220-41656-1959"
"updated_from": "2022-08-08 23:08:09"
"number":"367871"
"ticket_id":"203300"
}
Пример возвращаемого значения:
- state отличается от status тем что state более обобщенное понятие. Например state: colse значит что тикет закрыт. Но закрыт он может быть как по причине проблема решена так и без объясения причин. Этому соответствует status.
- message здесь возвращается без html-тегов. Полный ткст сообщения можно получить в вызове thread
{
"success": true,
"recordsTotal":26,
"tickets": [
{
"ticket_id":34901,
"subject":"тестовый номер 777",
"status_id":2,
"status":"Проблема решена",
"number":"651265",
"isanswered":0,
"state":"closed",
"created":"2021-02-08 13:35:08",
"message":"Пробное сообщение",
"topic_id":103,
"unreaded":false,
"direction":"outbound",
"reopenable":true,
"user_id": 10,
"user_login": "test@mail.ru",
"user_name": "Иван",
"updated": "2022-05-06 14:28:14"
},
{
"ticket_id":12514,
"subject":"888-888",
"status_id":3,
"status":"Закрыт",
"number":"840372",
"isanswered":0,
"state":"closed",
"created":"2020-12-09 19:15:19",
"message":"Тестовое сообщение",
"topic_id":1,
"unreaded":false,
"direction":"outbound",
"reopenable":false,
"user_id": 12,
"user_login": "test2@mail.ru",
"user_name": "Петр",
"updated": "2022-05-06 14:28:14"
},
]
}
Если в заголовке передан логин пользователя, отсутствующий в osTicket запрос не завершается ошибкой а возвращает следующий ответ:
{
"account_not_found": 1
}
Это можно использовать для авторегистрации пользователей при первом обращении к функционалу osTicket.
/api/tickets/thread.json
Возвращает цепочку переписки данного тикета
{
"ticket_id":34937
}
Пример возвращаемого значения
- id - id сообщения.
- type - 'M' заявка, 'R' ответ
- is_staff - true сообщение от сотрудника, false - от пользователя
- author - имя автора сообщения
- user_login - логин (email) автора сообщения
- created - дата создания сообщения
- title - не используется
- message - текст сообщения
- attachments - вложенные файлы
- size - длина
- url - url для скачивания файла
- name - имя файла
{
"success": true,
"messages": [
{
"id":1074256,
"type":"M",
"is_staff":false,
"author":"Slava",
"user_login":"slava-sh@yandex.ru",
"created":"2023-03-14 23:34:02",
"title":null,
"message":"<p>Новая заявка<\/p>",
"attachments":[
{
"size": 26556,
"url": "https://ticket.kak2c.ru/file.php?key=f-5x9e888ngsiuvsgeuy_ge59gczgnsu&expires=1612828800&signature=ae890af39b6ba9e4659ec5f221b7a4a4d24b5904&id=6866",
"name": "baner-1.jpg"
}
]
},
{
"id":1074257,
"type":"R",
"is_staff":true,
"author":"admin notasoft",
"user_login":"adm1@notasoft.ru",
"created":"2023-03-14 23:54:33",
"title":null,
"message":"<p>Привет!<\/p>",
"attachments":[]
}
]
}
/api/tickets/getunreaded.json
Возвращает количество непрочитанных пользователем сообщений. Учитываются только тикеты владелец которого данный пользователь. Не учитываются тикеты других пользователей организации и те в которых данный пользователь соавтор. Пример возвращаемого результата:
{
"success": true,
"unreadedCount": 2
}
/api/tickets/message.json
Отправка сообщения в ветку тикета (ответа на тикет)
- attachments - массив вложенных файлов. Ключ - имя файла. Значение - содержимое файла в виде base64 - строки (data URL).
- is_resolved - если true, одновременно с ответом тикет закрывается со статусом "проблема решена". Т.о. пользователь может сам закрыть тикет.
{
"attachments": [
{
"p-14334.jpg": "data:image/jpeg;base64,..."
}
],
"is_resolved": true,
"message": "data:text/html;charset=utf-8,<p>Ответ на сообщение</p>",
"ticket_id": 34937
}
Ответ:
{
"success": true,
"message_id":1074273
}
/api/tickets/unreaded.json
Помечает тикет как прочитанный или непрочитанный:
- ticket_id - можно передать как отдельный ID тикета, так и массив id для установки статуса нескольким тикетам за один вызов
- value - true - непрочитан, false - прочитан
{
"ticket_id": 34960,
"value": false
}
Возвращает
{
"success": true
}
/api/tickets/gettopics.json
Возвращает справочник категорий и тем тикетов
[
{
"value": 2,
"label": "Общие вопросы",
"fields": [],
"order": "1",
"isMassSending": false,
"children": [
{
"value": 12,
"label": "Возможности Кактуса",
"fields": [],
"order": 1000000,
"isMassSending": false
},
{
"value": 131,
"label": "Делопроизводство",
"fields": [],
"order": 1000000,
"isMassSending": false
},
{
"value": 16,
"label": "Возможности личного кабинета",
"fields": [],
"order": 1000000,
"isMassSending": false
},
{
"value": 17,
"label": "Доступная отчетность",
"fields": [],
"order": 1000000,
"isMassSending": false
},
{
"value": 19,
"label": "Как вызвать курьера?",
"fields": [],
"order": 1000000,
"isMassSending": false
},
{
"value": 14,
"label": "Тарифы и условия",
"fields": [],
"order": 1000000,
"isMassSending": false
},
{
"value": 13,
"label": "Услуги и их стоимость",
"fields": [],
"order": 1000000,
"isMassSending": false
}
]
},
{
"value": 1,
"label": "Старт работы",
"fields": [],
"order": "2",
"isMassSending": false,
"children": [
{
"value": 23,
"label": "КП Кактус.Доставка",
"fields": [
{
"value": "dogovor",
"label": "Номер договора клиента",
"note_field": "номер_договора_клиента",
"moderatory": false
},
{
"value": "company",
"label": "Юрлицо",
"note_field": "юрлицо",
"moderatory": false
}
],
"order": "1",
"isMassSending": false
},
{
"value": 20,
"label": "КП Кактус.Фулфилмент",
"fields": [
{
"value": "dogovor",
"label": "Номер договора клиента",
"note_field": "номер_договора_клиента",
"moderatory": false
},
{
"value": "company",
"label": "Юрлицо",
"note_field": "юрлицо",
"moderatory": false
}
],
"order": "2",
"isMassSending": false
},
{
"value": 24,
"label": "Условия договора",
"fields": [
{
"value": "dogovor",
"label": "Номер договора клиента",
"note_field": "номер_договора_клиента",
"moderatory": false
},
{
"value": "company",
"label": "Юрлицо",
"note_field": "юрлицо",
"moderatory": false
}
],
"order": "3",
"isMassSending": false
},
{
"value": 25,
"label": "Доп условия",
"fields": [
{
"value": "dogovor",
"label": "Номер договора клиента",
"note_field": "номер_договора_клиента",
"moderatory": false
},
{
"value": "company",
"label": "Юрлицо",
"note_field": "юрлицо",
"moderatory": false
}
],
"order": "4",
"isMassSending": false
},
{
"value": 118,
"label": "Техниче\u0441кие вопросы",
"fields": [],
"order": "5",
"isMassSending": false
},
{
"value": 26,
"label": "Другое",
"fields": [
{
"value": "dogovor",
"label": "Номер договора клиента",
"note_field": "номер_договора_клиента",
"moderatory": false
},
{
"value": "company",
"label": "Юрлицо",
"note_field": "юрлицо",
"moderatory": false
}
],
"order": "6",
"isMassSending": false
}
]
},
...
]
/api/tickets/threads.json
Возвращает цепочку переписки нескольких тикетов
{
"updated_from": "2023-01-01 00:00:00",
"ticket_ids":["203296","195327"]
}
Пример возвращаемого значения, содержимое массива messages для каждого тикета аналогично одноименному массиву, описанному здесь
{
"success": true,
"tickets":[
{
"ticket_id":203296,
"messages":[
{
"id":1074256,
"type":"M",
"is_staff":false,
"author":"Slava",
"created":"2023-03-14 23:34:02",
"title":null,
"message":"<p>Новая заявка</p>",
"attachments":[]
},
{
"id":1074257,
"type":"R",
"is_staff":true,
"author":"admin notasoft",
"created":"2023-03-14 23:54:33",
"title":null,
"message":"<p>Привет!</p>",
"attachments":[]
}
]
},
{
"ticket_id":203297,
"messages": [
{
"id":1074260,
"type":"M",
"is_staff":false,
"author":"Slava",
"created":"2023-03-21 01:43:53",
"title":"Другой вопрос",
"message":"<p>Проверка статусов</p>",
"attachments":[]
}
]
}
]
}
Биллинг
/api/lite/billing/documents
Запрос списка документов
/api/lite/billing/documents
Метод возвращает список документов. Можно использовать для получения списка или одного документа
Параметры
- id - поиск по номеру документа
- date_from - фильтр по дате документа, от (формат: 2020-02-19T12:35:31)
- date_to - фильтр по дате документа, до (формат: 2020-02-19T12:35:31)
- filter_types - фильтр по типу документа. можно перечислить через запятую
- extended - true/false для отображение доп. данных
- page - страница
- size - размер страницы
Пример результата запроса
{
"success": true,
"recordsTotal": 14,
"documents": [
{
"id": "222",
"type": "BILL",
"status": "PAID", // NEW, AWAITING_PAYMENT, PARTIALLY_PAID, EXPIRED
"title": "Счет на аванс.",
"date": "2021-06-03 15:17:42",
"vatSum": 166.67,
"totalSum": 1000.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Сумма аванса 40%",
"description": null,
"measure": null,
"amount": 1.00,
"price": 0.00,
"totalSum": 1000.00
}
],
"relations": []
},
{
"id": "333",
"type": "BILL",
"status": "PAID",
"title": "Счет на доплату.",
"date": "2021-06-03 15:17:42",
"vatSum": 12574.33,
"totalSum": 75446.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Крепеж бирки",
"description": null,
"measure": "ед. товара",
"amount": 100.00,
"price": 12.00,
"totalSum": 1200.00
},
{
"num": 2,
"title": "Мелкоячеечное хранение",
"description": null,
"measure": "ячейка/сутки",
"amount": 100.00,
"price": 13.20,
"totalSum": 1320.00
},
{
"num": 3,
"title": "Дополнительные работы по запросу Заказчика",
"description": null,
"measure": "час",
"amount": 555.00,
"price": 133.20,
"totalSum": 73926.00
},
{
"num": 4,
"title": "Сумма переплаты",
"description": null,
"measure": null,
"amount": 1.00,
"price": 0.00,
"totalSum": -1000.00
}
],
"relations": []
},
{
"id": "1025",
"type": "EXPENSE",
"subType": "POSTPAID",
"status": "AWAITING_PAYMENT",
"title": "Списание",
"description": "Оплата за услуги за апрель",
"date": "2021-06-03 15:17:26",
"deadline": "2021-06-17 01:00:00",
"vatSum": 12574.33,
"totalSum": 75446.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Крепеж бирки",
"description": null,
"measure": "ед. товара",
"amount": 100.00,
"price": 12.00,
"totalSum": 1200.00
},
{
"num": 2,
"title": "Мелкоячеечное хранение",
"description": null,
"measure": "ячейка/сутки",
"amount": 100.00,
"price": 13.20,
"totalSum": 1320.00
},
{
"num": 3,
"title": "Дополнительные работы по запросу Заказчика",
"description": null,
"measure": "час",
"amount": 555.00,
"price": 133.20,
"totalSum": 73926.00
},
{
"num": 4,
"title": "Сумма переплаты",
"description": null,
"measure": null,
"amount": 1.00,
"price": 0.00,
"totalSum": -1000.00
}
],
"relations": []
},
{
"id": "1024",
"type": "EXPENSE",
"subType": "PREPAYMENT",
"status": "AWAITING_PAYMENT",
"title": "Списание",
"description": "Аванс за апрель",
"date": "2021-06-03 15:17:21",
"deadline": "2021-06-17 01:00:00",
"vatSum": 167.00,
"totalSum": 1000.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Сумма аванса 40%",
"description": null,
"measure": null,
"amount": 1.00,
"price": 0.00,
"totalSum": 1000.00
}
],
"relations": []
},
{
"id": "111",
"type": "REPORT",
"title": "Акт выполненных работ за апрель 2021",
"date": "2021-06-03 15:16:19",
"vatSum": 12741.00,
"totalSum": 76446.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Крепеж бирки",
"description": null,
"measure": "ед. товара",
"amount": 100.00,
"price": 12.00,
"totalSum": 1200.00
},
{
"num": 2,
"title": "Мелкоячеечное хранение",
"description": null,
"measure": "ячейка/сутки",
"amount": 100.00,
"price": 13.20,
"totalSum": 1320.00
},
{
"num": 3,
"title": "Дополнительные работы по запросу Заказчика",
"description": null,
"measure": "час",
"amount": 555.00,
"price": 133.20,
"totalSum": 73926.00
}
],
"relations": []
},
{
"id": "1023",
"type": "EXPENSE",
"subType": "POSTPAID",
"status": "AWAITING_PAYMENT",
"title": "Списание по акту выполненных работ",
"date": "2021-06-03 14:54:03",
"deadline": "2021-06-17 01:00:00",
"vatSum": 12574.33,
"totalSum": 75446.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Крепеж бирки",
"description": null,
"measure": "ед. товара",
"amount": 100.00,
"price": 12.00,
"totalSum": 1200.00
},
{
"num": 2,
"title": "Мелкоячеечное хранение",
"description": null,
"measure": "ячейка/сутки",
"amount": 100.00,
"price": 13.20,
"totalSum": 1320.00
},
{
"num": 3,
"title": "Дополнительные работы по запросу Заказчика",
"description": null,
"measure": "час",
"amount": 555.00,
"price": 133.20,
"totalSum": 73926.00
},
{
"num": 4,
"title": "Сумма переплаты",
"description": null,
"measure": null,
"amount": 1.00,
"price": 0.00,
"totalSum": -1000.00
}
],
"relations": []
},
{
"id": "1022",
"type": "EXPENSE",
"subType": "PREPAYMENT",
"status": "AWAITING_PAYMENT",
"title": "Списание аванса.",
"date": "2021-06-03 14:53:57",
"deadline": "2021-06-17 01:00:00",
"vatSum": 167.00,
"totalSum": 1000.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Сумма аванса 40%",
"description": null,
"measure": null,
"amount": 1.00,
"price": 0.00,
"totalSum": 1000.00
}
],
"relations": []
},
{
"id": "22252",
"type": "PAYMENT",
"title": "Поступление",
"date": "2021-06-03 10:20:00",
"vatSum": 0.00,
"totalSum": 76446.00,
"balanceSum": 0.00,
"relations": [
{
"id": "333",
"type": "BILL",
"title": "Счет на доплату.",
"date": "2021-06-03 15:17:42",
"relationSum": 75446.00
},
{
"id": "222",
"type": "BILL",
"title": "Счет на аванс.",
"date": "2021-06-03 15:17:42",
"relationSum": 1000.00
}
]
},
{
"id": "1021",
"type": "EXPENSE",
"subType": "POSTPAID",
"status": "AWAITING_PAYMENT",
"title": "Списание по акту выполненных работ",
"date": "2021-06-03 10:18:27",
"deadline": "2021-06-17 01:00:00",
"vatSum": 12741.00,
"totalSum": 76446.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Крепеж бирки",
"description": null,
"measure": "ед. товара",
"amount": 100.00,
"price": 12.00,
"totalSum": 1200.00
},
{
"num": 2,
"title": "Мелкоячеечное хранение",
"description": null,
"measure": "ячейка/сутки",
"amount": 100.00,
"price": 13.20,
"totalSum": 1320.00
},
{
"num": 3,
"title": "Дополнительные работы по запросу Заказчика",
"description": null,
"measure": "час",
"amount": 555.00,
"price": 133.20,
"totalSum": 73926.00
}
],
"relations": []
},
{
"id": "33333",
"type": "BILL",
"status": "PAID",
"title": "Счет \"Оплата по договору\"",
"date": "2021-05-28 10:53:00",
"vatSum": 12741.00,
"totalSum": 76446.00,
"balanceSum": 0.00,
"items": [
{
"num": 1,
"title": "Крепеж бирки",
"description": null,
"measure": "ед. товара",
"amount": 100.00,
"price": 10.00,
"totalSum": 1200.00
},
{
"num": 2,
"title": "Мелкоячеечное хранение",
"description": null,
"measure": "ячейка/сутки",
"amount": 100.00,
"price": 11.00,
"totalSum": 1320.00
},
{
"num": 3,
"title": "Дополнительные работы по запросу Заказчика",
"description": null,
"measure": "час",
"amount": 555.00,
"price": 111.00,
"totalSum": 73926.00
}
],
"relations": []
}
]
}
/api/lite/billing/balance-history
Запрос истории баланса
/api/lite/billing/balance-history
Получает историю баланса на начало месяца за указанный период времени.
Включает значение баланса на даты date_from и date_to.
Если date_to больше текущей даты, то date_to будет заменена на текущее время
Параметры
- date_from - фильтр по дате документа, от (формат: 2020-02-19T12:35:31)
- date_to - фильтр по дате документа, до (формат: 2020-02-19T12:35:31)
Пример результата запроса
{
"success": true,
"history": [
{
"date": "2021-03-20 00:00:00",
"balance": 0
},
{
"date": "2021-04-01 00:00:00",
"balance": 0
},
{
"date": "2021-05-01 00:00:00",
"balance": 73446.00
},
{
"date": "2021-06-01 00:00:00",
"balance": -3000.00
},
{
"date": "2021-06-02 13:04:48",
"balance": -3000.00
}
]
}
Интеграции
/api/lite/eshops/for_mapping
Запрос списка интеграций
/api/lite/eshops/for_mapping
Метод возвращает список настроенных интеграций с внешними системами
{
"eshops": [
{
"id": "e4a1920d-f154-7284-bad4-a7b9546032fe",
"type": "BERU",
"name": "Интеграция с Беру"
},
{
"id": "c802ba97-55b5-98d9-c8db-9d01ab7499d2",
"type": "WILDBERRIES",
"name": "Интеграция с Wildberries"
}
]
}
CAM
/api/lite/cam/delivery/contracts
Запрос списка контрактов
/api/lite/cam/delivery/contracts
Метод получает список каналов доставки
Фильтрация
Для поиска только по id можно использовать параметр "id".
Пример результата запроса
{
"contracts": [
{
"dlvLogin": "brocosmetics@gmail.com",
"courierCode": "DalliService",
"courierProduct": "1",
"icn": null,
"login": "login",
"password": "pass",
"barcodePoolId": null,
"token": null,
"ownerCompany": "brocosmetics@gmail.com",
"stock": null,
"contractId": null,
"params": [
{
"key": "paramKey",
"value": "paramValue"
}
],
"cactusId": "9b051eb5-82e5-5ed9-fa72-05aace3fd685",
"cactusName": "Dalli МСК",
"contractType": "AGGREGATOR_CONTRACT",
"isActive": false,
"isPublicAvailable": true,
"externalKey": "28c53bc2-158f-4084-96c1-70118eb86f5a",
"contractNumber": "DalliService_1",
"stickerFileType": null,
"deliveryAggregator": "TEMPOLINE",
"manager": {
"name": null,
"surname": null,
"patronymic": null,
"phone": "+71112223344",
"rawPhone": "+7 (111) 222-33-44",
"alternativePhone": "",
"email": null,
"post": null,
"personType": "CUSTOMER",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": null,
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
},
"gatherRequestSettings": {
"gatherType": "COURIER",
"timetableNonMonday": false,
"timetableNonTuesday": false,
"timetableNonWednesday": false,
"timetableNonThursday": false,
"timetableNonFriday": false,
"timetableNonSaturday": false,
"timetableNonSunday": false,
"timetableHolidays": null
}
}
]
}
Создание/редактирование контракта
/api/lite/cam/delivery/contracts
Создает контракт или редактирует существующий, если указан cactusId.
Пример запроса
{
"dlvLogin": "brocosmetics@gmail.com",
"courierCode": "DalliService",
"courierProduct": "1",
"icn": null,
"login": "login",
"password": "pass",
"barcodePoolId": null,
"token": null,
"ownerCompany": "brocosmetics@gmail.com",
"stock": null,
"contractId": null,
"params": [
{
"key": "paramKey",
"value": "paramValue"
}
],
"cactusId": "9b051eb5-82e5-5ed9-fa72-05aace3fd685",
"cactusName": "Dalli МСК",
"contractType": "AGGREGATOR_CONTRACT",
"isActive": false,
"isPublicAvailable": true,
"externalKey": "28c53bc2-158f-4084-96c1-70118eb86f5a",
"contractNumber": "DalliService_1",
"stickerFileType": null,
"deliveryAggregator": "TEMPOLINE",
"manager": {
"name": null,
"surname": null,
"patronymic": null,
"phone": "+7 (111) 222-33-44",
"rawPhone": null,
"alternativePhone": "",
"email": null,
"post": null,
"personType": "CUSTOMER",
"address": {
"country": null,
"countryCode": null,
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": null,
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
},
"gatherRequestSettings": {
"gatherType": "COURIER",
"timetableNonMonday": false,
"timetableNonTuesday": false,
"timetableNonWednesday": false,
"timetableNonThursday": false,
"timetableNonFriday": false,
"timetableNonSaturday": false,
"timetableNonSunday": false,
"timetableHolidays": null
}
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Удаление контракта
/api/lite/cam/delivery/contracts?id=9b051eb5-82e5-5ed9-fa72-05aace3fd685
Удаляет контракт с cactusId переданным в параметре "id"
/api/lite/cam/account/special
Запрос спец. настроек аккаунта
/api/lite/cam/account/special
Пример результата запроса
{
"success": true,
"clientNumber": "588589",
"useCustomDlvTariffLogin": true,
"tempBlockAccount": true,
"autoReserveInsufficient": null,
"isJurClient": null,
"isPostfactumPaymentMode": null,
"isContractOk": null,
"commercialAccount": true,
"allowSNG": true,
"reserveAfterPayment": null,
"country": null,
"currency": "RUB"
}
Редактирование спец. настроек аккаунта
/api/lite/cam/account/special
Пример запроса
{
"clientNumber": "588589",
"useCustomDlvTariffLogin": true,
"tempBlockAccount": true,
"autoReserveInsufficient": null,
"isJurClient": null,
"isPostfactumPaymentMode": null,
"isContractOk": null,
"commercialAccount": true,
"reserveAfterPayment": null,
"country": null,
"currency": "RUB"
}
Успешное обновление:
{
"success": true
}
Ошибка:
{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}
Требования к передаче заказов
При передаче неполной информации о товарах или заказах, во время подтверждения заказа могут возникать ошибки, мешающие его автоматической обработке. Ниже представлен список данных, которые обязательно должны быть заполнены для того, чтобы обеспечить безошибочную работу в Кактусе.
Это абсолютный минимум необходимых данных. Вероятнее всего, вам потребуется указать больше данных как о товаре, так и в заказе. Пожалуйста, опирайтесь на приложенные инструкции, которые помогут вам в работе.
1. Товары
Перед созданием заказа необходимо создать карточки товаров. Для этого можете воспользоваться данными инструкциями:
Инструкция по заведению товаров в ЛК вручную и с помощью импорта
В товарах обязательно должны быть заполнены данные (более подробные примеры передачи данных полей по API вы найдёте в приложенной выше инструкции):
- ID продукта (productId), ID товара (variantId)
- Наименование (shortName)
- Штрихкод (barcodes)
- Вес (weight) и габариты (dimensions)
- Если товар требует учёта по ЧЗ: заполнить учёт товара по уникальным номерам (accountingAttributes с кодом chestnyznak, значением *)
- Если вы отгружаете товары на маркетплейсы: внешний код для данного МП (extId в eshopSettings), галка enabled: true)
- Если планируете отгружать заказы за рубеж: ТНВЭД (tnvedCode), описание на английском (internationalDescription), страна происхождения (countryOfOrigin)
После создания товара и после изменения данных в нём обязательно выгружать товар на фулфилмент.
На момент подтверждения заказа для выгрузки его на упаковку остатки товаров должны быть ненулевыми (т.е., требуется принятая поставка).
Цену в карточке товара указывать не обязательно, но важно передать её в заказе.
2. Заказы
Инструкция по работе с заказами в ЛК Кактус
Обязательно указать (более подробные примеры передачи данных полей вы найдёте в приложенной выше инструкции):
- Номер заказа (id)
- Резерв (needReserve) -- по умолчанию true; для схемы работы по кроссдоку -- false
- Сумма заказа (totalOrderSum) и сумма страховки/оценочная стоимость (insuranceSum). Для заказов по России оценочная стоимость обязательно должна быть ненулевой. Сумма заказа строится из цен товаров и доставки
- Статус оплаты (paymentStatus), способ оплаты (paymentMethodCode). Если вы передаёте по АПИ предоплаченные заказы, в paymentMethodCode указывать no-cod и статус оплаты PAID
- Статус подтверждения заказа (confirmStatus). Для автоматического подтверждения заказа передавать статус APPROVED
- Данные о доставке (delivery).
- Обязательно передать code.
- Если доставка в ПВЗ -- указать pickupPointId (код ПВЗ).
- Желательно заполнить адрес наиболее полно по имеющимся полям и обязательно указать фиасы; для доставки в ПВЗ -- достаточно будет указать страну, регион и город (с фиасами), без улицы и дома.
- Для доставки Почтой России обязательно в дополнение к другим полям адреса указывать индекс. - Данные покупателя (receiver).
- Желательно заполнить ФИО наиболее полно. Действует ограничение при подтверждении: если ФИО меньше 3 символов, заказ не будет подтверждён.
- Для доставки за рубеж Почтой России обязательно указать ФИО латиницей.
Обязательно указать актуальный телефон покупателя. Электронную почту -- тоже желательно, т.к. в некоторых службах доставки есть ограничения, требующие указания почты. - Товары (items): порядковый номер товара в заказе (num, начиная с 1), variantId, название (name), количество (quantity), цена (price), ставка НДС (vatRate), а также доставка как отдельный товар (variantId=delivery) с теми же требуемыми данными (название, количество, цена, НДС). Цену товара указать обязательно.
- Название склада отгрузки (warehouseName) или код склада (warehouseCode).
Пример запроса на создание заказа с минимальными данными
/api/lite/orders
{
"id": "34567870",
"totalOrderSum": 999,
"insuranceSum": 999,
"needReserve": true,
"insuranceSumAutoCalculation": true,
"paymentStatus": "PAID",
"paymentMethodCode": "no-cod",
"needCustomerPayment": true,
"confirmStatus": "NEED_CONFIRM",
"delivery": {
"code": "0c985ad8-39dd-4d06-b36b-fb6042b092fd",
"pickupPointId": "", #обязательное для доставки в ПВЗ
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "Комсомольская",
"house": "1",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой 2",
"phone": "89011111111",
"email": "petr@petr.net"
}
},
"items": [
{
"num": 1,
"variantId": "demo1024",
"variantExtId": null,
"name": "Компьютер (демо товар)",
"quantity": 1,
"price": 522,
"vatRate": "VAT_10"
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 35,
"vatRate": "VAT_20"
}
],
"warehouseName": "Свой склад"
}
Задание на стикерование
Задание на стикерование предназначено для документов которые необходимо стикеровать особым образом, например с уникальными номерами. Сейчас данный функционал реализован для Поставки и Комплектации(вся логика реализована в ветке 9063_new_chz_loading).
Создание редактирование задание на стикерование через json
/api/lite/sticker/task/json или /api/lite/sticker/task/{sticker_task_id}/json
Данный метод предназначен для загрузки или редактирования задания на стикерование из json файла. Редактирование происходит с очисткой ранее загруженных но не зарезервированных уникальных номеров.
Параметры:
doc_id - номер документа(Поставки или Комплектации)
doc_type - тип документа(PURCHASE_ORDER, PHYSICAL_SET_ORDER)
Пример вызова:
{
"items": [
{
"variantId" : "1036",
"productId" : "2bc478a4-9d3d-f9bd-339b-024e4cbf053c",
"stickerTemplateCode" : "testTemplate2",
"stickerContentData" : "{ \"blocks\": [ { \"name\": \"block1\", \"value\": \"Состав: - 54% шерсть, 40% полиэстер, 5% другие нити, 1% эластан /nПодкладка - 100% полиэстер\" }, { \"name\": \"block2\", \"value\": \"Рекомендации по уходу /n- Не стирать /n- Не отбеливать /n- Не сушить в стиральной машине /n- Гладить при средней температуре /n- Бережная профессиональная химчистка\" }, { \"name\": \"block_img\", \"value\": \"https://asset1.marksandspencer.com/is/image/mands/SD_03_T15_1436T_XB_X_EC_1?$PRODVIEWER_SUB$\" } ] }",
"stickering" : false,
"stickeringWithUnigueNumber" : false,
"uniqueNumbers" : [
{
"uniqueNumber" : "898789891",
"type" : "UIT"
}
]
}
]
}
Пример ответа:
{
"c": "01de612f-209c-bbbb-167c-fc6f2e7649c0",
"orderId": "1016",
"success": true
}
Создание редактирование задание на стикерование через excel
/api/lite/sticker/task/excel или /api/lite/sticker/task/{sticker_task_id}/excel
Данный метод предназначен для загрузки или редактирования задания на стикерование из файла эксель(formData). Редактирование происходит с очисткой ранее загруженных но не зарезервированных уникальных номеров.
Параметры:
doc_id - номер документа(Поставки или Комплектации)
doc_type - тип документа(PURCHASE_ORDER, PHYSICAL_SET_ORDER)
upFile - файл excel в formData
Пример вызова :
{
"fileName" : "chestnyznak.xls",
"content" : "0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAA......" - base64
}
Пример ответа:
{
"c": "01de612f-209c-bbbb-167c-fc6f2e7649c0",
"orderId": "1016",
"success": true
}
Файл эксель:
1. уникальные номера(второй лист):
2. Строки задания на стикерования(первый лист):
Получение задания на стикерование
/api/lite/sticker/task
id(не обязательный) - номер задания на стикерование
parent_doc_id - номер Поставки или Комплектации
doc_type - тип документа(PURCHASE_ORDER, PHYSICAL_SET_ORDER)
Необходимо передать либо id, либо parent_doc_id и doc_type. Если не заполнить данные параметры то возвратится ошибка что документ не найден.
Пример ответа:
{
"id": "1037"
"parentDocument": "1022"
"items": [
{
"variantId": "1025",
"productId": "af25e75b-412e-4a0c-9662-4db575bf6df3",
"num": 1,
"stickerTemplateName": "testTemplate",
"stickerContentData" : "{ \"blocks\": [ { \"name\": \"block1\", \"value\": \"Состав: - 54% шерсть, 40% полиэстер, 5% другие нити, 1% эластан /nПодкладка - 100% полиэстер\" }, { \"name\": \"block2\", \"value\": \"Рекомендации по уходу /n- Не стирать /n- Не отбеливать /n- Не сушить в стиральной машине /n- Гладить при средней температуре /n- Бережная профессиональная химчистка\" }, { \"name\": \"block_img\", \"value\": \"https://asset1.marksandspencer.com/is/image/mands/SD_03_T15_1436T_XB_X_EC_1?$PRODVIEWER_SUB$\" } ] }",
"stickering": true,
"stickeringWithUnigueNumber": true
}
]
}
Получение списка типов документов в Кактусе
/api/lite/sticker/task/document_types
Пример ответа:
[
"ORDER",
"PURCHASE_ORDER",
"SKU_QTY_CORRECTION",
"INTER_MOVEMENT",
"PURCHASE_RETURN",
"ORDER_RETURN",
"TAKE_IN_PLAN",
"TAKE_IN_FACT",
"TAKE_OUT_PLAN",
"TAKE_OUT_FACT",
"TAKE_OUT_PACKING",
"TAKE_OUT_PALLET",
"COD_IMPORT",
"COD_DOC",
"COD_PAYMENT_DOC",
"DELIVERY_PLAN",
"DELIVERY_BILL_IMPORT",
"DELIVERY_BILL_DOC",
"WAREHOUSE_BILL_IMPORT",
"WAREHOUSE_BILL_DOC",
"CONFIRMATION",
"RTU",
"PTU",
"STORNO_RTU",
"PRICE_DOC",
"RESERVE_DOC",
"TAKE_OUT_LIST",
"GATHER_REQUEST",
"PAYMENT",
"FORCED_BALANCE_PAYMENT",
"ORDER_EXPENSE_PAYMENT_DOC",
"ORDER_PAYMENT_DOC_FACT",
"CUSTOMER_ORDER_PAYMENT_DOC_PLAN",
"CUSTOMER_ORDER_PAYMENT_DOC_FACT",
"CUSTOMER_ORDER_FULL_PAYMENT_DOC",
"CLIENT_BILL",
"CONDITION_MOVEMENT",
"PHYSICAL_SET_ORDER",
"BILLING_DOC",
"STICKER_TASK"
]
Получение всех чз
/products/all/unique_numbers/excel
Пример отчета:
{
"success": true,
"url": "https://storage.yandexcloud.net/feed-cactus/un_test@test.ru_06.03.2024_12-00-44.xls"
}
Инструменты администратора
Настройки интеграций с магазинами и маркетплейсами
Реализован http сервис для работы с магазинами и маркетплейсами. Добавлен следующий функционал:
1. Получение одного магазина. Метод GET /api/lite/settings/eshop?id=sdjkcjnsd-njkw398njk-njskdcbj. Получаем вот такую JSON:
{
"shops":[
{
"active":false,
"additional_params_dictionary":"",
"apiPassword":"AgAAAAA2xaMuAAXwby5dKO5av0XslPGLxdkzUAA",
"apiToken":"FF000001AC70ED29",
"apiUrl":"https://app.kak2c.ru/api/beru/588589",
"autoSkuImportInterval":24,
"bitrixCatalogId":"e4a1920d-f154-7284-bad4-a7b9546032fe",
"bitrixCatalogName":"Каталог товаров KAK2C7",
"confirmationType":"SELF_CONFIRM",
"default":false,
"defaultVat":"NO_VAT",
"deliveryInfoID":"42fe7049-6c47-2bca-e690-c49267060e9f",
"eshopOfferIdType":"EXT_ID",
"extId":"21584150",
"id":"e4a1920d-f154-7284-bad4-a7b9546032fe",
"isActive":false,
"isDefault":false,
"isOrdersEnabled":false,
"name":"Bro Cosmetics",
"needAutoSkuImport":false,
"needCodConfirmation":true,
"needCopyOrderNumber":true,
"needExportStatuses":false,
"needPrepayConfirmation":false,
"needReserve":true,
"needRestsControl":true,
"ordersImportInterval":1,
"percentStock":100,
"prevPriceTypeID":"805a5315-4d39-523a-6d79-e90fcc056abd",
"priceTypeID":"35578ac2-7949-8b3f-cbd0-19cdb82a2046",
"pricesRestsExportInterval":1,
"reserveType":"ON_IMPORT",
"syncOrdersToEshopMode":"NO_SYNC",
"tenantOrganizationID":"ad68f1b6-8975-1179-9fe6-df8bbb6333f2",
"type":"BERU",
"warehouseID":"6805bc64-270f-ae7d-1231-773ff181e446"
}
],
"success":true
}
При этом нужно учесть что для tenantOrganization вместо объекта возвращается его id в поле tenantOrganizationID. То же сделано для warehouse-warehouseID, deliveryInfo-deliveryInfoID, prevPriceType-prevPriceTypeID и priceType-priceTypeID. Соответственно на фронте нужно получить эти объекты из базы по id.
2. Получения списка магазинов. Метода GET /api/lite/settings/eshop. Получаем файл аналогичный предыдущему, но вместо одного магазина в файле все магазины данного клиента.
3. Изменение и добавление магазина реализовано одной операцией. Метод POST /api/lite/settings/eshop. В теле метода передаем json:
{
"active":false,
"additional_params_dictionary":"",
"apiPassword":"AgAAAAA2xaMuAAXwby5dKO5av0XslPGLxdkzUAA",
"apiToken":"FF000001AC70ED29",
"apiUrl":"https://app.kak2c.ru/api/beru/588589",
"autoSkuImportInterval":24,
"bitrixCatalogId":"e4a1920d-f154-7284-bad4-a7b9546032fe",
"bitrixCatalogName":"Каталог товаров KAK2C7",
"confirmationType":"SELF_CONFIRM",
"default":false,
"defaultVat":"NO_VAT",
"deliveryInfoID":"42fe7049-6c47-2bca-e690-c49267060e9f",
"eshopOfferIdType":"EXT_ID",
"extId":"21584150",
"id":"e4a1920d-f154-7284-bad4-a7b9546032fe",
"isActive":false,
"isDefault":false,
"isOrdersEnabled":false,
"name":"Bro Cosmetics",
"needAutoSkuImport":false,
"needCodConfirmation":true,
"needCopyOrderNumber":true,
"needExportStatuses":false,
"needPrepayConfirmation":false,
"needReserve":true,
"needRestsControl":true,
"ordersImportInterval":1,
"percentStock":100,
"prevPriceTypeID":"805a5315-4d39-523a-6d79-e90fcc056abd",
"priceTypeID":"35578ac2-7949-8b3f-cbd0-19cdb82a2046",
"pricesRestsExportInterval":1,
"reserveType":"ON_IMPORT",
"syncOrdersToEshopMode":"NO_SYNC",
"tenantOrganizationID":"ad68f1b6-8975-1179-9fe6-df8bbb6333f2",
"type":"BERU",
"warehouseID":"6805bc64-270f-ae7d-1231-773ff181e446"
}
изменение происходит если заполнен id, добавление при пустом id. Также нужно учесть что нужно передать tenantOrganizationID, warehouseID, eliveryInfoID, revPriceTypeID и priceTypeID.
4. Удаление магазина. Метод DELETE /api/lite/settings/eshop?id=sdjkcjnsd-njkw398njk-njskdcbj. Удаляет магазин из базы.
/api/lite/admin/settings/delivery-info - информация о доставке
1. Получения списка deliveryInfo. Метода GET /api/lite/admin/settings/delivery-info.
2. Изменение и добавление deliveryInfo реализовано одной операцией. Метод POST /api/lite/admin/settings/delivery-info. В теле метода передаем json:
{
"active": true,
"adAttachments": [],
"aggregatorDeliveryCompany": "GOODS",
"courierTitle": "СберМегаМаркет",
"default": false,
"deliveryAggregator": "TEMPOLINE",
"externalKey": "GOODS",
"gatherRequestSettings": {
"currency": "RUB",
"cutOffTime": [
12,
0
],
"documentID": "0e451286-9ce5-dec0-6d74-fc54575e3360",
"isExported": false,
"isIntegrationError": false,
"isSynchronized": false,
"printStatus": "",
"timetableNonFriday": false,
"timetableNonMonday": false,
"timetableNonSaturday": false,
"timetableNonSunday": false,
"timetableNonThursday": false,
"timetableNonTuesday": false,
"timetableNonWednesday": false,
"uid": "0e451286-9ce5-dec0-6d74-fc54575e3360"
},
"insurancePercentage": 100.0,
"isActive": true,
"isDefault": false,
"isPublicAvailable": false,
"marketplace": true,
"name": "GOODS",
"russianPost": false,
"type": "AGGREGATOR_CONTRACT",
"uid": "094c7b63-d157-33f5-e1e7-7b3ca34b3073",
"warehouseComments": []
}
/api/lite/admin/settings/payment-method - информация о способе оплаты
1. Получения списка способов оплаты. Метода GET /api/lite/admin/settings/payment-method.
2. Изменение и добавление способов оплаты реализовано одной операцией. Метод POST /api/lite/admin/settings/payment-method. В теле метода передаем json:
{
"code": "no-cod",
"name": "Без наложенного платежа",
"paymentMethod": "NO_COD",
"uid": "68150888-7670-b46e-8ab9-ce42bb6f4255"
}
/api/lite/admin/settings/checkout - настройки чекаута
1. Получения списка checkoutSettings. Метода GET /api/lite/admin/settings/checkout .
2. Изменение и добавление checkoutSettingsреализовано одной операцией. Метод POST /api/lite/admin/settings/checkout. В теле метода передаем json:
{
"commercialAccount": true,
"defaultCity": "",
"defaultDeliveryServiceOptions": {},
"deliveryPremiumType": "PERCENT",
"deliveryRegionSettings": {
"commonSettings": {
"ALL": {
"ALL_REGIONS": {
"enabled": true,
"extraFeeFixValue": 0,
"extraFeePercentValue": 0.00,
"tariffEnabled": true
}
}
}
},
"disableCodSumInTariff": true,
"freeDeliveryAmount": 1.00,
"freeDeliveryRegion": "RU_SNG",
"insurancePercent": 100.00,
"onlySufficientOffers": false,
"orderSubtype": "KAK2C_SUBSCRIPTION",
"paymentAccountId": "306b29d8-6f97-810e-eb71-046b6e37d7df",
"paymentMethodCodes": "online",
"paymentMethodCodesList": [
"online"
],
"paymentProvider": "YANDEX",
"realUiRequiredFields": [
"PHONE",
"EMAIL"
],
"trustToken": "322322",
"uiRequiredFields": "PHONE;EMAIL",
"uid": "245b5b14-1dd1-7dcd-7917-8b7d5aee510e"
}
/api/lite/admin/settings/lite - настройки lite
1. Получения списка liteSettings. Метода GET /api/lite/admin/settings/lite.
2. Изменение и добавление liteSettingsреализовано одной операцией. Метод POST /api/lite/admin/settings/lite. В теле метода передаем json:
{
"businessTariff": false,
"clientNumber": "6750043",
"defaultReserveOrders": true,
"displayFinance": true,
"menuCatalog": {
"humanId": "1000",
"items": [
{
"collectionId": "1001",
"title": "Все товары"
}
],
"name": "Каталог",
"uid": "e811675e-df74-e1ba-dfc7-b734f02576ef"
},
"needApiProductsReturnDetails": false,
"orderEmailFooter": "PHAgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48c3Ryb25nPtCV0YHRgtGMINCy0L7Qv9GA0L7RgdGLINC/0L4g0LfQsNC60LDQt9GDPyDQodCy0Y/QttC40YLQtdGB0Ywg0YEg0LzQsNCz0LDQt9C40L3QvtC8Ojwvc3Ryb25nPjwvcD48cCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPndoYXRzYXBwOiZuYnNwOzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE0cHg7Ij44KDk1PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsiPjMpNzAzLTA2LTIzPC9zcGFuPjwvc3Bhbj48YnI+ZS1tYWlsOiZuYnNwOzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiBpbml0aWFsOyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBpbml0aWFsOyBiYWNrZ3JvdW5kLXNpemU6IGluaXRpYWw7IGJhY2tncm91bmQtcmVwZWF0OiBpbml0aWFsOyBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGluaXRpYWw7IGJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyBiYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IGZvbnQtc2l6ZTogMTRweDsiPnBvZHBpc2thQGNvbmRlbmFzdC5ydTwvc3Bhbj48YnI+0YLQtdC70LXRhNC+0L06IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE0cHg7Ij44KDQ5NSk3NDUtNTUtNjUmbmJzcDs8L3NwYW4+PC9wPg==",
"orderEmailHeader": "PGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PGltZyBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFCODBBQUFHZUNBWUFBQUFlNnBBSEFBQUFDWEJJV1hNQUFDNGpBQUF1SXdGNHBUOTJBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBZGFoSlJFRlVlTnJzM2UxVkcwbmFNT0FTWi83ak53SzBFY0JFZ0NZQ3ZCR2dpY0NlQ0N4SE1EZ0N5eEVNam1CRUJJc2pXQkhCQXhId2RnMmxIZG1EaENUNm82cjd1czdSWWRjZVExUGQ5WGxYM1QxNmZId01BQUFBd0RDTlJxTTMxWmVyNmpOL2ZIeGNLQkVBQUFBR056Y1dOQWNBQUlCaFNnSHpSZlU1Zlh4OEhDa1JBQUFBaHVoSUVRQUFBTUR3akVhanM1QUM1a29EQUFDQUlmdEpFUUFBQU1Dd3JBWE1qOU1mM1NrVkFBQUFoc3BKY3dBQUFCaVEwV2owTm53Zk1JK1dTZ1lBQUlDaEVqUUhBQUNBZ1JpTlJ0UHF5eC9oKzRCNWRLOTBBQUFBR0NwQmN3QUFBQmlBMFdoMFZYMzV2T0d2YjVVUUFBQUFRK1dkNWdBQUFOQnpvOUZvWG4yNVZCSUFBQUR3VDRMbUFBQUEwRk9qMGVoTjllVzYrcHkvOEo4dWxCWUFBQUJESldnT0FBQUFQWlFDNW92cWM2bzBBQUFBWURQdk5BY0FBSUNlR1kxR1o5V1haZGc5WUw1VWFnQUFBQXgySHYzNCtLZ1VBQUFBb0M4VC9hZUErYUw2SE8vNmJ4NGZIMGRLRGdBQWdLRnkwaHdBQUFCNllqUWFUYXN2L3dsN0JNd3JEMG9PQUFDQUlSTTBCd0FBZ0I0WWpVYnZxeStmRC9pbnQwb1BBQUNBSWZ0SkVRQUFBRURaUnFQUnZQcHlxU1FBQUFCZ2YwNmFBd0FBUUtGR285R2JHZ0xtQ3lVSkFBREFrRGxwRGdBQUFBV0tBZlB3RlBBK1ZSb0FBQUJ3T0NmTkFRQUFvRENqMGVnczFCY3c5MDV6QUFBQUJzMUpjd0FBQUNqSVdzRDh1S1p2ZWE5VUFRQUFHREluelFFQUFLQVFvOUhvYmFnM1lCNEptZ01BQUREcytmYmo0Nk5TQUFBQWdOd244S1BSdFByeXVlN3YrL2o0T0ZLNkFBQUFESm1UNWdBQUFKQzUwV2gwRlJvSW1BTUFBQURlYVE0QUFBQlpHNDFHOCtyTFpVUGYva1lKQXdBQU1IU0M1Z0FBQUpDaDBXajBwdnB5WFgzT2xRWUFBQUEwUjlBY0FBQUFNcE1DNW92cWM5cndqN3BWMmdBQUFBeWRkNW9EQUFCQVJrYWowVmw0Q21hZnR2RGpKa29jQUFDQXdjL0ZIeDhmbFFJQUFBRGtNRWwvQ3BndnFzOXhpei8yWDQrUGowdWxEd0FBd0ZBNWFRNEFBQUFaR0kxRzArckxmMEs3QWZQb3JkSUhBQUJneUFUTkFRQUFvR01wWVA2NW94OC9kUWNBQUFBWTlMeGNlbllBQUFEb2NHSStHczJyTDVjZFg0WVU3UUFBQUF5V2srWUFBQURRZ2RGbzlDYVRnSGtrUlRzQUFBRERuYU03YVE0QUFBQXRUOFpIb3pmVmwwWDFPYzNra3I0OVBqNmV1VE1BQUFBTWtaUG1BQUFBMEtMUmFEUU9lUVhNbzlOMFhRQUFBREE0Z3VZQUFBRFFrdEZvRkU5ejM0YThBdVlyVTNjSUFBQ0FJUkkwQndBQWdCYU1ScVA0M3ZCRjlUbk85QktuN2hJQUFBQkRKR2dPQUFBQURSdU5SdFBxeXg4aDM0QjVkSkpPd2dNQUFNQ2dDSm9EQUFCQWcwYWowYXo2OHJtUXk1MjZZd0FBQUF4dTd2NzQrS2dVQUFBQW9JbEo5Mmcwcjc1Y0ZuVEpkNCtQajJOM0RnQUFnQ0Z4MGh3QUFBQnFOaHFOM2xTZlJTZ3JZQjVKMFE0QUFNRGcvS1FJQUFBQW9ENHhZRjU5V1ZTZjA0SXUreUZkYy93czNVVUFBQUNHUk5BY0FBQUFhcEpPYVY5WG41UE1ML1d1K3R5R0ZDaC9mSHk4ZGZjQUFBQVlLa0Z6QUFBQXFFRUttQytxejNHR2wzY1gvajVKSG9Qa1MzY01BQUFBbmdpYUF3QUF3Q3VOUnFOcDllVnpScGNrU0E0QUFBQTdFalFIQUFDQVY4Z2tZQzVJRGdBQUFBY1NOQWNBQUlBRGpVYWplZlhsc29NZkxVZ09BQUFBTlJFMEJ3QUFnRDJOUnFNMzFaZXIwRjdBWEpBY0FBQUFHaUpvRGdBQUFIdElBZk5GOVRsdDhNY0lrZ01BQUVCTEJNMEJBQUJnUjZQUmFGeDl1UTcxQjh3RnlRRUFBS0FqZ3VZQUFBQ3dnOUZvZEJhZWd0ckhOWHc3UVhJQUFBREloS0E1QUFBQXZHQTBHcjJ0dnN6RDRRRnpRWElBQUFESWxLQTVBQUFBYkRFYWphYlZsODk3L2pOQmNnQUFBQ2lFb0RrQUFBQnNNQnFOWnRXWER6djhwNExrQUFBQVVDaEJjd0FBQUhqR2FEU2FWMTh1Ti95MUlEa0FBQUQwaEtBNUFBQUF2RXlRSEFBQUFIcHFWRTMwbFFJQUFBRDhPR0VlamQ1VVh5YlY1MWFRSEFBQUFIcThCaUJvRGdBQUFBQUFBTUJRSFNrQ0FBQUFBQUFBQUlaSzBCd0FBQUFBQUFDQXdSSTBCd0FBQUFBQUFHQ3dCTTBCQUFBQUFBQUFHQ3hCY3dBQUFBQUFBQUFHUzlBY0FBQUFBQUFBZ01FU05BY0FBQUFBQUFCZ3NBVE5BUUFBQUFBQUFCZ3NRWE1BQUFBQUFBQUFCa3ZRSEFBQUFBQUFBSURCRWpRSEFBQUFBQUFBWUxBRXpRRUFBQUFBQUFBWUxFRnpBQUFBQUFBQUFBWkwwQndBQUFBQUFBQ0F3UkkwQndBQUFBQUFBR0N3Qk0wQkFBQUFBQUFBR0N4QmN3QUFBQUFBQUFBRzZ5ZEZBQUFBQUFBQWh4bU5SdFBxeXpqKzc4Zkh4NWtTQVlBQysvT3FFMWNLQUFBQUFBQ3dwOUZvOUtiNnNxdyt4K21QL3YzNCtIaXRaQUNnTE5LekF3QUFBQURBWWQ2R3Z3UG0wWHRGQWdEbGNkSzhpMElmamNZaHBldFpzLzVueS9SWldWYjNhYW5rWU9jNkZuZjRudjN3eCt0L2RsOTlibi80ZS9VTUFBQUFnTDJNUnFPNHhuVDZ3eC8veXpvVEFCVFdwd3VhTnpKUWlvRzVjWGdLMEkzVDU4MHpnNmQ5M1lXbllQcnQ2bFBkdjFzbHprRHIyV1N0ZnAyRnY0UGl4elY4KzIvaDc4RDZjcTIrM1N0NUFBQUFBS0swRHZ5ZlovN3F5K1BqNDFRSndYZUhDQ2ZwajFaZjQ1K2Q3UEd0YnRMWHVGWWIxMmtYb2VDRFVGVzV4S3dVczVEV3M2dmZZK1JwZ1k3cnBhQjVMUU9qMk1pZnBjOXB5NWZ3a0RxSCtMbTJneEgxclBINmRydFc1d1RTQVFBQUFBWnFOQnJOcXkrWHoveFZYRU1hV3pkaWdIVmlISjdXYnlmcDYza0xQM1k5UnJMSS9hQmhWVWJUOEJRcy8yN0RnS0E1WkZBL0JjMzNidEFtcWNHZnROVGc3eXVlUnIrdVB2UFNUcUdubE5xeHczaVRPb21aSjI2dzlleHNyWjdGejNIR2wvdHRiVUIyN2U0QkFBQUE5RjlheTF5R3pldFd2ejArUGw0cEtRWlFGeWJWbDdmaGFSMzNOSU5MaWpHU1JYZzZaSGlkV1RsZGJTb2pRWFBJb0o0S21yL1lrSTFUWTc5cTlJOEx1dnk3MUFqUGM5L1ZXSlh6clByeWZyMThkUktEcTJ0djErclpTY0cveXRmd3RISGwybTdpN0orNTJENmVLWW1kTEllV1ZxNTZQaFk5L0xYZTU3eWhMbTJZc3FEVXZGVWF1MDEvdHBTNUNQV1JIRlJ0MFVRcGFHLzRoN2krTXgvUTh4SG5JTDJiaDJqZmV2ZU1mdDd5bjl4VjkzdXNwT2pwOHo5SmJYUmN6ODA1WnJJNlpIalYxVnczbGRVc3ZIQUlzMi94a0w3MjQvUzhiUk0wZjdZeWoxTmpIeXYwYVU5K3JTOXBjclhJc09HTUhjWkozenNKbnIzL3EwQjU3b09yUXdtZzUvMzhMVUtlR1VOeU5hZ2Q4dFh6MGNjQjBpKzVqUU9lbVVUK3FhcGw1Y2YzeGYzMU5lZm5DUFdSL2pBZjFON3dyRUdsZTA0SExENW8zOGo0R1kzajQ1Zldqdjh0TXlFOWV1WlhtV0xqNGJjU0R6M0Z0ZHFydHVhMEtjNFUxOUl1aHRnLzlMVWZwOTkrVWdUZk5maHZVNE4vMnNOZk1iNWI1N0w2UGVQaTU2enJ4YzVkZDFmUnk3cDJsZ1pYOFhQYzgxLzNJbjArVjc5M0hKVE5UWlFvMkt4NmpxK2RRSVZCT2YvaDY2b3ZqMS9pb3YxdCtzUjI0Vll3SFFBYUYrZlE4L0MwZmdWMEtLMXY3YktHSE5lYXJRVlIrdk0rRGs5citaY04vNmo0R3N6MWpXRnZRcjJ4bXIvV2FwdU9rYlJZWGtETkJoODBYMHNqMGxhRHYycUlsK216N2o1OXhqLzgrU1I5UFV0Lzk1cU9JaTU2L3RsVjhIemYzVlgwcXE1TlF6dWJVcjZ0MWFWZDB4Q1AxK3BkVXhzNVZvT3ltQkpvSHA0QzZFdFBCZ1ZaTGRCTkZBV1Eyb1R6OVg0ekJkUHZ3dC9COUlWQU9nRFVQN2VNV2R0c3lJYk92ZC94dnp1UDY2SFdnQ2hSamNIZjFhYnJPRC84MzVydElmUEZGTStKVnJHU3MvVFo1M0RXS2tZU0R6bTlyNnQrcG9PWjc4TVByNkVGQ21yM2hwaWV2WVUwSXQ5U0IvRFhnbUVUN3c5Tm5VUHNEQ2JoZGU5YXZ3a3R2T00wbFhuc1lOL3QrbStrcStyTndHcmEwRURodTBYNVVPTTdXTlB6ZXZiRHA0bGdmNWF2VFJqUTg3a0lzbDBjWWhDcDVhUm43NlRNNDNoR2V0WitXbzJOLy9wNFpVa1JiYUQ2U09mTUI3VTNiRFdJTk8zU3M1UHhzeG5YalpaaDk3V3VUOVY5ZjYva0tPd1pqd2ZmRGcyV3R6NEhUTmtmSnVteno0RzkyS2ZHbE8yekd2cXNWNjJCUzg4T0dUeTNRd3FhcHdCZWJMaW1vZjRBM3VyZHhZc3VkZzZtaWVicTNkQ0hiQVNJd2J2M1RYUmdoM1lZSmhIRjE3VlpxRCtEUTJmMUxBMFdWL1ZzRXVyZGNKUEZheE1HK0p6R3dmOVpROTkrdk9VWnVRdGx2dmRwZlRJeGhBVzZKdXZqdGgzUU53MyszTVkzeWRVd3diMXE4RWZVbmRhdFRqY3QvWnh4SnUzUGFnSGxXdCtuUG1iWXg5ME8rTlpudFpuUWZGQjcwOEp6L1JES1BnWFcreUJjeWxnMzdhQXZhclEvcU83YlJPM3Z4YlA1MlR5YW5qN2ZzVytaSGRCSGRob2YyVkJQNHpydXJnSDBPRStkN3J0dWtuN09ySTY1dHFCNTcrZDZaeUhQc1dkY3ErNjZ6bVl6RngxRTBMekJBRjVjNEp5SHB3Vy8rNHgrMzFYdy9QS0FoaU11cU05cjdKZ083akFza3FoclB3eTRjcXRuc1pON24rcGFYWjFkN0tCbWRkVkJzaDBVL2hLZUZnWlBDLzRWdjFiUHFmY29IdjU4TERZTkJ2VjlqWmI3SkdSNmtxMkwrNTc2c2JoWVBFNmZTZWdtcUI3SG40c2MrM29HV1I5dmhoeklTTzNDZGNoa2M1OCtrWnFlNjIyTFhyK0U4ays1LzJJRFdpTjkwWTNBTmk4OFA3Y0h6T2wvdGQ1REFXUEJ1RjYxVC9BcSs5ZFFIckJlL1Z2MXUxenQ4SDBuNlhldmJld3NhTjZvenR2Z2pMT2Vmbnh0cG9VYXlpYld1WGM1Rk1aUnp4djZjZldKRmVHL29iNGdYbHpZaTZleS94VUgwTEdpNWJhNEY5UG1WcDlwdk1iNHdLZHIza1VNL0gyT2xUZDFKZ2RQUEZJRDhEbVVmWnFTN3VyYVEzcDJZejE3bTJrOWk2OWVpTHNQWThEaDF6UklmSzJUVkFkdjE5N1BRejlOQzcvK0M4OG9sQzMxWTR2VXg4N1N1SGFjSnVtL3BINzQ2eDdqeUVQRjhlZEZHamYrWDlXMlhNZU5seW5EQzlCeXV4Q2VUai9jS0EwRzhzd3ZxaStmQ3Y4MTV1NGt0Q3NGRmcvWkJEOVRlbVQ4WE1lRFFiRmYzRFdnRjlkQmYwMXp5Rm11QWZQVTN5L1hZaVZmZHZnbnY2ZDU2WnNOWmJXS2ZjU05WMklmWmZobzAxTDI0L0xZQm4zTjRWcDZHVFJ2TUZnZUZ3L0hLVkMyTE9CQlc2WWRJdU93WC9BOGRvNjM2Y1Q2dnVWK25Ub003d2tleG9EcVRkb0ZWSGV3UFBzQjF3OTFMUVljWWoyTFFZWTZGaG5qNU92UHRJRmw0a25yNVVEZ05qM3JKWnNMYWtGdjI2aEY2b2ZmcHMxaFAxZWYzOEpUdXJxbUNhQkR0L1gvUHAydS9LSTBHSWhacUdjRGRGZE8waWt1b0QzdlgxRmZKNHFQbktTMTNiaWUvM3ZZTFpQbWVyQjhYdGc0ZHhVOC8zbUh1VzJjbHk3U0pwbFZXWWw5bE9scjE2ZW8yZGswdExQdXRGV3ZndWFwa1k4Vm9NNWdlVWdMQnFzZ1huRXBJOVBDUnl5WGNkZzlTQk03eVQvaTVvT1hGaXAvQ0p4ZXFOdURHVlRGWjJvWjZrdWI4YkhrZXBicTJpSXRNdFoxOGp3T3dQNU05WERzcWV1WDFDNlhmSklyN3FZMTZJUmh0RmZ4VlBwVjlZa0xCbkYzZnRzQjlHWHFDeWZ1QnJSVzc2ZWgvQTErc011ekh1ZWVwYjkyNk1QNm9qN1FuTFJHK3BvMjQ3MVNKS1BuT2ZZZHQySDM5Znc0Tmp3ci9jUnVtdCtlN1REV2pZZWFZdUQ4N2RvQlRiR1Bzc1QxK2FsaUtHcGNIdS9YUTVmWDBadWdlVW9oc2d6MXZpTWhMZ2Ira2s2VzMvZmhvVXRCbXJqWXVXdWc1akw4c0t2cWgzS2ZoWG9EcCtSZjEySUttbFZkcStOZDN2RlovRmZKd2ZKbjZsb2NTTzB5K0FwNzFNTmJKd2g2cWZPQndDdTlzMEFIZzV2RUxIOElvSDhLN2FSd2ozMWgzRWkyZFBvY1dxdnZjZXo1cTVKZ0FNOTZMN0pBdVpQUWlyZmhkV3RoRnc1RmtJT1VZWFlSZGtzdkhtTWtQL2RwN1hadHJCdFBuZCs5TUJmOUk5UjdRSk1XMit3K1BiTURHcGQzdXNHcytLQjVDdURGZ3R3MWhjaXU0bnNPenRJN3J2cjI0QzNYVHNQdXNzaTUybFUxV1N2M2FjMkJVL0t2YTIvV1V0RFU4YjZXK096OWx0Nmh1dXhoUGJ0ZkczelZjUm92MXJNUEtWZ3c4VVQycHowTzVaL1ducnVUTU53MkxMNTNLcVZ3cnl2THlrdmlHR1Q5OVBuWW5ZQkc2L2s4Q0p3empHZDlGakpJQi9rS3Ara3dDZENzOTVsOER6aFlYTmNQVDRIZ1hkYjBZd2JlU1FwazliSC9qNzlYM0JCKzQ4bm9uZC82K3R3T1pBN2EyZXZDaWcyYXI2VUVqd0c4MHhxL2RRemsvVEtFOXh5c25ZYmRwVk9JbldnODNUT0w3MWtPVDR1Vko2cndZQVpUcTB3T2RhV2dpWXNSY1ZQSzFRRHFXZXljSnpVMjlDZXBMbDQ1WmRlYlorU3E4TUg1cVN3SVFCeFh4dmZhaGZhQzU2dlQ1LytWdWgxYW1UY0tuRE1FMDhLdmYyWXpHVFFuWlZtcll3MWExaVM2Zkk1algvZDV4Ly84WTE4eThMNHcxcjFQQnd5L2VFSjY0K3NRNGc0OUYrTlJkMTM4NENLRDVpbDlTQXhFMVowU1BBYnl4bjA4WGI2bFUxaWRPdDgxRlZrOFdYNnV6ZzVtSURWT215VHF6T1N3MnFHNEhGQTl1MC92aGF4enNURzJmN2VDQkwwUm40K1MwN1Ivc0VBSHBENnY3ZUI1dEVyZHZ0QXZRbk4xT3p5OWpnSDYvSnlYbnFZOXp0bm43aVEwT20rdnE2NitWWnkwYmMrQSthOURPRlQ0d3poZ0dtd1U3WU9INEQzbWZhaVA5MTMxbFVVRnpkZlNROGYwSVhXZmN2NlMwckhmRC9RaGpKM2dMNkhzb0EzMTFyZlY1cFE2TjBrTVlvZmlsbm8yRDAvcDJ1dXFaMDZkOStmWldBWnAyb0dlOVhrcGVQNnh4ZkhsZVJBOGh5YnJkZHp0N3dRT2ZYL080NWk4NURUdDUya3VEOVJ2V3VQM21pbE8yblJBd0h3KzFIbHNFRGd2bmZlWTk2YytkcktodFppZ2VWcjRpb1YwMGNDMy81SjJFZzM5SVZ5RXB6VFMzMVRKUVEraTR1YVVPRURZOWQwMnV4cmNEc1V0algyc1ozVUdFT0twODBWS0ZVYTV6MGJwYWRyUHZVY1JlS1p0aTMxLzIrK0lXd1hQcjJYQmdOcnI5RFI0NXlQOU55MzgrdWMyVlVPOVVzQ3h6ald5RTVzOGFmbjUzVFZnL21tb0FmTzE4Vzc4L1FYT3kvUnBTRm1rQjFJZloyM1BQNHNJbXFkM3BjWjNsemZ4RHUxZkJjeS9ld2hYQVQyQjgyRU9vdUtpZG53R0xodW9aM01sL0k5NlZtZmdQTDVYYXlGb1dieHBLRHZqeDh3Q0hmQk12N2Q2SGRCdkxiZHhjYlB0ZjJWa2dkcTlOVjlrQVBPMTN3citGYVJwaDJibTZuV3pma1BqMGxydnJnSHptNVJaeUZqZ2FSMzdOeVZSbFBoNnVKbGk2RzBmM05wYVV0WkI4M1RpZFJHZTNxUGRoRThDZWM5MkNqRjl4U1JZQ0JuYUlDbzJQdjhKOVc5T0VUQi92cDQxRVRpUGl5Ty94MHdCZ2dQRlBoZkxVUGJKRmd0MHdMWTJMbWJVT090Z2pCa3pzaXpUV0Flb1o3NDREVjd0UmYvN3JKS3pLbHc0eFFyMVNKbUx6aHVxcDJNbFRNUFA3bUxIL3p5TzY3emU0NTlqQWZHUmNreWxaZTl0WFZ5R0ZqZEVaQnMwVDRQN1pVT0RrdWlMblZOYkgwU0I4MkVOb3VaaDkxMkgrL2dvWUw2MW5qVVJPSTlpcGdEcDJzdDlMcTZyTDE4TC9oVXV2RWNSMkRiWnFUNnhmMnI3dmNoeFU4L245TDV6L1NQVU00NmRLZ2w2YmhySzNoeGlNelhVNDMyaDN4dXV3KzZ2RlJCd1ZFZExKaTE3LytlZnJXMW96VEpvbnRJTC94bnFmVmZNdXE5U3N1LzBJQXFjOTF6SzV0QkVPdmJvaTNlWTcxVFBiaHNhZ0szU3RVK1VjcEZpSDJXQkR1aHoveGZidVM3ZUV4YzM1UDRudmY0SmVGMDlqZ3V4bjVRRVBYN0dsNkhzTko4blFacFNxR3QrM3RqM05uZW1DZkVWVmVGcGJYQVhOMmxjeHovSEFvdlEvb1p2OWlNdHUvNjRWdGtGemRPSjE5OGIvQkhmZ2gzeCszUU1BdWY5SFR6RlUxYkxQUVpRKzlZek8vRjJyMmV4M2Z2WXdMZU9HNC8rbEk2MjJMYTM1UHQyYk1BSzdOai8vUnk2MlNUMElXNGNkT29jWGwyUDQ1ai9Sa25RNDJlODlEVHQ3MnlraHNPbDlaVGpCbjlFL040eXRWSDNjeHVmcVhkNy9CTnJ1QytYajljUzVVdVdoT0dNeTVlaG1SaktkN0lKbWpkODRuWGxRU1U2NkdHODEzbjJjdkMwYUdqZy85YzdjTlN6dmV2WkxEUzNHUE01YlVpaXJHZWk5RFR0RnVpQVhkcTZwbDVWc291NGNkQ3BjM2k5YWJDUWlHYzhaMWR1SWJ5cS9qZk5XSlRhcE13Rjh6Myt5ZGMwSjJQem5QVmVQYzNXVjJuWkIxY2ZZMTFzOUlCdkZrSHpkTUlqUHR5bkRmK285enFCZ3gvR2VIK2tJdW5INENrTytQOEl6ZTJVbmFaZFArd3ZibVpvYWpIbVV1QzgyQW02Tk8xQTM4ZVpjWHcrRHQxbE52cVEzbld1dllMRDZ2QXl5T1pHLzUveFdjRy93cWtOWXJDL3F0N0U4ZWw1Q3ovcXhJWnphaFEzU2gzditkL3o4bGpnS3NqRW01c0hjNURCYXZTQWIrZEI4eFlENWw5VENraGU5ekE2UVZEMmdEL2V3ODhOMXpQdndEbDhBTlowU3U3TGxJcFdVTUF6MFphVElGTUpzSHQ3TnduZExVVEVCZEdsQlVzNHVBNTd2emw5ZjhaTFQ5UCtJUVVBZ2QyOTcrblBvcWZTWEdhZkxMNTNUdW1xcHdXYnlYUTcySEg1b3NtNVo2ZEI4N1dBK1hIRFA4cXVrM29lUnFsSXloNDR6YXN2djZ0bjJkZXpwbE55eHcxS1R0T1Y5MHlVdkFqOXdUdURnVDNHbXBQcWM5ZlJKY1E1eVo5cGt5R3d2MW1IOVJmYTBHUm1zRGJNM1VMWXk3VEZuM1ZoWXdzMXVHcjR2eC82ZkhVUlpPTE54VTNhME1pdzU1Nk5qTXM3QzVxbkZOR3hvVGx1NGNkNWozbDluVU5zakN5RUZDWUZ6QzhiL2pIdjFiTmFKMlpOTHNZSW5KYzVFQ2k1N1oyN2hjQ09ZODA0bHVnNktQRjdIRHZwSitHZytqdFZFbmpHczNWdVl4anNKcTFiSDdmOFk5VlBYdnZNN3B2SmQ2SGtEcXFuTXZIbWNSOHdMbS9rT2Vna2FKNGE4Yzh0RFQ2a2k2N2ZWQkVVTldpYWgrWUQ1amRlZjFCN296OXIrTWNJbkpmM1RKVGM5cDVhb0FQMmFQUGlPODRub2R2RmlFdjlKQnhVZnhkQm1uYjYvWXczblJtc2FUT25XV0VuWGN5L3A4YWVIQ0k5TjdNOS85bGRtbmV4M3poQUp0N3VmZkxza3VyalBEVHcrcVRXZytackFmTzJXS1N2LzJGY0ZENUpITktnS1RZY2wrcFprZldzamF3T0F1Zmx0YjBsTDBKYm9BUDJhZk51TXhoZnhIN3kxaXNtWVA4K1A4aE9ScjlOUTdtbnpPTGhGZWxNWVlzMGJ6M3ZxSDYrZFFjNFFKdzNuZXo1YndRZEQ1K3J4bjcwbTVMb3hFT3dhWUYvdG4rMWFqVm9YZzA2WXNmZlpzRDhZOVdJTFQwM2pUMk1VcEhrUGNpZmgzWUM1bC9zN2lxbjBYK0d3SGxaNHNDdzFFWG91QUF3ZHd1QlhhVmR3eDg3dm95VDFFOEtuTVB1ZFZlYWRqemplYnRJNjNQQTg3cmN1RGxUL0J6Z2tEN0pXbTY1N2NTZ3k5M3JZZmxoWEI3YnNsb1BtYlVXTkU4TFRmTVd5eXNHZE8yZWJlNWhYQ3JmZkZYMUxRNnlMMXY2Y1FiMHpkV3ptUHJ2cG9VZkpYQmV6alBSaC9jb1R0MUpZSTkyTDQ0enVzNXdkQndFem1IZnVydW92bnhSRXZSOHJsWnlCcjY1K1I5czFPV2M5YVNxbXhPM2dGMmxOWmFUQS83cFF1a1o2eGJtbTlmRHNzRXMxSGpBdDVXZ2VWcGdpZzNKY1lzRmRXWFhTZU9kUTN3WXBkM0xjN0Qwb2FVZjkwVTJoMVlhL1RiRXdMbUJSemtEODVMVHRGOVpvQVAyTk0xZ3pDbHdEdnVUbll3aDlFL1N0RU9QcERXMTQ0NHZ3d2xXOWpGVEJNYTZBeXB2K0ljVUI2NnRMV3c4YUo3ZUE3Tm9lY0RobEhtN2swVHlHdHkzK1FvRUE3UG1HLzNZZnQ2MDlPTXVVbHAveXBnVWxmcitKR25hZ1VNbVFEbU1PUVhPWWYrNmEzR0x2ai9qSmFjNXYzU2lGZjRoaHpIblJWcFBoNjFTRzM3SUtmUFZlaU92SHdmTWxFUXJ2bmhtZWFFK3huaHdMWWN0R2cyYXA1TmtNV1ZWMnp2MG5ESnY3MkdNamRWWEpaSEZRQ2t1NExhNVdjUXA4L2JNVy94Wmx5bTlQL2tQektjRi93cmVvd2djTXViTUljdUd3RG5zVjNmak9QWkdTYUIveW5ldUtRc1VQRW1CNnZOTUxzZW1NM1l4VlFTZGp3UGlXdnczSmRHNG1TS2dyVGF4NlpQbU1XQisybkxCT0dWdUlEZkVnWDJjNU1iSmVxdXZRRkR5clEzQTVxSGR0TFFmdkhlNmlPZml0dnJ5c2VCZlFacDJZTjkyTDQ0NWMxaVFFRGdIODBWWU53dmx2cnJ1UkIyRkxQdXJxZmt5MjZUbjQxSkphRHNHNEtPRGUreWlyb3k5alFYTnE0WTdCdFM2MkowM2Q4cTg5WWN4TmxvZmxVU25nNlRZSUxRWk1MOUpBVHZhMC9ZbWhTdkJnQ0xhMzFrb2QwZHJYS0NidVl2QW5uSlprRmdGenNkdUNidzRYb256aGk5S2doNC80NlZuZ2ZwZzdnZC95YWtleDdHbTdHeHM0L25JWnh5d01OWnRqQU95dE42WE54STBUeWNVMzNWVUtDcFJkK1YrcHhnNksvdTJNenJNRlh2cjJpN3pPRUc3dHJQWnhMNWg3N3hIRWRoSFptbHc5Wld3dTdqaDVVRXhvSDh5MzRRY3BiWHM0OHd1YStiT3NJV2d1Ykh1SU1yVkFWbjJISk12d3lzM3NkUWVOTy9ndmNycnZrclYwTm5EZUIra0l1bGlVQi9Mdk8xVVBBOHBYVGp0MTdHMmR5M0drOERYU2ovN1o2UDROTzN1SXJDbldjaG5RZUpVWHdrN2oyWDErUXloZnlyMU1NSHBhRFNhdVlVTTJEVERhenF4eVp6bnBFMjdGMG9pdTdHdWZyUmVkMklRSE9oVm0xaHFEWnFuQmpzdUduVzFNMDhsNnJaemlQZitSa20wTmtDS0cxUis3K0JIV3hqdVRoZGxmMjd4cElqMk45NmpVdE8wVzZBRDltM3pjbHVRT0UrdnBnSmVIcS9JVGtiZis2ZHB3Yi9DZTY4ZFlZalNjMytlYTcxMGgzakdwS2Jubm5ySEFUTHhhdi9JWjB4KzhCcE4zU2ZONStIcFpHSVhIbExRbG01TkZVRXJBL3JWQnBVdVdCVHVyc0cvN21qdzljSHU1bUxhMzFKVFFYbVBJckJ2bjVqYmdzUzdsTllUMk03aUYzM3ZueGFoM0RUdDhRRE0zRjFFMzVTVkM4Rk5ubEZIYW5iUFZUUE1DZXR4STliSEs4VTFvNFBXeVdzTG1xZEZvaTdUZ2hqWTV6RkJYSWF5MHdTWElqN3ZYV3hRdVV1cG9PbE9Wd01HNzJ6TnYvMk5kWE5XK0dBR1lCKzVMWEJlMlFBRUw0NVhaQ2RqQ005NTdKOUt6UUoxYmhNWUE1VDdNMi9ER1QrYTFQQTl6RnVhR1FNc3FpOWZsY1NyelJRQnI2eUxCNzlPdXBhZ2VkcngxdlZpOTl5amtJMkRkM0d3VTMyTGcvbXVOcWpZNGRXOXJ0bzZwdzdLR0JERTlyZlVoZWk0UUdjeEFOaW56Y3N0K0thdmhOM01GQUVETUMzNDJxOXNtR1lvMGhyYmNlYVhPVlVuV1h0bXg2R2VnMVJqcGRtWVY3MVBtYjlPbVM4VUE2OVZQVWZ6Y0VDR3dycE9tczg3SG1BNC9aclh3M2p3TGc1MkdoaDF1VUZsN2k1MFhyOXVRM2ZwYUM4RU5Zc3dMWGh3UHBONkR0aTMzY2pzZWs2OTN4eGVITTh1Z3RQbURHUGVWbW9XUHB2QUdOcjh1WVE2K2RhdElxbnJoUGhFVVRZMkJsZ0cyUlQ3M2k1VGp0bSsvK0RWUWZNVVFEbnYrQmQzK2pXL3ppRk9zQ3lFMUc4ZXV0dWdZbk5LUHJwczh3UTF5eGljendxOS9HTVRDMkRQTm0rUjRaZ3p2dDk4NHU3QVZsTkZ3QUQ2cURnbUx6Vk5lOXd3TFVoSHI2VzFqZk5DTG5mbWpwSFVOYzg0bGNHZzhUSEFuWkxZMjVlMHJnbDExY1g1dm5YeFZVSHpOTGpJb2RPZXUvMVpjaUsxM3NGODF4dFViRTdKeDZMRG4rM1VRUmtEZ3BMVHRGdWdBL293RjVoYmhJS3RZNVZsOWVXTGttQUFwZ1ZmdXpUdDlGMUo2NVluTm1XUzFQa3VjbXN2eGdDNW1Ta0N1cTZMcnoxcFBnL2R2L2Zsd2VuWFBLWDc4a2xKdkY2YXFIYmRhU3pjaVd6cVZ0ekEwR1g2N1hOQnpXSUdCS1dtYVJkc0F2YnBGK09jSkxkZC9DY20vUEFpZFlRaDlGRWxwMm5YbHpHRU9YTkpIRTRpRWpRdlp3eXdxTDU4VlJJN2M4cWNKdXZpem9mTERnNmFqMGFqT0xESUlZV04wNjk1aXhPc0I4WHdhdlBROFFhVkZLZ2xINHV1bjBsQnpld0hCTXNnVFRzd3JERm5ibUthOWpPM0JyYU9WWncyWndqUGV1eWpTazNUN3BVajlGSmExejR1N0xJdnZDNXY4TS90bTVxZlc4OVU4K0ptRjdHUmN1ZjBEUEQ1T2lob25ocm9YQmF6Ris1MzFwUEQrMkFuNUdzSFJIR0NldEh4WlhnL2ZYNjZidnVPRFdhS2FJTmpYMTNxcnRaTEMzVEFIcnJPd3JMSjNLMkJyWXduR1lxM29lQXNVRzRmUFRRdDlMcXRzUTdibVdlcUxHbVRxRU1oTDNQS25LYnI0aUxzR09NNjlLUjViRXh6MlkzbjlHditEMlNjWUgxVEVrVlBVQmR1UTNaeXVDZE8wSld6R0NCTk85RDM4ZVo5cHZPQzAzU1NDWGkrN2k2RDArWU01MW1mRlhyNThWM0tNM2VSdmtnbmE4OEx2ZnlwT2ZLZ2pUMVRSWTRCWWg5NnB5UTJlZ2cyMHRLT25aNnp2WVBtYVdEeElaTmY4bHRhSUNOL2RxMGROcENQNVhhU3dhVXMzSTNzQmx5M0lZOUFxTjJTK1Q4cnNaK2NGbnI1M3FNSTlLRlB1cklRQlZ2cDZ4bkt1RHoyVTZWbWNmdGd3elE5c21tTk1xNng1QjdZaW9mWXZJZDZ1TVlOUFZQR1lzMmJLb0xOODJXbnpHbHBMTDdZWlN4K3lFbnpuQmFqRm01MVVRK2tFd1I3U0l1cnM0enVIL25KNGI2Y1Y4K3FDVnYrYlhBOGZWbHFtbllaRFlCZDI3cTRvU3pIN0VaeEljb0dVdGhjZDVmbWlneklOSlNiQmNxR2FmcFVENThUNTgyekFxNS81aFlPVmxNYmNhMjdORC9lWFlSeTErV2E5R0I4UVc1OTZGNUI4MHplcmJ4dTRSNFg1WDNCazhPdXlpdUgxeUI0bjNtK2Nta0REVzdLV1Jqd0hrV2c3M0p0TDk0N2JRN0drMUI0bXZiemxBMFBpcFZlbTNPOHBTKzZMbURlZkpMVzZCbWVKZ1BiYzhYYi9Kd3dpSTM4bzkyVlNacVd4K0tMOEVLOGE5K1Q1cmtON0JkdWMxRVA1SDJ3RzNMWFFmdzQ1UE1hQlBVc1g3Y1pUZGltYmtjUmJYQ3A5K25VZXhTQkhjMHp2YTY0T0Nzb1NHNXpqbG4xV2FSUHA2ZUxVcVlJbTNVWnlyaTg1RFR0czdSZUFhWGFOQ2VPcndDOVRmUG1lUUcvaHcwczFNMjZTL1A5LzlLYzhCK1VCNTJNWjdmOTVjNUI4N1NEN1R5alg4ejd6TXVkSEg1VEVxK3J1QzI3ZFR1eXJVOEx6eXg3UGpNbHAybC9iNEVPMktHZHU4KzRuYnZVanBHTHRVMjY1K21UUXlZRTQwbUdaQnJLUEcwV040SE4zVDRLN3ZzMnJXMWZiZmpmdWJvd3JxUUJIN3lDc2ZINWFoenYzaW1KdjN3UjM2T2plcmdJV3phdzduUFNQTGNKckVCZXVleUdmSGtRZjZtdXNhTmNUaWc0YlY2T2VKOHMwQUY5ZHAxNUd3em1aTTlJaXhjV0VSbUVkTnFzMUxXUmMwRVZldGozWGY5UVA3OFcvdnZRVDIwY2FKeDd2N2s1WVV0bWlvQWNuNytkZ3VZWm5qS1BCUExLblJ3dVFya25IWWZXWVR5a3lRTDV1dlhzc21jYkhIZHhscnJJNVQyS3dDNXlEcHA3dHptZFM4L2dOTk54eXJqNmpPTEhuV0lBNC9KNUtIZHRaSzQvbzBDYjVzSFBuWFlzNGJUNVZEMmtBZkhBd2tMZ3ZOSCtmeEhFUnI2SU9aQkJQWHoyTU9LdUo4MW5HZjVlZ3VabGkwR1BCOFh3UGFmTUtmd2VPVzFlMXNEZ1U2R1hQN013QUx6UXh0MkhmTjhWZXh5Y0NpS1B1ZGl4WW9Bc3hQbVRMRkRRc0pRZDRXVERYODgzekpudkNxaUhzajdRMUxNbGNONzhlSHpJc1pHWlI0QmNuOE1YZytZdnZPK2xNNW05eTVmOTc5OHlsTEZyczRzT015ZnFXZjZXQmoyODRsNlZtQUxWQWgyd0N5bmE0Zm41L1p0ZzR3WmtJMjMwS3JWZnVFaVpLYUVFbStyWjNaWTE1aExXTFdkdUxRMFJPRysyLzErRzRjWkduRElubDNvWSsvOS9ITGpZNWFSNWpwM3ZON2UwRnc5bGZMYThzeTdKTkUyaURxeU14ajBuVHB1WDgreVV2a0JuUnoyd1RjNUI4eE50R0IxeXloenlHNWZIUGt1YWRtaElPaEIyc2VHdnR3V3Q1aUgvazZBbk5xL1FvRlhnM055bEdiSDlHV0pzWk9iV2s5Tlk5c2MvT0hwaFVCRUh2amsyaWxKRzk4ZFVFWHhYRnNmcUdnZTRVNjg1Uk9GcDJpM1FBZHZhdDJYSWV3SENTVjlhNTVRNVpMOGVVR0thMXBqdWV1YjJVVUQ5MmppdjNES2VqQnZOcnd2NC9mVHROQ211VmY5UmpTTzE5ZlhQV2U4SFdIK2RNaWUzZWhqSEFkK3RIYjEwMG53YTh0eUZybUwxNTZGY2hISjNWUGQra0Z2ZEgwSHpNdVRXSnA1TDMxU1VXU2czVGJ0Skc3RE5JdU5yTzArbm5xRHQrWVpUNXBDaHdyTkF2VFAvSTNPYjZ0YVhWUGRlbWkvbjdzSzRjakM2WEx2NVVEMW5DODlhN2YxLzNKaHpNNkJmZWU2dWs2SHYrdnFYZ3VhNTduUlp1SSs5RXAremh5RVhRRXB6YzJJZ1JvL2FSRHVkeXhtZ2w3NUFOM0VYZ1ExeVB4azBkWXRvY2I3aGxEbmtQeTZQL2RhWFFpOS83ZzZTYWYrM2JiMXR2a085WElZeUFscjYrR0ZZZHZ6eno2dlByWFR0dFl2bCtVdjY5TmxOaHE4WmhYK2NOai9hTXFpWWhQeUNlTGwwRU5UN1VNYjdlVFh3WXBpcVovVHNYcjJWT3J1b2RqZ09XajhXZXZsemR4RFlJUGNKK2RRdG9rVk9tVU01ZGJYRURleW5VdmRTMkhqcmJvL2dUUWxybGxOck1MUmtsYTdkcWZPYXhNTXNzVDBhUUVEWk9JR2MvYSt2UHpwZ1VKRkRRN0owRDN2NVVBN3laSE1hMUY1a2VHa0xqMlV4Y213VDR5RGF6dE95QnVseDhQcXR3RXMvc1VBSGJHalg3ak52MTA2a3M2WEYrWVlUYUZCTzN6VXQ5UEkvQ0tDUVdmOFhuOGRONjIzelBlcGx6QUtSKzVxbE5aaGhXR1owTGZIVStYL2plb3dORzJ3UjI5cS9UdEU3WlU0cHorcTJvSG11SGUwMzk2KzNFOE9oTHVSTVBRRzhVcTd2bnJjNHF6MXF5d2VCSjJDRDNDZm14b0cwSVc1UWRzb2NDcEVXbFQ4VmV2bHpkNUJDeGxuN1Bxc2xuRGFmdWVXOXQ4endtajdFNnhxTlJ0WUFlVzVNc3h6SUtYcktmMWIvbC9IaDJhQjUxY2hOTTU1VTM3dUZ2WDB3VisvdnVnbGx2QytvalVGOGwzUm1CVFhxbVY3YXFaTUd4VDFMY1FPR05PMUFuOXhtZm4xT0JOR29OQmE3VkJKUW5Ga29NeHZmdWNBSkdabHUrUE92QjJReGpmUE5oOHgvMzVQMHVsWDZhNW5wZGNVNDB1L1Y4N2RNY1NXQVltMDZhWjd6NHMzQ2JldXZhdEE2clQ2VCtCbkM3NXNXc1U0enZUd2JWTXFTYXhZT3dZRHkydUZaS0RPcnk2a0ZPcURBdVlNVTdUUnRwZ2lneURGNXlXbmFaelpQMDdYcUdZeHJFU2NiL25wK1lKMjhMdUJYTnlmdXQyWHVjNXZxODdtcWYvZlN0Z09sT25wbVVKSHIrNVZYQlBMb2syd0hzK25FS2VYSXRXMmN1alZGS3ZXK1dhQURmaHpQTEVQK3A0SW03aFJOU0tmTm5ES0hjdnV3UlNnelRYczhjWGpsRHBMcG5QWXVaYm84YUw1WndPOTlZVTdjKzM2aGxINWdsYlo5N3BrRVN2TGNTZk5KNXRjc2tFZWZUQlFCUFc4YnBXZ3ZjeUpXYXByMk9ER2J1NE5BWWZPSHFWdEVRMmFLQUhwUmowdE0wMzZSVHZwQzY5SWF4S1lEWVFmUEY5Tm16QkplSittMGViK1ZsQmt3cnRIRURaei9yZXJsUXVwMm9BVFBCYzBOYXFHOVFYeXVxZGx2M0tIaTVKeUZRNzlTb0lMVHRKOWJvQU4rc01qOCtrNmxMcVNCdVVic0M4K1ZCQlEvSnI4dmVENDExNy9Sa2VtMjUvSzF6M1VKdjcrNjEydWxIaWlNNDlKVjZ2YTVWMVFCdVNvdWFGNVFHaEo0aWFBT2RWb1dPbUVsLzNicW9jRHJ0a0FIbE5KSHJremNKbW9tTlRMMFJPRlpvR2J1SUIyWWJ2anpyK20wK0d2cTR6emtuLzNoT0ZoejdMTkY0ZGUvT24zK245Rm90RXp2UGgrN3JVQXV2Z3VhcHgwK3g0b0ZXcEh6QU5ackVNcXp6UGphbktBclZGcFFtQlU2Q1p1N2cwQkI0NXFKMjBSZDR1Smo5ZVZFU1VDdnh1V3hYcGVZQmVwZDFTYnA0Mml6RDN5N3BRK3NhNDVZd2x4ejVtbm9yVVdQZnBkWVYrTzd6MlA2OXR1WXZ0MzZJZEMxSDArYTU3NEw3WnRiUms4RzhYRUFrSE82eEh0M2laclo1VnlveDhmSGVGS3R4RmMyWEZpZ0ExSTdKbWpPa09ZWjQrQmRwdEJYMDBLdld4WW9jcWduRDlXWThMcW1uMUZDTnBjVDgrSGV6bTJXSWY5c0I0ZUlyekQ5WEgzK3IzcDJyNzEyRCtqS2owSHozRHRUZ1R6NndzQ1Z1Z2ZOQzg4OERab0dhZHFCc3VXKytmYlVMYUltY1NGZjlqam81NXl2MURUdDhTU2h6VHcwTG0wY3U5ZzBONnl4THNiMTZTOEZGSWw2MTEvWFBmLzlZajMrdy92UGdTNzhHRFEvei94NkJjM3BpMG5tMTdkd2l4allNOC8yUllGbEtETzkyMG1RbGc0b1pCN2hOQkExUFVNWFNnSjZQUzZQWTlzU3N6QitFUFNnQmRNdGYxZjM2ZkFTVHB0ZmVGZDBiODBIOG50Ni96blF1cU1mSnRpNTg1NWwrbUtpQ0JpWUV3UGJzaFdjcHQxN0ZJRm9ZWHhJbjZYTUtuTWxBWU13TGZTNnRWRjBWVGR1MGtid091Zkh0NFhNajZjZWkvNUp6OS9kd0g1dDd6OEhXckYrMG55aU9LQjVxVU9YZ3BNbTVENWgwOCtVTDA2NFMwelRmdVhXd2VDVmtMSEtDVHhlSTZaZ1BWRU0wSDhwV1BKYmdaZCtPaHFOcEl1bUVlbjl4NXY2d1hsRFAzWmVRTkdvYy8wMUgvRHY3djNuUUdQV2crWWxMTkpJejA0ZlRBcVloQy9jSm9iNDdQTmkyN0FNWmU1VWp3dDBNM2NRQnEyRWpGV0M1aHdrcFR6K29DUmdVT1B5VXJOQVNhMUxVemJOVXgrcStqSnZxQjdHNzV2N2FkL2plQ0xYNDlGTGMwWHdGKzgvQjJwVjJrbHo2ZG5wQTUwM25uMks5Zmo0ZUYxOStWcmdwWCt3UUFlRHRpemdHcDBTNWxCelJRQ0ROQTNsWllFNjFtWlJ0elRQdStpb2p5emhlWGJhdklmU29ZWXZTdUs3L3NYN3o0RlhPMW9iWEJ3ckRtakZSQkhRa053M0Zua3RRWDlNUTVscDJ1ZHVIUXhUM2UreGJFbzFMek5PWk45blptYU1CWVB1MjJZRlh2cTVrNjgwTUQvZHBPbFhkWlV3eHp3MXh1eXRtU0o0bHZlZkF3ZGJuVFFmS3dwb1RlNm5iZS9jb21KbC93b0xFN1YrZUh4OGpNL2F0TUJMUC9jZVJSaTBFamI3bUpleHo3aEtXbll3TGk4MVRmdVZBQVkxMmpRMy9kYjB4c21DVHZ0T1BTYTk3QU9XaGZZQmJmTCtjMkF2cTZENXBKRHJsWjZkb2hXUzFXSHBUdEVnS2RyN016a3JOVTI3RkYwd1hDWE1KYlJQN0RxdmlNR211WklBZ2pUdERMcy9qQUd3VGErNHVXcnBNa3A0bGkvTmczdmRCN0FiN3o4SFhyUUttaGZSUUtTVGJWQXlBMVNHem9DMGY1T3pFaGZvcnR3NlFEOUo0V0pmSmkwN1VIS2E5Z3NuL3FocFR2cWNPRSs5YnFrT0xxb3Yzd291SzhydkE3emJmRC9lZnc1c3RBcWFTNGtFN1pnb0FocFV3c1lpZzlCK1RjNUtUZE51Z1E2R3FZU1Q1dVpsdkNpOUMvaFNTUUJyNDNKcDJobGlmemdPVHlkSG4zUGQ4dUdyRWpabWUxVlpmOFY3KzZBWUR2TGorOC9mNjVkZzJGWkI4M05GQWEwWUt3SWFWRUl3UUgvVE15bE5lNG03bXVjbVFqQTRKV3d1YzlLY3JWSWFTUmxUZ09mRVRhR2xCVTFpc0dMbTFuR2c2WmEvYTdXdnJPYkY4d0xxMzNIYWVFZlBwQTBpMnRMWGkxbWNmZy9lZnc2RGRsVFFnckhkVXZUQnVJQnJ2SFdiYUpKQVpTL0ZYYzEzaFYzenNVa2xrR25iQk52R1VOZWVFK0E1QldlQmVsZTFieE4za0FOc2V0Ni9WZldoaTdVdHA4M3BzZzhvTmVOSXJsYnZQNWUrSFFZbW5qUXY1VFNEUUI1OVVFSjl1M2ViVUEvWWMzSm1nUTRvd2FLRWkwd25pV0hUTTN5aUdJQXQ0L0s0c2VacmdaY3Vnd2I3anBmZWJ1a1R1M3FlNWdVVTNhazVjSzlOZzRPSGRWdFAzejVYZjZEL1l0QjhyQmlnTlU2RmdQZTE5dExqNCtPaSt2S3B3RXVYcGgzUVQ1Szl1RWdYbmxKR0FyeGtHc29MbXNSQTNzeXRZOC9uL0RueDJiL3VhRTY4REdXOHVtenE4ZW1uOUF5NnY4MjVyRDUvVnYzVlF2QWMra3ZRSEZyaTFCRDhqN3JRWDdOUVhwcjJ1R3RZaWpvQWNwNUh6TVBUSWgzQWl3ck9BdlhCdWdrNzlvdmo4SlE2K1RuWHFRNTBaVjVBRVY1S05kM3JQaUJ1R3Ztb0pCcDFIcDZDNTdmZWV3NzljNlFJb0RWT0RRRjluNXhab0FOeVZzb3JhQ1p1RlNzQzVzQ0I0M0pwMnVtemJYUE9lY2QxYjFGOStWWjRHVkorSHpBcnRBOG9UY3dDOVllVDU5QXZQd1dMTXRBV1FYTWFuNXhWZzdRU0xsVy8wLy9uTUtacGYxZllwYytETEFqUTkvYnB0cEIra2c3SDY1a3RlRTJEZ0Rud3VqWmtHY3A2VGR4NTFRNi9yL3Bzd1hOZWVyYWZjNWVDMWwyTHorL256TXN3Wmx1YmVaUjZYMDlpZmZCNm54YjZydkIwOHZ3bWxudEtrdzhVNmlkRkFLMFJqQUdHSWs2K1k0cXFrNEt1K2EvM0tLWWQyUUFNVTF4VS9GTXhBSDBRczBDbHRMR2x0V3V6NnJxdkJSMTRUbnFtTjgwemM5bHNjWjJ1SmVjTks4ZFZXY2JnM3R4VDFlcytZQklFenRzVWcrZi9UUWRKWmgyL0tnSTRrUFRzQUxSTjFvVUJUTTdDVTlDOE5PKzkydzBBZ0I2Tnl4ZlZsMCtGWFhZTU5NN2RQVGFZYnZtN2VTYjE3cjZRWi9pOXg2bjNmVUI4RmllaGpGY0c5RW5NdkxqMHZuTW9Vd3lhbnhkeXJiZHVGN1Jpb1Fob21CMnV3NWljeFg3N1kyR1hiWUVPeU1GRUVRQlFvMW4xdVN2c21zOEZHL2hSMnVCOHNlR3Z2MlIycXJPRVZ3eWNlZzl6L3dtY2R5YXVMOFgzblY5WEg0ZUhvQ0FsblRTWHpvTFNHWWdDUTV1Y3pRcWNtTVVGdXFtN0J3QkFUOGJrY1QydHhQSHRYS0NCSDJ4N2p1ZVoxYnRsOWVWcjRXVkt2L3FCU1JBNDcwTGM2T1BVT1JSRWVuWUF3Q1Q4ZTFjVzZBQUE2SXVDMDdSZnVYdnNNTGU4Uzg5NGR2UEtBc3IwMGl2S0J0TVByQUxuWDVSR0ovMVpQSFd1VDRNQy9LUUlBSUFHSjJhMzFjUWdwbW4vVU5pRVpoN0tmQzg3c04xTktPZjFWTFF2bnI3SjZmMmUwK3B6NmJZQU5abWw4ZTFKUWRjY0EzcnpUQU9pdENpbEVkLzA3R1laaUlyUGJYWGRkd1hVdVdscUgraTVWZWFSNnJsY2hyTFdhUHJpWFdyTEpwbTlUZ0pZSTJnT0FEUTlNWnVsVkZRbHZjLytJbDV6ZGUzWDdpREFZTnhuRnBpSmkrM3hxOEE1VU1lWS9ENjlodWpQd2k0OXBtay9FMkFZdk9tMlp5VGo2NTVWbjgrWmwrMzdJR2crdFA0Z3J0SGNwcnB6ckVSYUZkZkZZcnIyR0RpL1ZSeVFIK25aQVdoZDJsbkpzRXdMdkdacDJnSG8xT1BqWSt3L3BkRUU2bXBURnFHOE5PM3hsTzdNM1J1dU5DZmJ0SUhzYStZYkt1SW03SWZNaS9nNGJhaGhXUDFCZkRiUHdsTW1MbHF1YytGcGM2eDZCeGtTTkFjQTJwaVF4UjIwdnhWMjJSYm9BTWloRDUwR2dYT2d2allsbmlyOVZ0aGx4NVMyWis3ZVlFMjMvTjA4OC9wMm4vczFKdTg5Wm9Qc0Q1YlZaMUw5ejQ5S28zVXhjUDVaNEJ6eUkyZ09BTFExSVl2dm1pdHRGL003bVJFQXlLQVBuUVluZ1lENlRBdTg1cm5iTmxpYkFycDNoYnhPNjZxQWF6dzE3eDMwT0hOV2ZmblpXTE1UQXVlUUdVRnpBS0JOY1RMd1VOZzF6OTAyQURMd05wUjNPaFRJVU1vQ1Zkckp3aGpVbTdsN3c1SUN1U2NsejlQaWFkNVFSakJ5Nm9rYmRyK1FUcDNIRElFUFNxUlZBdWVRRVVGekFLRE5pZGd5bEpmeS9NUUNIUUFaOUtFeHhlczBXTWdFNm1sVDR2aTJ0STA0NzZ0eCtkamRHNVRwbHIrYkYvUjdsSERhL0ZMOUltVUlqTStCVndPMVMrQWNNaUZvRGtBWDdoWEI0Q2RocGFYOSt1QTlpZ0JrMElmRzA2RlRKUUhVcExUMkpMNERkdTYyRFVNMS8zcFRmYm5jOE5kZjA0YnNVdnJ2bUViK1RwdEFJYy9yZlhvMTBMK0NsTzF0K3V3MUNkQTlRWE1BdWhpQTN5cUZ3WXNUc05KT3lsMjViUUJrTUk2S0MrK2ZsQVJRMDd5c3REVHQ1NlBSNkwyN041ZzU0eWJ6QW4rZkV1YVQ2aGJyZmNReXBXei9KUWlldCtYYWdRM29scUE1QU5ESjVDdVVsNmJkQWgyVTc0MGlvQ2RpSCtyOTVrQWQ0L0lTMjVOWk9vVk12MjJhZTkybERXU2xtWWY4TjQ0ZlN4SE5NLzNFUXZDOHZUb1kyd3A5SEhSSDBCd0E2R3JpVldLYTlwbjN2RUhSVGd1NHhxWGJ4QTU5Nk9yOTVnQjFlQnZLeWdJbFRYdlBwUlRGSnh2K3VzU0ErYXJ2THVIYWJSUm4wek84Q3A3SHRPM2VlZDdzbkZVZkJ4MFJOSWYyZUljendEOVpvQVA0M2xJUnNJdEMweW9EZWJZbnNlK1pGWGJaRjZQUjZLMjcxMXZUTFg5WDhtdXpTcWhucDk2cnpFdDlSbnJuK2Y5TFk5RTdwZEpJSDJjREMzUWdCczFMV2FqMkxnZEtWOG83bktWL0FkcWNiSlY0VXU3Y0FoMEFtZlNqc3lCTk8xQlBlMUppRmlncGJIc28zZFBMRFg5OWt6WjVsRnJQbG9YVXM2a25rUjJlNS9zNEZxMCs0K3IvL3J2NmZGVXF0WkxwRURvUWcrWUNlY0E2RzFSb212Y2Y4ZU5FNjdyQXlaVUZPZ0J5TVZVRVFJM3RTV2xab0dadTI2RDZ0WGtQZnI4U1RzcGZDdGF4ajdpdVUzM2k0WUo0K3Z5MzRQUjVYWDNjWERGQXU2Um5Cd0J5TUEzbExkQmR1VzFBQTI0VkFmdVFwaDJvc1QxWmh2S0MwTytra3U2ZFRTbUpINnBuZE42RGVoWTNqWmNRVUp4NkZEbmcrWTZuejYvUzZmT2Z3OU83engrVXpNRmlwa04xRVZvVWcrYmVzd3p0V0NnQytJdCtoMmNuVmdWT3lpOHQwQUg2U1RMcFIyZkJpUjZnbnZha3lEVHQ3bHcvcFBuVnlRRHVjd2tic0wxUG1kZjJKN2ZwM2VmajZ2TnJrSG55VURPWkRxRTlKYVZuQitEbHlXVUo5RHRzbWxCSjB3N29KK0Z3VTBVQTFOaWVsSFF5OEtUcTUyZHVXKy83c2o1bCtwb1hjSTNIVHJoU2gzVDZmRjU5NG56c1g5WG5VN0RaYzY4K0x0akVBcTJSbmgzYXMxUUVBQytLay9LaUZ1aUM5eWdDTlhwOGZGd29CVjd4N0h4UkVrQU43Y2t5bExkQS8yRTBHcDI1ZStWS201RXZOL3oxVFhvdSsxTEg3Z3Zwc3dYcXFMMS9xVDd2VS9yMmY0ZnlEazUwVmhjZDJJQjJPR2tPN1U0NkFhOHFZSHRiR1JjUDNoWjIyZThzMEFHUWliaTQ3YjJSUUIzajhua29NQXVVTzFlMDZjRHViUWtuNTA5bGE2TEJmdWE2K3NUMW4vOVhmWDRMVHA5dmN4eHNZb0ZXbFBSTzg3SGJSUS9vL0FGZW5qZ3R3bE82cnBMTTNUbklYZ2s3ODcrNVRieXlENDN6K3lzbEFkUmtHc3JhaUJNRGZJSUs1ZHAwN3g3U0pvNis5ZG54SU50TkllMEFORHArclQ1WDZmVDV6K0VwQzROTm9NKzBrVTZiUS9OS09tbCs0bmJSQThzQ3JuSHNOdEh3WUhpaEZOakJMSlMxMGVqVWV4UWhleVZraExoM202aGhyRlZhSHdyazI1N0VmbWxhMmp5aUdwZVAzYjJ5cE5QTW05WityM3Y4cTg4THVNWkxkWW9XKzUzYjZoUDduZmpNL1Jwc0tsNFhUNXUvVlF6UXJKL2lBTGpxK0pRRXRDTnVVam5QL0JvTmhHbVNuYUxzT2xHSzQ1TTRVZnF6b011TzcxR2NleDBIOE1xeEl0U2h0RDRVeUhkY2ZsMk5jV09hOW90Q0xqa0dGZWJWWitMdUZkZHZiUndmOVRoRmVKdzdQcVRuTnZmN00vT1kwbUxmYzUvYThubmF0UEUrUFlmSEF5K2E5MEdtUTJqVVQrbHJUQVZ6cmppZ2xjRXdOS1dFRTNTQ0Fld3pTVnBVazZPWXB2MWRRWmNkSnk4VGR3K3lOQzdnR3AwMHA4NCsxRHdmcU1zMFBLMW5sQktzT0k4YmNQdVkwcnVQVXJyaHl5My95ZTlLcVhNeFVEZFRESFEwcmwybVp6Q21KMytiK3FTTGdSWkh6SEo0bGw3dkFEVGdLSDFkS2dwb2hRNk5KcjFSQitpaE9ERXZLY1hzdWZjb1FyYkdCVnpqd20yaVJ2b2pvQmFGcG1tLzh1N1hZa3dWUWZhT1V5WTQ2TG8vdXE0K01YRCtyK3J6V3hqbUs0blVSV2hRVVVIekhxZmlZVGdFREZFSFlMOEpVYW52VWJSQUJ4eGlxUWlvc1ErTjQ2NHZTZ0tvcVUyNUxxeE5XYVZwSjM4MmVibFBzRytmdEt3K1Y5Vm5YUDNmWDFML05KUlhRbnF2T1RSb0ZUUmZLQXBvcFVPUHdaL2NkOENkdVZNMFNOQ2NROXJPT0U3NVZOQWxXNkNEUEdXZnBqcWxIb1E2elJRQlVLTVlOQ3ZwVk4rRkF6aDVTL2ZuUkVrVTRWUjlJdE01MUtMNlRNTlRackZmcTgrM252L0tKekZGdXpzUHpaQ2VIZHFYZTlEdzJDMHExcmlBZ2F5Z09ZYytPKzhMbS9oY3BIZHRBZXpxUmhIUVFQOFo1L29mbFFSUVU1dFNZaGFvdVN4UVdac3FBdmNMNnVxanFzKzgrc1NBY2t6ZkhnOWY5UFgwdWZVbWFNaFBxNGwwTllDTURVanV3Ykt4VzBZUHhLRGhoV0pnZ0cya1lBQjFUTkQvVTlEMXhnVzZjVnBjQkRwVXlLa1lHOHRveWxWNE9oMXFjeXp3YXZGRVg5V3Z4a0RFdTBJdU9aNWluZ1dwcFhNY244WE5ESmRiMWc5bUF5dVNPRjc5a1BrMVhsYjNiU1k3RWdYMFZjdlU3cit2bnRscGVGcFBPdS9ScnpoeGw2RVpQNjM5NzBYSVA1QTNkc3ZvZ1VYdWcrQTRjUkhrb1FHQ0FieDIwbk5idFU4ZlEvNExDU3N4T0RFTEZ1Z0EvU1RkOXAvM1ZmOTVWVkQvQ2VRdmpuSGpLYmRTMG1xL3E5ckI2L1RhSi9JeDNmSjM4NkhkcitvWnZRMWxiSEtiQnE5L29heXg4RHlrUXcycGprMUQrWnRKejkxWmFNYlIydisyU0FQdGROUWxEUHE5RjZWTXVhZWNXN2hGMU5DR3hzbDVTV25hMzNudkcyU2hoSHBvUGthVFl0RDhRVEVBTlkzSlMwelRmdVhPWldmVDV1S0hGT1FhWXIyYUYzemZJUGM2dGt5di9odUhwM2VmMzVYOCsxaHJnbWFzQjgwWEJWeXZRQjU5SVUwMVRUak4vUG9XYmhFMW1SWjJ2ZDZqQ04zTHZRN0d4V0ZCY3hxVEZ1SUZqSUE2MjVVNHYvdFUwbnc1cHBWMjUvS1FnajJiTWhYTUIxdzBKZlRWeHluZE5SUTdMazd2UGgrSHArQjVxZXYwRTNjVDZuZjB3MkEzZHhhYzZZdUZJbUJndmtuNVQ0MFRuQmhZK2xqUUpjZkZJTHZ4b1Z1NWI3NDFOcVFOVHBzRGRadUZzazdxZlVqcGVlbmU5SVgrYXFoejNXWDE1V3NCbDJwK1MxL3FYQXllVDZyLytVc29MM2l1UDRNR0hQM3cvNTEraFhZc01yKytpVnRVbGdKT3NTN2NKV3FlMk14Q1dXbmE0d0tkakRuUW5iRitFbjJuMCtaQUkrM0syOEl1ZSs3T2RTdXRYMXh1K091YkZEZ2VzaEw2NmxPcG9lbFpmN1pJd2ZOL2gzSTJnMWxqZ2diOEdEUmZaSDY5NTI0WmZlbUlnMU1lREd1Z3RIQ0xhTUMwc0xaMDdwWkJaMDcway9BWHA4MkJXaFdZQmVwOE5CbzVKZHY5UE02Y2FYT2RpdVBDdThMdkk1UmEvNjVUMnZiZkNoZ3puN3BqVUw4ZmcrYlhpZ1JhczhqNDJzWnVEM1VQT3BVQ0RUeFhjWUZ1VnRBbG4xcWdnL1lWY0FyRys4eHBzKzkwMmh4b29tMkpZL0tTc2tERjZ4MjdjNTE1djJWTU5GYzgvM3RHYzNmcGRRZjB1Ris3U3YzRWw4em51dW9nMU96b2g4WWdMdFk4Wk40UVNEdEJYK1FjUk5UaGxpZm50dkdyMjBQREU1bVNYaTh6QzFKb2dUNnluREVoL2VTME9kQ0VhVUhYZWh4c0lPcEUyc3k0S1FQUVhBbDlOejU4VU8raE8zR3phZldKejNoODMzbXUyUi9HN2hUVTYyaERwNXl6TjI0YlBSb0FxMmNNNFo0SkJ0REdSTDJVeGYvajlBSGFNODc4K2hadUVXMXkyaHhvcUcwcExVMjdNWGwzYzdkTjVvcm51NzY2aFBLUVNhMW1vOUhvcXZvczBtZXNSTEtvajNHK0ZqZGlmMUVhMEg4bEJzMmR6aHJPSU9GNk5Vam84UUE0MS9SbDNvbFNucHdIMG9MbU5OMmVMa05aYWRvQjh3ZjlKRjJiRnpRdlBLcytzL1FadTNXUTliZzhqc20vS1FrMnRPZHhzLy9saHIvKzVuVTEvMURDQnJmajZyNU8zYXJhbmFlUFRZNzU5RytyVStlL2hyd09iVXpjSGFqWGMwSHpSZWJYN0FUc01BYlNzUk82V0JzazlOWGMzYVltNDB5djZ5WnRFSUdtSnpDbHBXa0gycFB6V0ZJL1NWZjk1akk4blFpOVNaK2NuOE5aOWZtUVBtTjNEN0kzVlFRYzhHd0lEajdmVjVmd3VqdW56ZXUxUGlhN1NLODBJSjk2T1E5UGdXcXZPb0tlT25xbTR0OW4zaUhyS0hvdTdUeWREZVRYdmM3NFBxaHJaUmxuZWwxenQ0WVdUVTFjZ01MR00wNlowNWw0SXJUNlROTG5OdE02SE9lR0YrNFdGTlcyeFBia055WEJNellGVngrTWlUWXFZVFBCcVRYRXdUOERRK3pueGtGbUZlaWxvdzEvN2wzTGREMklQaGxJSjdzTVpld2FKWCs1MWhrVFg5cHVVKzF5QjlaSnpRNWxteW9DS0hKY0xnc1UzNG12MmdpYjF5MnVaZDdaV0pjVzFaYzcvZldnblVxQm4yWGRqRzNXSkFpY1ErOXNDNXJuZWxMTHU1YjdQWWlPbXlLR0Z2RElkYkYwNG9rc3B0Nk1NNzIwcnlhK2REQnhtUWVia1lBeXhqTmYwMllmWUxPcElvQ2k2NjhzVUt4c1crdHprbmE3V1FIWGVKbngybFF2bm9HMFprNUdNZ21jbjdrVFVLK2pMUlUrNTdUUk91SCtpZ1BsNDRIOXpybHVVakVZSzBldWJlTGNyYUVqMDJDQkRuaVM4eUtDVSthd2ZkNGY2NjlOODFDb3RERnNwaVJJd2I2M0cvNzZXNjZ2Q01sc3pGakMvSGJxVmpVbVptbVFWUy9Qdm00Vk9POHFJNFQxZTZqWjBaYS9tMmQ4M1dPM3JwZUQ2TGdvY2puUXpqWEhSVk03MWNxUjQ3MjZxNTV0d1FDNmJGZE4yTUhZTXM0WmNuMTlpWGQzd3Nzc0RrUDU0M0pwMm9saXdIelRBUm1uekhlYjM4NzEyOFpGRGhKbVhVZmZCb2Mzb0JlT3RsVDJSY2ozblNrVHQ2Nlhydnp1V1JFMEwwZU9nK2E1MjBMSGs1WVlqSkttSFlZdDV6bURkM2ZDeTk0cUF1aUZhUkJJR0xwTndWU2JDSGRYd3BycHNYZHZOMXUrUWZhT2JLV01HVGFPUUE4Y0Zkb2hDK2IxVERXb21sUmZ6Z2Zlc2VhMisvcllrMW1NSE52RXVkdENCdUtFM1FJZERGZk9BVGVucW1ENy9IQnFQZ0w5SUUzNzROdnpiYS9hc0lsd3YzcFV3cVp3UWNObVhhWTZSWjcxZE41QlBWMHFlYWpYUzBIemVhYlhQWGJyZW1ldUNQSXJnN1NaZ2Z6bE5tRCtraVowMFBXRVJacDJHTFpjeHpFMzN0MEpMOUovUTcvRzVkSzBEOWUySUtwTmhQc3BvYnhPQlhVOUI4YXdyUjdlV0NweXFOZlJDNFBhdU5qOEpjY08ySzNyajNTSzRHVG81WkIybytYMlNvU3hKelQ3K3ZNbTVIY0taKzdPa0ZIYktrMDdETE4vUEF2NW5sTFZUOEwyK2h2bklPZEtBbnJIKzE2SDE1Ni9DWnN6LzN5emlYRHZ1ZTBpNVBzcTFYVk9temZydktwYlhtR1RiejI5VndlZ2JFYzcvRGRaN2w1eUFyWlhBMmc3NVBLdGIzYUg1aSszZTNTVEpuS1FrMmtvWTNFQnFMZmU1K2d1YlpRRU5yUFFDRDBrQzlRZ3hjRGVwazJNeGtPSG1SVndqWmRwdlpmbVdFdlB1NytMN1pzMUtDalUwUTZWUE1kM0xVZUNlZjN3UG5oWDNZK1RoZ2YxaklMdjBjd3RJY01KaXdVNkdKNUpwdGVsbjRRdDBpSzdQaHY2T3k2WEJXcFl0bTJDbWl1ZWc4UTY5RkQ0dmVmMVRxb3hrekxPVzF2enZudEZEZlU2eXF5UzcwTXdyM0FwN1o0Ty92c0paT3pvY3RvdEtDMWkvbkpxQysrY01pZmo5alUrbTUrVUJBeG1qSm5qNjV3ZW5ES0hGMjA3bFFqMHd6UkkwejZFOGRqWmx2SFlsN1QreGY3ejJsaHU4MExxT1lmWjliVUZNeWY2czY2cnNaN2VaZlM4QURzNjJyR1NMMEorcDgwbmJsL3hac0dDeUhPdWNwcEFwb2tPK1RyTHJFNUQ3djJPRkZuUWY3bSs0MDhhUlhpWlRkWFFjN0pBYWMrRFUrWkRHRlBHazlEcStXRjIzVkFTMTlSbmlpdHIxNG9BeW5PMHgzK2JXeU44WWpkVnVkSTc2UytWeE1ZSlpFNERZRUh6dk9WeWt1NmIwM01VMHI2YXVFUC81VmpQNzRLZ09idzBSendMZVdhSkFPb2ZsMHZUM3UvMlBLN1hidHJFS0VQZDYrdlBzcEQ2WSs3ZHZIY3B5eFo1dW1xaFBkQ2VRczJPOXF5QVRwdFRsNWtpZUxGVHplVzB1YUI1dmhQUm5OcEFwNElvZ2pUdDBQdStjUnp5RExyTnBDRUY0MG5nTzlNZ1RYdGZiWHZWaGsyRTlTaWhITTlsci9Rc0RGbmE0UEt0d1IraEQ0VUdITzM1Mzg4eXUvNkpXMWllYXNBVUI4L2VsYjI5VTczUHFMNnBaL25LNWQ3YzJObElZV0w3S2swNzlGT09RYmM3MlZqZ3hUbGlQSlVvRXhrTVNGcjNlS3NrQmpjZU15YXFwLzRzQ3BuVDJoRFh2SXZNRHRYd3ZVV0QzOXY3ektFQmV3WE5Nenh0cmtNb2t4MXd1OVczcTB3R3dLZGVoWkN0WE5yQW1WdEJZZTJyTk8zUVh6a3V2bXR2NEdVVzFXR1k0L0pGa0FXcVYxNTQxY1lYbVhkcU5TdmdHaSt0S1hvV0JtN1I0UGNXTkljR0hCM3diNllaWGYrcDkzWVVOM2lPaXlFblNtSm51U3dlVGR5S0xPV1E1dXFMVSthVUtEMjNINVVFOUdxYytUYkRjYVpzTExDYnFTS0F3Wm9GV2FENnhDbno5bHlITXRJejJ4alh2SmdLMzFncVQwM09CUVhOb1FGN0I4M1R1eGkrWlBRN1ROekdNcVNkaFRNbHNWZDlpd1BnRy9XTVorcFRESmdmZDN3WkR5WS9GTjdHeGo3cG01S0EzcGk2SmloeVhCdnJpWTNWTU53eHVTeFEvV25QNDdyZnBxdy9kellTTmxKMzVzYm9KRE9uK3JPdHAwMXREQk0waHdZY0hmanZZcEFrbDUxczNuOVVqdmpjSEN1R0lnZVhFN2NoT3ptMGZWZFNxNkdOQlhLUXNrOWRaSFpaSDlPR1kwQmZER3doVFh0dnhIV0tUZXQrWHRYWWpCTEs5Y1FwNkhiS09UallrcXNtNW9RUFZkOHBhQTROT0Nob25vSWtzMHgraDRuYm1MKzBrUGxCU1J4VTMyTEgyblVLWWU4MXowL1hiZCszZEVvWFNtOWpiNE0wN2RBSHVTMFE2U2RodDNsaUhOT2VLd2tnU05QZTkvSFlYUEUwTXA5ZFZsKytGbkNwVTNlcm5UcG8vVFpMVFFTM0Y0b1ZtbkhvU2ZQWUtjZWRiRG1ralQ1Tzd5OGsvOGtQaDd2S1lQS29ubVVpRFlDN1hseTBlNVhla0tZZGV0RXZUak83cktrN0Erb0tzTmVZWEpyMnNzZGo4UlZ5cHh2Kytxc3NkWTBxNGJUNWVYcEdhTlp4a05VaFIwMjBmd3ZGQ3MwNGV1Vy96eVZvSXBpWDk4QjVVbjI1VkJMRlR4NG43a1EydXI0WG43eUxqQjZhS2dJb1ZtNnZBUG9vVlI3c05FOGNteWNDNjZScEwzNDh0c2xjOFRSZWIrNEtmMGFvejZVTkN0bHBJbWgrclZpaEdhOEttbWVVMGxUUVBHOHpSZENMeWFONmxvOHU3OFdkT2sxUDIxaHAycUZjMDR5dVJWcDIySjNGYytDNWNYbHNHMlNCS2tqSytyTnBuZUt1dXFlQ084MHJZZng1S1hWNGE1dzJ6MHZkRzZydjBxc1pnQWE4OXFSNUxpbE5wV2pQZCtBOERkNVJWL2NnK0U0OUc3d3U3OE5VV2pYNktvMXBicFFFRkRmV1BNbmtjaDZDVFlhd2E5M044YlVLUUQ2MEQyV0o0NTlOV1gvbWlxY1YxMmtzbWpzYjVsNVFVMmJIODVUNWxmN1dkNkFoUnpWOW54d0dzeGFvOGpSVEJMVU9uTHBPMDY2ZWRTeHRYT2dxQmUxSGFka1pnTmpHUGlnR0tLSlBmSlBaV0hOcXh6L3NMTGZYS2dBWmtRV3F5RFo5azduaWFhWE8zQmRTMWxOM3F6WHFubnNMSEtDV29Ia2F6UDdXOGUveVZvcVh2RlQzWXhieU9mblRwNEh3b3NQSm82QjU5N3E2QjlMTk1wUTJkaGxzK0lKU3ZNOW9yUGxKNmxIWXUvNENiQnVYeHpHNU5PMlpTKzlPUHQzdzExOXRLR3hWQ1NtNVQxS21LTm9wYStPdC9ybExzVGlnSVhXZE5JK0QyZGd4ZDVuU05PNVNGOURMWjlBY056RG9tSnVkUEhaUjM2Um83MTRYNVMvZExFTnJZN3NlMHdCbGpUVnYwdnRYZ2QzcTd6UTRaUTdzWnFvSXN1ZVVlVDd6MkdYMTVhdDZ6WnFaUTRhOW8xMkZoaDNWL1AxaVVLWExsS1k2M1l3NjVXQWhwR2xkMVRmMXJDTWRMakJLTjhzUVRZTTA3V0NzK2JLN1lHTVpIRkovQVY0a1RYdmVVakJ1MHpqb1RoYWVUcFJ3MnZ3OFpTaWdlWEcrWkhOdjl5WTFmcSs1NG9SbTFSbzBUKzlQbVhUNCsraDA4eGcwajZzdjc1UkU0NVBIKzlETkl1MkZYWXFkbVhid002V2JaYWh0N0RKWTFJZGN4NXBubVl3MS84ckVrc1prd0c3MU40NW52Y0lMMkdkY0hzZmswclRuS2E1SmJkckVPRmM4bmRTWFJYamExSms3Z2R6MmZFaHI5WlRQS3krZ0JYV2ZOTS9oL2VZNjNlNWRLWUpXQjhOZDFMZXAwbTlYR3VDZXQveGp2MGszeThEYldHbmF3Vmh6bTRuM3ljSGVab29BT0VEWG1TMTVudFRzK3RwRFhUcVFNOGo1MDFDTjNVY294MUVUM3pRdE1uL1I2UTVQVmZhVDZzdUZrbWhQUi9WTklEV3Z5V2dUNHM3a2lXSUhhZG9oczdGbTdBL1BNN2lVWHdYTVllLzZHL3RVcDh5QnZja0NsV1diSGpQL25HNzRhNmNodTNWZHlCelcybUo3THRLYVBkMFkxL0E5dnFYRGMwRERqcHI2eGxVbGpoUGlydEluNlhTN1k4ZFRkODk4bS9YdHBCcHNlWDluZTVQUnVCRm8ydUtQbEc0Vy9oN1BMSVBzR3BCTGZ6Z09lU3lZeDRENTNCMkJ2YzBVQWZDS2Nia3NVSG5adHZicUZXL2QxcFc0bGxQQ1dOVTgyemhzS09wNG5iQ1lDN1RrcU9IdlB3bmRCTTdmTzIzZXZuUnk0RlJKZERZZ2p2V3R6ZmNXMlp6UzdrVGl1TTJmNS9RY2ZOZkd4a1dmcjBvQ09qZHZ1VDk4am9BNUhENVhkTW9jcUdOdUxBdFU5MjE2WEhQZGRKRGl3VmdwQ3lVRTJFN1MrSUIybkN2dlR0ckxjUTF6MkR2dEtyU24wYUI1Q3VSMU1hQ05EWkdBWHZzRDVwbVM2RTZxYjIyKzUrdGNhcC9XdE5tZS9ab0NoTUQzdWhqUEFIK1BOWE5JeXk1Z0RvY3pWd1JlVFpyMmJNUzFwMDFCSUdPbGZPcEtDUnUvcCs1V3UrTXhCdzFiTjZuaGU0aHpRWXVhUG1rZTBtbkYyRGkwdmREc3RIbkw1UjJjSE1oaFVOeDJmVE5aYlZqTHAzSStDUWJBeHZiMTNvUWVPdXNMWXpxNzN6dStEQUZ6S0dNOEMvUi9YQzVOZS9lMkJYQ2tFTTVIQ2ZmaVBJMzFhY2RKRUlCdDIrU1YvLzdHNFNabzExRWJQeVFGOHRwKy8zSGM4VGh6aTV1WE5pZm9jUE9aUU42MmVEK2NObTllVyszWWwrclpVWTloZS9zcVRUdDBNODdzZXBGQXdCektHTThDd3pFTnNrQjFOVGFMQWM1TnIyYThTU2VjeVdQK3VnanR2c2J4VU5haVdpNXZCdzFiTlRHT2hySWN0ZldEVWtmOWE4dS8zN3YwM2dpYUZYY3VIaXVHckFiRzh4YnJtODY3dWNsb1d4a2NZc0I4cXNSaEo3R3VXS0NEOWx5SDdrNm94cnIrYndGemVOVjRkaHFjTWdkcWxnS3pBbTNkMkZidXhrejVtUlZ3alplQ3VQL1FaRGFOdUlZdkkwUTc0K0N6VjQ2RHY2U1lHdENpb3paL1dNdUJQQU8yZGhyL2NSemNLSWtzSjVGdDFiZDQydnl0RXErOWJyMXBhWElqWUE3N3RhM1N0RU43ZldGY3pPbnFQZVl4WUQ2UkNnOWViYVlJZ0liRzVmTWdDMVRiWTdPNFRyRnAvZWZCUnNNc1hZY3lObjNiQk5PdVMybnhXekY5NVh4VXZZQU9ITFg5QXpzSW5Bdm9OY3VBT1A5SlpCdjF6UTdGK3MxQzh4a2NCTXpoc0xZMUxqeDhVaExRbkhRNjlWMUhQLzViOVJtblY5NEFyNnZIVHBrRFRZcnRqQ3hRN1lucnE1dldLZWFLSjh1NTYzMGg5MmJxYnJYT1dtN2V6L1VzMVYrZ1pVZGQvTkFPQXVkemFWN3FsOTVsZmE0a3NoOGd0MUhmVHFybllhYTBhNnRiY2JkbjA0RUNBWE40bmRqbTNTa0dhS1FmalAzVDU0NSsvSmZ3ZE1MY0FnVzhyaDdIK2JmRldLQlJza0MxYnR1cFIyMSt2a3E0TnlkcERrQjd6dFBhUHMzTmFRODlESFZUOVcvYVZPaklVVmMvT0FYeS9oM2EyUkVhRzZpNTIxMDdaVnJPUkRMZXE2WUQ1eCtrOWltbWJnbVl3K3ZiVlF0MDBJQ1VJYXFyZ1BsdnNYOFVNSWRhdkEvTlowMENXR1dCa3FhOStURmFYTzg1M2ZEWE4razk4K1JaUjVhRjFCSHo2L2JORlVGalpnZit1eGdya3pVWk9uVFU1UTlQQTl0SmFDZHdmbUhIV3EyRDVWaVdVdTJWTlVpT0E2R21ONm9ZYkwyK2JzMjJURVRySUdBTzliV3JpeUJOTzlUWkI1NTFOSmFJV1NOK3Rwc2ZhcXZMNCtBZGpFQzc0aHhYbXZibXkzaVR1ZUxKWGduajNIT0hjVm9YVC9nYnM5VS9Gbzd0NWFGeEU1dTRvV05IWFY5QWVsZmdKTFNUNHZSSzUxdEx3eS9WWHFGYTJLaHlLazM3cStwV2JKOCtOUGdqZmhVd2g5ck5nalR0VUVjZkdQdW4vNFQyVDZiR1V6ZG4zbDhPdGZlTlRwa0RyWkVGcWhXYnl2Y2hIZElnN3pxeUtHVGVLb0Rid2JqTmEyMGJHUXNmNGxOYXV3YzZkSlREUmFSRnFoZ3MrdGJ3ai9vclRidU9vSmFHM3lKSXVRUGwxVWFWcHVyYkIrL0UyVjlxbDVvY0dQMXFJZ3VOdEtrVzZPRDFmV0NzUTIyblpJOGJDR002OXJkMjhrT3Q5VG5PNnkrVkJOREJ1RHpPcDc4b2ljYkdhcHZXQVFWNHlqRXI0Qm92cmR1M0x0WnRteFhxYXk5aldSNXl5dnhiMVkrNUQ1Q0JvMXd1SkMxV1RWb1k0TWEweDNPMy9sVUQ1WGRLb3ZqSjVDcHdmdFBRajdnMnlOM2JQRFR6eW9NWUZQaFp3QndhYlZNWFFacDJPSFJzT1F2dEI4emorT2RNT25ab2hIb0ZkQ2tHSEdTQnF0OVV1OThMY1lQRFF5SDFtSFo5U0svWDRYVnoyMWlHc3dQK2FleTNKa29ROG5DVTA4WEV3SGxLSGZ4Ynd6OHF2dDk4N3ZidjNmREhlL05aU2ZSRHFtK3hRMjVpbzByY3BiZ1FPTis1YnNWSjVrVUQzenBtRTVCeUZ0b3hDODFueklFKzlYMXYwbmo4UTRzL2RuVzZmRko5bHU0Q05ESmZQRmNTUUZka2dXcWtiUjl2YWR1L1dXOG9ybjdNQzdoVWRiZ2JEa0M5WHF4ZisyYm5qWE5VMmM4Z0kwYzVYbFE2OWZGTGFIYjMyMldhMUxQYklEbVdsWUI1UHdmTjhkNysyc0MzbHRWaDk3clZSUGFHdUJsQ1VBRGFhMHN0ME1IdWZWOU0zN3dJN2Fad2p1OHVIenRkRG8zVjY3aklxbjRCT1l6TDR4aERGcWo2YkR2MXE5MHZUd24zN01TYWZTZmlPcTREVUllUGhXZmhzTTJqRTV1UElDOUh1VjVZR3VTT1EzUHBvNlBQT3VHZEd2MDRvQkl3Ny9la2NsNTkrVG5VbjhaTVZvZnRkV3ZhVU4yS3AraW1kaWxDNjIxcG5PaDhWQkx3WXQ4WHgvbW5MZjNJbUFIaUYrOHVoOGJOd3Y0bmF3Q2FiSk9rYWEvSGRNT2Z4NE5PM21kZTNweDFHWjQyazViNjNORXNnZlBENXJodncyRVoxSDRWTUlmOEhPVjhjV3ZwbzV0Y2dCWTQzOXpncjlKbWVvZjVNQWJPc1pNK2EyRHdmQ2x3L216OWl1MU8zUUh6dUNqd3MxTjAwR2xiT2d2U3RNT21jZVYxNnZ2YUNLekZoZHk0Q0hHV051TUN6ZFh2TTNOR0lMTXh1U3hROWJUdjB5M2p0bXNiRW90VndwclJlUnBmREZXWGRTc0d6cGNETC85OXg4SHpBLzdwcitrUUc1Q1pveEl1TWkxQU4zRUtkdVZ6U3FIQjN3MytPTFNmTnBNTUpwYnhKRmIxUDM4TDliNGVRZUQ4bnhQUHVnUG1jYk9EOTVkREhxYUtBUDdSN3kycnowVUxQeTZPWCtLRzI3RkZDR2lOdWdaa1I1cjJ4dWMxTnV1WFhUZEt5TVR3ZnNDM3FldTF2YmhaWnVHZzRZdnozTlZyeC9iZEZDNWdEaGs3S3VWQzEwN0JOalhnL1NDbzk3OEcvMjNxbkUrVnhtQUgwSEh5TXduMW5wYU1nZlByb2FmNHFYNy9PT2l2TTJBZWd3UC9sbllXc2h1elNOT09NZVZvTktrK2k5RE82ZkwxWVBsTW53aXQxZk9aZVNPUXNkaEdTZE4rV1BzK0RwdmZ6L3ZOaHYxZTFJM2NYVW9UM3FrNGYvdHNMWGRqRzNsSXdIeVZEVzJ1QkNGZlJ5VmRiRG9GR3dOT3Z6UTA2STJkOFcwYUdBNnhzVitsemZ4anh3WS9ua2Irb2hyMVU1d0F4WlNtb2Q3QVR6eGh0aGh3SFl1RG90OXIvSlkzNGVsMHVmZUlRWDV0YUZ5RWtLYWRvUzRnakZPZjkyZll2TmhhRjhGeTZLNnV4N25DQnlVQlpEd21qK09DdDByaUlOdE8rVHBsWHI3clVHK0d5UzZlUTE0dnhsZGVlazFuWE11OVRZZnNDSzhLbUU4RXpDRi9SeVZlZEVvalUzY3diK1YwaUIxQituMlhZYmUwbWF1VHJWZlZaeHFlTmpFSURQUjNramtMVDY5SCtLYU9IVnkvWXZBZzdzS3U2M1VIcTUySmNiQzE5SlJDdHFhS2dJR05KMWZCOHYrRzVsL3hJMWdPM1pzckFpQjNza0RWUHBlSll6QWI5OHV2Ri9lRjlPUG0xQTNPcGFybllKeGUwL2xTRzNsU2ZmNUlwODdIQTUvenhtZHlFZllMbU1jMTlZa01IVkNHbzFJdlBKMDZuMVgvODEvaDZiUmxuWTVUUjNEVjkvUWphWEV6TnZTN25pNWZOZkxYYS9kaWtVNGsxLzBlYkRLYVpOWjhqMWQxYkQ2QU9oWjN4ZGI1dW9PWTNjRjdXcUdRdGpPMW05RDNoWU5KaThIeWVCb2liaHg3STFnT25kYjdXWkNXSFNoblhCN2JMSWM5ZG0vanAySHpHdUcxOFZkdmxKQXg0TVI3dFdzWDF4WFBVcnU0M2tiR1EzRXZyZm11VHAzUGhwYXlQV1hvalhWbTMxZVB4YmlWZ0RrVTVLajBYeUNlc295bkxhdi8rZTlRZjhyMmQ5Vm4yY2ZPT1RYMDgvQzB1TGxyMnN3djJ4cjU5QjdzY1pDeXZjOFR6WGlQejJxOHg1ZWhwNmZPMXphay9CN3FlWTlybk9EL0VyTTdtS0JDY2UzbWpaS2dwMlBKOTlWbkdaN1NzRGNkTFArUytrRWJ4NkQ3K2k4dE8xQ2lxU0tvcGF5TXcvb3pWNDNqK0svcTdtRGNoTC9YRlpmUFBBK0w4TFN1LzlJemNaekdnY3VoYkdoWVM4ZiticzkvK2pGbENiV09Dd1U1NnNzdkVrOCt4MFcwOEpST3BNN1R6ckVqK0J5RFgvRVVUUThhK1RmcFZFRHNISGRkM0Z5bFkzOHhXSmN5QU1RT1U4cjJIZytxMSs1eEhZR2dWWXFmUHRXeEdDVGJaMFBLUy9YdnQzalNQdzFnZ2ZKTWcwd3M5R094SVBaeDA1aVdyL3EvL3hlZU5vYWROUGdqNDFneVptdjRmMmtjcWgrRUROcUJJQzB2VUNCcDJuZHU1OGRoODFyR25mRlk3NVJ3MnZ3OEJTMDV6UG9ySGhjdnRKUDNLVjM3djhQTGF4aXJtTWt5YmFidTNjbnp0VFhlLzRUOU1pekZzdnRsL1RRL1VJNmp2djFDcVRFYWgvcUQ1M0hBK0dlcGdiMjFkMHpHQmM0UFlmZVRyM0YzMlhnOUhmdU85MEhLOXY1UE9CY3B5OE92b1o0c0Q2czZOaTl4TVB6RGhwUjNOWHpMOVhlMVhubmlvT2oyTXJZTEprdVV1bEF3U2VuM0Zta2NHZFBSWFRUNEkrT1k0bFAxK1RsdEdMdXlNeCt5RXVlVUo0b0JLSFJjSHNma0RuaHM5MzdMMzFtYjZGK2RXSVQ2TTdlMi9WeXkyV3BkY2I3bmN4SGpBT093VzZiUk9DNk1tNm1YNlZXMzR4N01nVit6eHJ1S3BTdzhmbENtb3o3K1VtdnZPeCtIWm9QbjB3SWErR2xhNU56M0haTnh3QlJQbDc5OXpVS2xsTzJER0dEUFU1YUh1b0xuOFRuOVR3bDFMTld6c3dNM3BHenp2L2NMQ1JSQWI5cEthZG9wWVhFZ2JySjh1d3FTVjUvSDhKUjYvVU9vSjN2S3RuSG5LbEFlRnhqZWUrY2JaTmxHeERuMmhaSUFDamRWQkFlWHoxeng5TktzZ0d1OEhObzd0RjhwQm03LzlacDF4Uit5eWU2eWxoSFhRMk9BK2Irck5kM1M3dGtQd2ZKOTEzaHJpYVVBM1R2cTh5L1hRdkE4cGlDNXorMWtiRnJzbktjRy9uUFlmNUV6bHRYWnZxZkxkK3hrN2VqdGIzMnJPM2krWHNldU1xdGo0NVI2S0M3b3h4UTlkYjNIOVVzYTFENzdmaUdnZU5NZyt3cmQ5bCtUdGM4c2ZhN1hBdVJ4aytVZm9ma2dlVWhqd2pqbUZDaUhNdHFQYWZBZWM2QUgwbmpqTnlXeHNhM2ZGQ1Q2SWhEVVc5ZUZ6Rk9kTm45WlhJLzlKUVZ1bHpXMW1ZZGtHdjFyVFRjOG5UNlBjWk8zbWJkOVoydXhsRU1PUk1VTjRMWEZVb0NPMjRTcU1nOXhBRGdMemFTVWl4M0hJZzAyRm0wTkpsUGFrOWo1eEE3c05Udi9ZOEJ1MW5Td0xnWWIwejNZdVFPcXJtbWt1cXByYVJCL25lclpvcTNBY3RvWmViWld6MDVyL3AzaUNkUzVRSG5yeitnaU5COFVhdHRINzB6Sy9ybUxmZUR2K3J0bnl5YTJyMzk2U25wck5VNXV0UTlIZmFSM2ZwSHVVbnZqV2FXRitlQk5DaEtaeXpiTWV0L085L3hSS1F6bk9VeW5uZmZackJqWEZtZHR2TjR4cmZmR24zTklwczJ2YVQ1NDNmVjhNQjNPaXI5TFhPczlkTzA2bnNCMzhFbTd5b0gxSjlleDFrOEQ3QVRuMVpkNW1wakZodkd5eG05L2tyN2ZaYXA0OFFUTjdmcm50WUgwRkNDUG4zajlaK25yYTlOQjM2U09kZEhTUGJoS3U3ZXVhaTUvOHF4cmNmRHh2cVlKM2ZFUGRlenVoenAyLzlybk9BMmEzcVM2TlU3MTdMU0JJcm9MZndmTDdkYUc0YlNOVjJrTUlyMHRmYmNlSkw5MWlod0F5TXcwUEswakhDc0tvR0R4RU56N3R0WVc0M3B2ekZZV25vTE5zN0Jmd1BraWZYNWZXOU5kelJjWFRWNTNXdStkckgxZTAvYTNHa3NCMnZYVFVIL3gxS2d0MG9tdk9GQitIK28vZlg2YVBwZHJEZlNxWVEycFkxanYwTzdUbjQzVEoxcWRjSTNxM2tYYVdRT2ZPdkxwV3ZEOFZIWHNiVjJMQTZucnRPRmpWZC9xbXBTZXBNL0ZEM1VzaW9PdjVSN2ZxNjFkMm5GWDVWektIaGkwYVdxZkxORFJGdzloYmNFalBDMTZMQlVMQUpDck9GWkpwemwvVnhwQVpuWUpnTWQxL1U1ZWNaWFc5ZWZoNmJEVU5CeVdhZlM3TmQyMG5oc1BJQzdUbkhLNSt1dzZ0MXc3YkxpS3A2eitmMTFydm9MbE1BQS9EYjBBVWlNZmc3WlhOYVhsMk1YNUQxL2Ixa29hOWgzTFAzWXlaNGVrYktlOENXbDRDcHEvVHdPcXQ2SFprNVluRGRmamZYeExnOGxyUVFRZ2pqMVNPL2lIMHFBd3ErRDRNbjNpT081V3hoUUFvTkJ4K1ZYS2puZXVOSUNNYkF1RXgwTkM3M001alBORFZ0KzQ3dnVhdGQ3VkFjVHZ2c2NMQjZSaVBLZkplTUxxVmFFemE3b3dERDhwZ3U4YStkdndkMUN2clFCNlcyS25FanV4cXh3WE5xVnNIMXhkV3cybzNxUTYxblFBdmFzNkZ3ZFZjeWxwZ1dmYXdaaUI0MnVRcHAzOCtxN1ZRc0FpZmEzbDlTY0FBSm1hQm1uYWdmekY0TzFmQi84eVhkdVA4OFZGT3UyOWVsVm4zVEdWTmc5SWZVdmxmVzJUT0F6THFLcjBTdUdsUXZxN3NaK0VzaGEzVnp1aDVpVXRkS2FkYWQrbGJLK3VmK1JKN0gwOVd3K2dUd3Fkc0s1T2xDOEV5b3Q0NXFiaDcxZGg5TVZDWUt1NGRtKzUzdDROdWI5TDQ2MnBKNk5SUDc0YTZLOC9zd2lBK2toQjVrNzVhRzg4cXpUd0hNYmd6bnFhOXB2cS9rM01aWnRYbGZQTUU3alRQVmRPQTNvTzA5cjRuMnQvbEUzVzJEMS9qOUlPSmNvVXFsMmxQY3Qwc0RLL1owUFEvT0NPSzM3T1FuN0J2WGhDYUpFYTkrc2VsUE5xOExMdzVBMjJuc1ZQcnFuU3ZxWDY5dGRIMEFFNG9LMkxrOGMvMXZvN204UUFBS0Q5Y1htYzE2L1dIcklPbWdPOWI0OVc3K1NPN3Z0d01DY0YwRmVIcFU0enVheDQ0SEFSL282bExEMTlnS0I1UFkzK09IVmtxeUI2L1A5dDdaNWFiOXlkYnFYUDlXeFZ2MVoxcmUwQlZ0eVFjcHMrc2I0NW1RZlUxYjdGVFc1L1piSVJOQWNBZ0U3RzVPdFpvQVROQVpwdGJ5Zmg3M1hldGc1THhjTlAvMXZiRlVjQm5tMmpCTTBiN1FCaXc3KytNMncxNEk1L3RtL0FiL1dPeWRWbkVaNVNHQ3lWTkFPdVkyZXBQazErcUdQamNOakdsWnYwZFZYUHZNY1ZhR3ZDR051Y1kwRnpBQURvYkZ5K3lnSWxhQTdRYnZzYjEzakg0ZS9EVW0vQ1lldTdxN1hkMWF2SjR0ZWxBRG13YzNza2FKNVZ4L0JtL2M4RTZxQzIralVPLzN6ZjE3MEJFNUJiTzZYdkJ3Q0FUc2ZsazJDOUFDRFg5bm1kQTRWQS9XMk5vRGtBQUFBQUFBQUFRM1drQ0FBQUFBQUFBQUFZS2tGekFBQUFBQUFBQUFaTDBCd0FBQUFBQUFDQXdSSTBCd0FBQUFBQUFHQ3dCTTBCQUFBQUFBQUFHQ3hCY3dBQUFBQUFBQUFHUzlBY0FBQUFBQUFBZ01FU05BY0FBQUFBQUFCZ3NBVE5BUUFBQUFBQUFCZ3NRWE1BQUFBQUFBQUFCa3ZRSEFBQTRQK3pkOGZYVVJ2dEhvQ2xjL0kvM0FxOHFRQlRBWnNLY0NyQVZJQ3BnS1dDUUFWZVZ4QlRBZXNLWWlxSVhjRTFGZmpxL1R6TDNjOWdzSzJSTkpLZTV4d2RReEpyUnpNallmS2JlUVVBQUFEQWJBbk5BUUFBQUFBQUFKZ3RvVGtBQUFBQUFBQUFzeVUwQndBQUFBQUFBR0MyaE9ZQUFBQUFBQUFBekpiUUhBQUFBQUFBQUlEWkVwb0RBQUFBQUFBQU1GdENjd0FBQUFBQUFBQm1TMmdPQUFBQUFBQUF3R3dKelFFQUFBQUFBQUNZTGFFNUFBQUFBQUFBQUxNbE5BY0FBQUFBQUFCZ3RvVG1BQUFBQUFBQUFNeVcwQndBQUFBQUFBQ0EyUkthQXdBQUFBQUFBREJiUW5NQUFBQUFBQUFBWmt0b0RnQUFBQUFBQU1Cc0NjMEJBQUFBQUFBQW1DMmhPUUFBQUFBQUFBQ3pKVFFIQUFBQUFBQUFZTGFFNWdBQUFBQUFBQURNbHRBY0FBQUFBQUFBZ05rU21nTUFBQUFBQUFBd1cwSnpBQUFBQUFBQUFHWkxhQTRBQUFBQUFBREFiQW5OQVFBQUFBQUFBSmd0b1RrQUFBQUFBQUFBc3lVMEJ3QUFBQUFBQUdDMmhPWUFBQUFBQUFBQXpKYlFIQUFBQUFBQUFJRFpFcG9EQUFBQUFBQUFNRnRDY3dBQUFBQUFBQUJtUzJnT0FBQUFBQUFBd0d3SnpRRUFBQUFBQUFDWUxhRTVBQUFBQUFBQUFMTWxOQWNBQUFBQUFBQmd0b1RtQUFBQUFBQUFBTXlXMEJ3QUFBQUFBQUNBMlJLYUF3QUFBQUFBQURCYlFuTUFBQUFBQUFBQVprdG9EZ0FBQUFBQUFNQnNDYzBCQUFBQUFBQUFtQzJoT1FBQUFBQUFBQUN6SlRRSEFBQUFBQUFBWUxhRTVnQUFBQUFBQUFETWx0QWNBQUFBQUFBQWdOa1NtZ01BQUFBQUFBQXdXNy9wQWdBQWdJZXA2M3EvK1JMSG9qbVc2UisvK01XM1hUYkh4YzZ4YVk3ejYrdnJLejM2NFA1ZnBQN2ZIay92MGYvaExIM2RwREdJL2ovWG4vVnlaejV2Ky9PWitRd0FBTUJzL203Yy9JVldMd0FBUUdrL3FOZjFwcnBmQ0pqVDErYllEUkN2MHU4dnFwbUhpODE0UkloNGtJNWxjenpKZVBvdjFVM2d1R242K05Uc3Y3UC9senY5djVkNTNwK21NVGlkUStpYkZoMXMrL0psNXROdjUvTzY1R2RHeTJmcysrYmFWZ08wT1JZMC9ET21OcmVjbzRzMFIrUCszOS81MS9kWjFORzFzNlkvbDU3T0FBQXdIWGFhQXdBQVd4RUUzdzZSdmdWcWRWMUh1TGlwYmdMR3VZU0xFU3dlVnZtRHhWM1AwdkVtOWZHNk9UNDAvWHN4OXdtWmRrQkgveDlVZVJjcTNKNzNyOUp4M0h6bVNYVVQrRzRtMkovUmwwZFZ0NEhqN255K1RQTjViVDVuc1o3Qjg3YUxoVEVBQUFDLzVKM21BQURBZlVXNEdPSHhjWFA4YjEzWHB5blVuSlRZMWR3Y3ErYTRhSDc3ZDlWdFlQNmpQbjdUSFAvR1R0Z3A5dTg5eCtDd09XS1g4dWZxSnN4KzB1UEh4K2Q5bmtyLzc4em5xM1R2OXJsRE40TFBkMmsrcjlQdVlSNDNqcXRxK04zVlhWelhJczJOcS9TOGZWVUp6QUVBZ0FFSXpRRUFnTWVLTVBuemxNTGQ1anBpRis1RmRSUDBEUjNjdkpoYS85NmovNWRwc1VMZjRlNnYrbjkvcFAyNTJwblBUd1p1VG9TaC82WUEvNm5INTRQR2NUK040WlN1YVpGSzVQOWI5Yjh3QmdBQTREdENjd0FBb0sxdHVIZzYxakJzSjZ6OXF5b3Z2Tm4yNzNxcVlXTUswS0xzZit3czN5dXcvLzlKQWZUWTV2TzdBdWR6dE9sOHJsVVVIbWs5c2ZzOTdxVi9xOGUvVXg0QUFDQTdvVGtBQUpCTDdEeS9HRk1ZbGtwWGY2aktER3R2ZTVYNjkyQktreWE5Wi91ODZyY00vbU84aTVMeEpaY1lIOUY4anJaOVRtM2w1Mk82cWlaU2xqMHRqb2w3L1oyUkJRQUFTaU0wQndBQWNvcGRyWjlURUZxMFZQSjRVOTI4UTN4TS9mdDM3RG9mKzBSSkFXOWN4M0UxbnRMTUVWNmVsN2h3WWFUeitVM3BDeEVLR05OM0U3cVc4MnFDNzJVSEFBQ21RV2dPQUFCMDRiams0RHkxYlZPTk44QjVsY0xHc1piRGY1cjYvOVVJbTc5ZHVIQlVVSDh1Unp5ZnR3c1I5aXR1VzAvaEluWVdkSGh2T1FBQVVDeWhPUUFBMEpVaWcvUFVwakh0YnI1TGhJMmJzWVdOT3dIYTJIZWMvbFhDanY4MG56K1BmRDQvU1hQNXNHSTdycXNKM0NOVnFpS3dxUVRtQUFCQTRZVG1BQUJBbDQ1TENuVjNBdk9wR0ZWd1BxSEFmT3ZWa01INXhPYnprNnJ3Q2hVOTN5ZFRlZS8zYVNVd0J3QUFSa0JvRGdBQWRPMjBoRExpRXd6TXQ3YTdkQmNsTnpMTmdYVTF2UUR0MVJCQjc0VG44L0ZZWHp1UTBYb0tGekdWM2ZJQUFNQThDTTBCQUlDdTdUWEhhc2dHVERoZzNJb2crclRVc0hIbkhlWlRETkJPcnErdjF6MzNaK3hFL2pEUnVmeTY2YytydVQ0c203SDlVRTJuTFB1N0NnQUFZQ1NFNWdBQVFCL2VETFVUT2dXTXh6UG80d2phVGd0dDJ5U0N3Qi80MGh4SFBjL243UUtFS1phOGZ0djNBb1NTTkdPN2pHZmxSQzVuNVk4OUFBQmdUSDdUQlFBQVFFOVd6WEhZNXdmdUJJeGR1MnlPODNSVTZXdnNsbDJtM3krYUk4TDdyb1BqRjFFUytmcjZlbFhLb0RmdGlWRDVWY2NmOHpYMStYYXNMOUlSZmI3ZGZiOU00N0NYY2N5WEEreUs3dU1kMGJmbjgyYW5ENnZVcC92cHlOV1cyTEUvMWQzejkzMVdyU2R5TFlzZTdua0FBSUNzaE9ZQUFEQk5menp5KzViVlRiQVlYL2N5dHluZS9YelVjOGk0cnJvTEdNL1MrVGZOTlYzYzhkOXNkbitUZ3JHRGRMenNxRjN2bXMrSk5tMkdub1FwUEZ0MWRQcXZxZi9YemJXZTM2Zi9kOW9VOC91d09WNjArT3lEdmdQenRBRGhSVWVuLzVMNjgvUys4em0xYVQvMTVVR0xaOFpaODVtSE0zOW1yenA0NWc3bG9NTm5ic3pCdU8vT001enZzeDhWQUFDQWIzKy9iZjVpcWhjQUFLQzBIOVRyZWxPMUNNZWFuL1ByREcxWVZEZEJUczRkZzIvNzJrM2E0WHZNVDZKZmZoSXNEdG0vVzVkTit4WmpuOGQzaU1ENktFY1o3eFpqOFB3blFYMVhmUmx0amMvTXZRamtMTTNuVFlZMlJsajYwR0Evd3ZybEFBc1Eyc3pOOXptck9hU3k3RjBIdU8vN3FrRFJYRS9NMDF4Vk5TN1RQWHFhZTQ0MDdXenpQOFJpb2NmU1R5c0FBREFkM21rT0FBRDhVSVRDYWZmbjc5Vk5zSmJEWVI5dFR6dTZjNGZ6RWU3OUVYM1NOakR2c0grMzlxSk0rNUR6SnkxYXlCMllmMnlPUmE3M1hqOXlERjczSFpnbmNjMDVBL05ZZlBCbkJIKzVxaEkwNXpsTlFlTHJkUDc3dEdHSUV2ZkZtRkpaOXAzcnlSV1lmNHpGUDNHL3ozbU9BQUFBL1JDYUF3QUFQNVdDeFdWMXM4TzZyV2NwVk9uYXFzb2JNRVo0czk5RnlmT2QvbjJiK2RSSFBmWDF6OFlnbDIzQTIwbDUvMXRqOExPdzkzMnV3UDRoMGs3a25Bc1FZZ0ZJek9mVGpwNFowVWVMNXZqMGl6RmRDa01uVlpZOUxET2RKeGFuSFBrVEdBQUE2SXZRSEFBQXVKZTBJL2RMaGxNdHUyeG5LbVA5SnVNcGV3bHZVdG42NTlYOWR1amVSeXdhK0RERVhFbTd6SE1GZ2R0dzliU25NVmplTWM5UCtpcHYvUU01UC9jazllZEZ4MzE1MVJ4UnJ2MzFIZi9KNFVBNzlvdVJGa084bWRobDdXYzR4OGNoRnFjQUFBRHpKalFIQUFBZTRpRERPZlk3YnVNcTQ3bGU5eG5lcEJCeFdlVUx6bDhOdE5zODF4aHNBL1B6QWNaZ3QxejdXVm8wMHJ2TXU4eFAwdXNGcm5yc3o3aC9iaThHZWQzSElvaVNUYTBzZThibis5Zk16M0FBQUlCN0Vab0RBQUQzbG5hbmZtcDVtczVDOHhSRXZjcDB1cmREN0hiY0NXMXo2YlhFY2NaZDVyMEg1anRqY0xYelNvTFlkWDR3NEcyWGEveSs5RDBYYnMzcC9kUUd1NGh2cktwcGxXWGZhcnRJeC92TEFRQ0FRUWpOQVFDQWgycTdRN1RMbmMrSG1jN3pLWlhxSGtRS0dWOFgxaWQ5Zjk1cTZQTGRhWGY1WU8vZFRxOGFlSm5oVkxFQTRXRElNREl0dUZsNlQvVmt5N0tYOHVjTEFBREFvd2pOQVFDQWg5cTAvUDR1US9NY2dkeGwxWC9RL0oyMEcvZFRobFB0MVhYZHkwN3BGUExtS0NWK051U2loVnZqTU9TdTExempkdFQxTzh4SDBKZEZtSEJaOXExRnkrOC9yd0FBQUFZZ05BY0FBQjRrUS9qMnJJdDIxWFVkNVo5emxEcytLaWpjaTBVQU9kNXYzbGQ1OFZ5ZmMraE95OVlQWjhxaEYyVlZUYk1zKzFhcmE3T3dBZ0FBR0lyUUhBQUFtSXJERE9lSWdMR1k4c0JwZ1VLT0hkZGpDczFQU3RnVlBiUzBhei9IQXBPVlIwTXhZN3FzcGwrVy9ZdVJCZ0FBeGtob0RnQUFUTVV5d3prK0ZIaGQwYWEydTgyZnBNQ3VNNm5zZEk3UzdDdFRPZHQ4amtVZ0cxMDV2QXhsMmMvU1VUbzd4UUVBZ0ZFU21nTUFBSDI3ekgzQ0ZFaTEzWlY3V2RJdTg2MVVybmlkNFZUTGpwdTZuK0Vjbit3eXp6cGVhOTFZakZYMStOTGxzV2ptY0E2ZGxGNnpBUUFBMER1aE9RQUE4Q0FaZGl4ZmROQ3NIRUhMYWNIZHZpNmtqMzVtT2ZFeDZGdmI4ZnJxWGVaRlBUUGJsR1ZmaldneFNkdDJMczBZQUFCZ0NFSnpBQURnb1E0S2JOTXl3em5XcFhiNDlmWDFlZFYraDM3WG9mblVGeTcwclczbGhJMHVIRjZPc3V6Ti9mOWhSSmQ4MGZMN2o4d2FBQUJnQ0VKekFBRGczbElBZE5qeU5Kc09tcFpqVis1NTRkM2ZObERlNjdoOWk1YmZmNVpLMGJ2UDhyeC9mcU1uaTdDcTVsV1d2ZTI4MjJ2bXYrQWNBQURvbmRBY0FBQjRpRlZ6UEdsNWppN0M2YWNGdGltMzFtM01GTWJleGM3b2ljMFhXdDl2VVpWakxtWFovNk5wYjQ3N2VPWGQ1Z0FBUU4rRTVnQUF3TDNVZFgxWXRRdUF0cm9JODlvR0xKc1JETUhVUTlBTGQ5azN5N1lueUJSZTh2am41ZHpLc3UvNjFQTDdZMkhXSmkwNkFBQUE2SVhRSEFBQStLVVVtQjluT05XWGpuWk90dDM5WG54WjhFemw0eGNkelk5bGh0TmN1Tk95K2FvTEJyZHU4VndhWTFuMlhhY1p6aEY5OTNmemJGazN4OEowQWdBQXVpWTBCd0FBN2hTN0pac2pBcERqVEtkY0YzcXBjeWxsdlRDclowRnA5bUdmbTdGRCttV0xVNHl1TFB1dXB1M3huTSsxY09OVmMvd2JmdzdGdTg0N2ZzVUVBQUF3WTcvcEFnQUE0TFlVK215UEp4bFBmYXAzVzdsc2pyMHBYcGh5NGt6azJUbm5zdXk3NGhyZVpUemZ5M1JFSDV0b0FBQkFka0p6QUFDWW9McXVONC84MWdoOG5uWFVySk14NzU0c1JQVGZubTZBWXEycitaWmwzeFdoK1ZHVmQ5RVZBQUJBWjRUbUFBQXdUUzhLYk5QS3NFeHlYTE9JOXhaYlZNSEk1L0NzeTdMdmFxN2pxdW1QdythWGY1c1pBQURBR0hpbk9RQUEwSWVQaFlkQmk1bU13NVV4bUlXbnVxQmZ5ckovcjdtZWVCM0hKN01EQUFBWUE2RTVBQURRdFhnUDk2cndOaTVLNzhRVXlyVjEzbEh6emszem9qelRCYjFiVjhxeS8waGMxeGZUQXdBQUtKM1FIQUFBNk5wQmxPcnQrRFBhaGpMN0krakhZdHVZYVh5WGJwVnZMdHFlSU1yZDY4WitLTXYreTJkRDlNOVhNd1VBQUNpWjBCd0FBT2pTNit2cjZ6NTJJYmNOYmVjU21uYzVGbDluTUFaOXVTaGt2dkFMeXJML1dsb1FFUFBSam5NQUFLQllRbk1BQUtBckVaaXZlL3FzdG1IdzNnaDI1aTdibnFEakhmL25RMS9maEp5WE1GKzRsM2pHS2N2KzYyZlBSWnFUWjZZTUFBQlFJcUU1QUFEUWhUNEQ4NUFqWkR3b3ZFOWZ0dnorczhMSDRFbGQxM1pIVjk4V04zeWQrSHdlUFdYWkh6NnZtMlBaL1BKdHBWdzdBQUJRR0tFNUFBQ1FVd1FoejNzT3pFT08wUHl3MUU2dDYvcXdrRDZhN1JnTUlFZjFCSXNRdXJzbmxXVi9wSFRkTVRjL21Va0FBRUFwaE9ZQUFFQXVKODJ4Nk9rZDV2OGxmV2Jibll2UDZycGVGdHEzaHhuT3NlbTRqWnRDcm5NcWN2VG5rVzdzekxwU2xyM05NL3VpT1dLbi92UDBad2NBQU1DZ2hPWUFBRUJiVWZiN2ordnI2OE9PMzVuOUs1c001eWd1WkV4Qi9vdEMrdWRPcWN6MFpjdlRQTW0wcTM0S2NvelhRZG9SVFY3S3N1ZDdicHpIbngzTkwxL3JEUUFBWUVoQ2N3QUE0TEdpdEc2RTVjdm0yQlRRbnRNTTUzaFo0Rzd6Vlk2eDZtbEJ3NmFRNngyOWRFKzFyWjRRTzZIdE5zL3ZXWXZ2blcxWjlydWtoUjN1ZXdBQVlGQkNjd0FBNENHK05NZmI1dmc5U3VzV0VwWnZuV1k2VHpHQlZsM1hzYVAxUlVGOTA4Zm54THU0VjI2MWJQMzVydW5QaGE0c3d1ekxzdDhoN3ZjOTNRQUFBQXhKYUE0QUFOd2xTbTFINmZYM3pmRm5jL3pQOWZYMWZ1eVNMTEcwY05wSi9TbkRxWjZWRU5xbTNaZnJES2VLb082MHB6RTRyZHJ2amc1SHpmWHZsekN2Qmk1dm5tdmMxcVhjcHpNUDhKVmwvMzQrTEpzdmJ6S2M2a3ZUdC9WRERyMFBBQURzK2swWEFBREFKUDNSNG5zdlJoenNyS3QyN3hyZWl0MjU1eWtFSGtwODlwTWM1K241WGZNeEJtMURzTGp1ZFFScVBiZjl2NlNkL3RHT282WWQ2NzQvUCtaZjg5bXhlS1h0THR3WHNSQ2tPZDlxeUp1emFVUDA0VElXUkF3NXJnTlJsdjM3K1pCcllWQTQxS01BQUVBYlFuTUFBSmlnd3NxbTkzbmR1VUxHc0ExdHovdStqaFF1dnNoMHVsWFB6WTlnTU1mTzBXZnBYSWREektWbURPSnpqOU52ajV2Zlh3MjBpQ0w2NEs4TTU0bUZJQmREaFA4NzRlaDJRY3RtNkFVUlBWT1cvWTVuYktabjlmc2hudE1BQU1DMEtNOE9BQUJNelNyVGVXSzM4NmJ2TXVFcE1IK1Y2WFNmK3E0YWtEN3ZKTlBwWHFYK3FBWVlnK05iLzNnOVVNbjRhTXZYVE9jNlRvc0IrdXpMNkxOTjlkOFZJSjZsZSt0cE5RL0tzbjgvTHc2cVBGVkJ2Z3hkUVFFQUFKZ0dvVGtBQURBcGFTZnRaYWJUYllQenc2N2JIUUZpNXNBOEhBMDBES3VNNTRyZy9MU1BnRFVDM2lqTGY4Y1lETEtJSXUzR3psbld1N2ZnUEgzT3Byb0p5VytiUzNDdUxQc1BubldWc3V3QUFFQmhoT1lBQU1BVTVReUxJeXlOb1BGRFZ3SGZ6bTdjbklINXlWQzdXelB2TmcreEk3WFR3RHJlK1YzZEhmRHV6b1hOQUR2T0kzVDltdkY4TVovWEhjN25SU3gwcUc1MjZ6LzV5WCs2TGNFL1ZjcXkvOWo2Ri9QaXZwUmxCd0FBc2hHYUF3QUFrNVBlUFgyVytiVHhudTZMbkx0MFU3aTRibjc1VC9YenNQYWhJcXc3R25nWWpxcThRVy8wenorNUZ5L0VlTWE3dnB0ZnZxdnVGK1J0Zy9PblBjN25xdzdHODFVSDgvbHBXbndRUWVaOVMyOFBVb0svSjhxeS8rQitxNVJsQndBQUNpUTBCd0FBcHVxd3lodmFodTJ1OHdnYmp5TDBmc3hKVWhud2RmUExmNnU4dTh1L1hYc0tXZ2VUUG4vVndhbTNpeGMrdE9qL3AybjhMcXFiM2RCN2o1Z0hmUWZuTVYvT09welBoNCs5bmpTZlk4ZDQ5T2Q5Rngvc21tSndyaXo3OS9Nazd0Y2NmV0lIUHdBQWtQL3ZMTTFmNHZRQ0FBQ1U5b042WFcrYUx5OGUrLzNOei9tMVh2eTJxL0c0NDQvNTBoeXhzejEyMTE3Y0xoZWNnc2dvNTcxb2ptVTY5anBzejZlbURRZFRtY3YzN1A5Tk9pNStWSzY1YVVQMCtYWWNvbStlWmZ6c1pWOExGRkxvR05mM3BNdjVrejVqMjU4WFBjN25qODNuSFUxZ1hrYW91NTk3bDNuTE5yOGZlbWQyeGo1L20yTkJRdE9lTnY5RExCWkZMUDBwQ3dBQTB5RTBCd0NBRW45UUY1cm43TXQxMWMxdTdoTDFHdUxlcy84WFZmZEI3Mno2dktlRklFTjZuWGJWRi8yTS9ZVzNYZXd5SDNOb0hwVWRtaTkvWlRoVnRyQmFhQTRBQU94U25oMEFBSmk2Q0d1K3pPQTYvMU95dUtUQVBLVGR0Z2NUN3ZmWXRiN3VzVC9qczA0bTNKL0hPZCt6UGdCbDJXOUpDMmRXdVo1eGVoUUFBT2lDMEJ3QUFKaTBGQ0l2bStOeXdwY1pZZEx5UjZYSkN4bURUZlBsOVlUNy8yV2ZRVy9Ubi9GWlp4UHV6K1BIdnErK2dQdndzT0syZFpXbjBzUXFkOGw3QUFDQUxhRTVBQUF3ZVNrNGo5M09YeWQ2aVVlbEJ1WTdZN0J1dnJ5ZmFQK2Y5RkZTL0phWXoxT3RvUEI2cE9Hb1VQZVd1cTVYVlo0eStIYndBd0FBblJLYUF3QUFzNUJDNVdVMXJlQThydVhQQVFMYng0N0JxcHBlYWZHVHRQTzc3NzdjVmxDWVduRCtlaXp6K1JhaDdpMTFYZTgzWDk1bGVzNGQ2bEVBQUtCTFFuTUFBR0EyVW5DK3FLWVJORzVMc3ArT2JBd09xK21VYXY4NFJHQyswNWZiNFB4c0l2UDUrVWdEYzZIdWorVWFTenY0QVFDQXpnbk5BUUNBV2RrSkdqK04rRElpOU44dnZTVDdUOFpnWGQwRTUyUGU5Ujg3b285S21NL05FZk41ekR2NEw2dWJCU0RuSTIyL1VQZVdWSmI5V1laVDJjRVBBQUQwUW1nT0FBRE1UZ29hNDUzUWIwZlkvTmpkdkQvMmtDNEY1OHRxZkx2K2k5d1J2Yk9EZjJ3TEVXS1gvUDZJQTNPaDdpM0tzZ01BQUdNa05BY0FBR1lyaFYzUHEzR1V0NDdkdUgrVXNMczVZLzl2M3pQL2NTUk5qdW9FaTFJRDNoVGs3NDlrUGtjZytqWjJ5YWZxRDJNazFMMmxydXVuelpkY3I0eXdneDhBQU9pTjBCd0FBSmkxQ0VCVGVldFNkK2xHbTk0M2JZeXdkalBCL3I5S0N3RktYcndRQ3hiK2pPb0VwUWU4RVRJV1BwK3I2djkzbDQ5OWg3WlE5d2Q5MGh4N09lYUlIZndBQUVDZmhPWUFBQURWdDEyNmkrWjRYNVVSTm41TmJZbXdmRFdEL3Q5ZHZIQlpTTE8yWXhBQjc2bjUzRnFFNVgrazNlVVhJNSt5UXQxYjZycU8rL2ROcHZ2dVVJOENBQUI5RXBvREFBQWthZGR6N0I2TkVzTVIzZzd4dnUwSWpPTmQ2NHZVbHF1WmpjRTZkdFUzdi95ekdtN24rV1VhLzFHUHdYWStWemZoK2R0cXVNVUlVZForRzVadkpqQk5oYnEzcExMczYweW5zNE1mQUFEb25kQWNBQURnQjFKNEcrK0hqckxoOGM3dExnUDB5L1FaejFNWjlnOXpDOHQvMFArbmFlZjU3OVZONE52MUFvYmJZN0NleWhpazhQeERXb3p3UjNPY1ZOM3ZQajlMNC9aN0ttdS9tZEQwRk9wK0wzYmRLOHNPQUFDTVZ0MzhaVVF2QUFCQWFUK28xM1dFdFU4ZisvMVRmUGQxSWVPeWFMNHNtMk0vSFM4ZWVhb0lnTStiSThacEk0QjdjUC9Ic1dqUi8rRXNqY0g1WE1jZ1BXZVdPM1A2c2FGbkxEaTRTUE41MjU5WEk3ajJSejFqaDNxK3R2eHo0YUxMT1o1S3MrZHczdGZjYWRubVdJaHk3cWtNQUFEVDhYOENEQUNsWXdDdk9qZTE0QUFBQUFCSlJVNUVya0pnZ2c9PSIgZGF0YS1maWxlbmFtZT0iQ05SVVNTSUFfTE9HT1NfYmxhY2stMDIucG5nIiBzdHlsZT0id2lkdGg6IDMwNy42cHg7IGhlaWdodDogNjMuNzY4MXB4OyI+PC9kaXY+CjxwPjxicj48L3A+PHA+PGJyPjwvcD48cD7Ql9C00YDQsNCy0YHRgtCy0YPQudGC0LUsINC00L7RgNC+0LPQvtC5INGH0LjRgtCw0YLQtdC70YwhJm5ic3A7PC9wPjxwPjxicj48L3A+PGRpdj7QktCw0Ygg0LfQsNC60LDQtyDihJYgPHN0cm9uZz48dT57b3JkZXJOdW19PC91Pjwvc3Ryb25nPiDQuNC3INC80LDQs9Cw0LfQuNC90LAgPHN0cm9uZz48dT57c2hvcE5hbWV9PC91Pjwvc3Ryb25nPiZuYnNwO9Cx0YvQuyDRg9GB0L/QtdGI0L3QviDQvtGE0L7RgNC80LvQtdC9Ljxicj48YnI+IDxzdHJvbmc+0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4Ojwvc3Ryb25nPjxicj48YnI+PHNwYW4+e2RlbGl2ZXJ5QWRkcmVzc308L3NwYW4+PC9kaXY+PHA+PGJyPjxicj7QlNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC00LDQvdC90YvRhSDQt9Cw0LrQsNC30LA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigzMiwgMzEsIDMwKTsgZm9udC1mYW1pbHk6ICZxdW90O1NlZ29lIFVJIFdlYiAoQ3lyaWxsaWMpJnF1b3Q7LCAmcXVvdDtTZWdvZSBVSSZxdW90OywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBSb2JvdG8sICZxdW90O0hlbHZldGljYSBOZXVlJnF1b3Q7LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE1cHg7Ij4mbmJzcDs8L3NwYW4+0LLQvtGB0L/QvtC70YzQt9GD0LnRgtC10YHRjCZuYnNwOzxzdHJvbmc+PGEgaHJlZj0ie29yZGVyTGlua30iPtGN0YLQvtC5INGB0YHRi9C70LrQvtC5PC9hPjwvc3Ryb25nPi48L3A+",
"reportsUseDemoData": false,
"uid": "55c43dd7-1167-d151-92b4-3f59a47dbb2d",
"useCustomDlvTariffLogin": true
}
/api/lite/admin/settings/warehouses - настройки склада
1. Получения списка склада. Метода GET /api/lite/admin/settings/warehouses.
2. Изменение склада реализовано одной операцией. Метод POST /api/lite/admin/settings/warehouses. В теле метода передаем json:
{
"accumRegistryEnabled": false,
"active": true,
"address": {
"building": "3",
"city": "Москва",
"cityFiasCode": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"country": "RU",
"fullAddress": "Москва, Котляковская, д 1, стр 3",
"fullApartment": "",
"fullKorpusStroenie": "стр. 3",
"fullStreetAddress": "Котляковская, д. 1, стр. 3",
"house": "1",
"region": "Москва",
"regionFiasCode": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
"street": "Котляковская",
"uid": "03f7860c-9bc1-bd24-60d6-0590d61eeea3",
"useSuggestions": true,
"zip": "115201"
},
"children": [],
"default": false,
"defectedWarehouse": null,
"isAccumRegistryEnabled": false,
"isActive": true,
"isDefault": false,
"isGuaranteedAmount": true,
"name": "GLOBAL_DELIVERY",
"operatorType": "MANUAL",
"packingControl": false,
"uid": "7cc571a8-8b71-d5c4-4faf-deb08b9b01f5",
"warehouseOrderType": "NON_ORDER",
"warehouseServicesForTenantList": [],
"whOperationType": "SORT_CENTER"
}
/api/lite/admin/settings/stock-correction - коррекция остатков
Коррекция остатков реализована одной операцией. Метод POST /api/lite/admin/settings/stock-correction. В теле метода передаем json:
{
"warehouseId": "2224427d-7524-9cf8-23b9-b4aab059678a",
"lessItems": [
{
"afterCorrection": 994686,
"available": 597,
"diff": 994089,
"external": 994686,
"item": {
"article": "",
"barcode": "977156333800820006",
"img": "https://storage.yandexcloud.net/images-k2c/3962f8ba-15bd-45bb-813e-46dbe557edad.jpg",
"name": "Gentlemen's Quarterly/GQ Россия №6",
"productExtId": "1563-3381",
"productId": "1042",
"variantExtId": "",
"variantId": "1042"
},
"reserved": 0,
"reviseError": false
}
],
"moreItems": [
{
"afterCorrection": 0,
"available": 301,
"diff": 301,
"external": 0,
"item": {
"article": "",
"barcode": "977156333800820005",
"img": "https://storage.yandexcloud.net/images-k2c/cc0edc3b-df39-43f3-9dd1-9ff47d1b6477.jpg",
"name": "Gentlemen's Quarterly/GQ Россия №5",
"productExtId": "1563-3381",
"productId": "1031",
"variantId": "1031"
},
"reserved": 0,
"reviseError": false
}
]
}
/api/lite/admin/settings/order-type - установка типа заказа
Установка типа заказа реализована одной операцией. Метод POST /api/lite/admin/settings/order-type. В теле метода передаем json:
{
"id":"875c17e3-bb0c-083d-4eaf-69ee3661036d",
"orderType": "STANDARD"
}
/api/lite/products/find/barcodes - поиск вариантов товаров по ШК
Поиск варинатов товаров по ШК из списка
/api/lite/products/find/barcodes
Находит все сжатую информацию о вариатах товаров по их ШК.
Пейджинация
Для пейджинации используются параметры page и size:
- size - записей на странице
- page - номер страницы.
Пример: /api/lite/products/find/barcodes?page=0&size=1090
Значения по умолчанию (если не переданы):
- page=0
- size=1000
Максимальное количество записей на странице - 1000
Пример запроса:
{
"barcodes": ["1234567890", "1234567891"]
}
Пример успешного ответа:
{
"variants": [
{
"id": "00003-62652#0005",
"name": "Товар 1",
"barcodes": ["4062955945900"]
}
],
"recordsTotal": 100
}
Поле recordsTotal возвращает общее количество записей в системе.
Маржинальность
/api/lite/products/prices/margin/history - История изменения средней цены закупки.
Подсказка полного адреса (/api/prompter/address)
/api/lite/products/prices/margin/history?id=1040.
Получения истории изменения Средней ценой закупки по кокнкретному товару. Входной параметр - id товара
{
"history": [
{
"date": "2023-09-18 12:53:08",
"price": 125.00,
"success": true
},
{
"date": "2023-09-18 12:52:51",
"price": 135.00,
"success": true
},
{
"date": "2023-09-12 09:01:30",
"price": 125.00,
"success": true
},
{
"date": "2023-09-12 05:25:44",
"price": 120.00,
"success": true
}
],
"success": true
}
/api/lite/report/margin - пересчёт отчета по маржинальности.
/api/lite/report/margin
Метод принудительного пересчёта отчета по маржинальности и сохранения его в общие отчёты аккаунта
Отчёт состоит из: даты, массива предупреждений и массива каналов продаж. У предупреждений есть три типа (см. ссылку на задачу внизу). Каналы продаж состоят из названия канала и трёх массивов: годовой информации, месячной и недельной (см. JSON). Внутри каналов продаж есть totalSales, это суммарные значения всех каналов
входные параметры:
isDelivered - флаг указания, какой отчет вывести. Если надо вывести отгруженные, то не указывается или false. Если необходимо вывести отчет по доставленным товарам, то true. Внимание: независимо от флага, пересчёт будет совершен на оба отчёта. От флага зависит только вывод.
{
"channelSales": [
{
"annuallyData": [
{
"margin": 0,
"point": "Сен",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
},
{
"margin": 0,
"point": "Окт",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
},
// ...
// вырезал 9 месяцев, чтобы не растягивать статью в вики
// ...
{
"margin": 0,
"point": "Авг",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
}
],
"channel": "ONLINE",
"monthlyData": [
{
"margin": 0,
"point": 20,
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
},
// ...
// вырезал 28 дней, чтобы не растягивать статью в вики
// ...
{
"margin": 0,
"point": 19,
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
}
],
"weeklyData": [
{
"margin": 0,
"point": "Ср",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 3350.00,
"totalSales": 4475.00
},
// ...
// вырезал 5 дней, чтобы не растягивать статью в вики
// ...
{
"margin": 0,
"point": "Вт",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
}
]
},
{
"annuallyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
"channel": "totalSales",
"monthlyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
"weeklyData": [ ] // вырезал содержимое, чтобы не растягивать статью в вики
}
],
"date": "2023-09-20",
"warning": [
{
"additionalInfo": "Список товаров: [1029, 1028, 1026, 1025, 1024, 1040]",
"priority": 1,
"title": "Нет данных. Для расчета укажите средние цены закупки."
},
{
"additionalInfo": "Если в расчете фиксируются аномальные показатели маржинальности – меньше 1% или больше 50%.",
"priority": 3,
"title": "Аномальные показатели. Возможно необходимо актуализировать данные по ценам закупки и затрат."
}
]
}
/api/lite/products/margin - расчёт отчёта по маржинальности для товара.
/api/lite/products/margin?id=1040
Метод расчёта отчета по маржинальности конкретного товара по его humanId. Используется метод GET, потому что никакие расчитанные данные не сохраняются в БД.
Отчёт состоит из: даты, массива предупреждений и массива каналов продаж. У предупреждений есть три типа (см. ссылку на задачу внизу). Каналы продаж состоят из названия канала и трёх массивов: годовой информации, месячной и недельной (см. JSON).
входные параметры:
isDelivered - флаг указания, какой отчет вывести. Если надо вывести отгруженные, то не указывается или false. Если необходимо вывести отчет по доставленным товарам, то true.
skuHumanId - id товара, на который требуется отчёт.
{
"channelSales": [
{
"annuallyData": [
{
"margin": 0,
"point": "Сен",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
},
{
"margin": 0,
"point": "Окт",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
},
// ...
// вырезал 9 месяцев, чтобы не растягивать статью в вики
// ...
{
"margin": 0,
"point": "Авг",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
}
],
"channel": "ONLINE",
"monthlyData": [
{
"margin": 0,
"point": 20,
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
},
// ...
// вырезал 28 дней, чтобы не растягивать статью в вики
// ...
{
"margin": 0,
"point": 19,
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
}
],
"weeklyData": [
{
"margin": 0,
"point": "Ср",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 3350.00,
"totalSales": 4475.00
},
// ...
// вырезал 5 дней, чтобы не растягивать статью в вики
// ...
{
"margin": 0,
"point": "Вт",
"totalCosts": 0,
"totalIncome": 0,
"totalPurchases": 0.00,
"totalSales": 0.00
}
]
},
{
"annuallyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
"channel": "totalSales",
"monthlyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
"weeklyData": [ ] // вырезал содержимое, чтобы не растягивать статью в вики
}
],
"date": "2023-09-20",
"warning": [
{
"additionalInfo": "Список товаров: [1029, 1028, 1026, 1025, 1024, 1040]",
"priority": 1,
"title": "Нет данных. Для расчета укажите средние цены закупки."
},
{
"additionalInfo": "Если в расчете фиксируются аномальные показатели маржинальности – меньше 1% или больше 50%.",
"priority": 3,
"title": "Аномальные показатели. Возможно необходимо актуализировать данные по ценам закупки и затрат."
}
]
}
Консолидация
Создание товаров
Для создания товаров можно полноценно использовать Апи работы с товарами,
а также импорты/экспорты excel файлов с номеклатурой.
Также полноценно работает и раздел Товары в ЛК пользователя
В дополнение к этим стандартным возможностям - есть режим автосоздания номенклатуры для аккаунта Консолидации - прямо из Апи заказов на отгрузку.
Для этого в order.items нужно - в дополнение к стандартным полям строrи заказа (num, variantId, price, quantity, vatRate) - передать поля:
{
...
"items": [
{
"num": 1,
"variantId": "100-201",
"price": 1000.00,
"quantity": 2,
"skuType": "SKU",
"vatRate": "VAT_20",
"barcode": "461234567836",
"name": "Конструктор для развития творчества №12",
"article": "const-N12"
}
...
]
}
Система автоматически проверит наличие указанных товаров по их коду (поле variantId), и создаст, если не будет найден указанный товар.
Создание заказов
Создание заказов работает по стандартному Апи заказов. Используется "Свой склад" без контроля остатков.
Заказ создается/редактируется по указанному id. Если поле id не задано - то система сгенерирует очередной уникальный человекочитаемый номер из внутреннего пула (вида 1234-1000).
Чтобы заказ был готов к упаковке - необходимо передать статус подтверждения confirmStatus = APPROVED, а также комбинацию способа и статуса оплаты, позволяющую начать упаковку. А также остальные поля по строкам заказа, способу и адресу доставки.
Упаковка заказов
Упаковка осуществляется передачей по заказу желаемого состояния упакованных мест (количество мест, их товарное содержимое, габариты и масса, уникальные номера товаров (например, честный знак), штрихкод места (опционально)).
Создание/редактирование всех упакованных мест заказа
/api/lite/orders/consolidation/packing
Создание/редактирование набора упакованных мест заказов. Номер заказа обязательный параметр - поле id.
Система трактует переданный набор упакованных мест как итоговое желаемое состояние упакованных мест заказа. Если уже есть упакованные места - система проанализирует и приведет их в соответствие с переданным набором.
Сверка идет по полю num и barcode.
Если у мест передан штрихкод (поле barcode) - система запишет его, иначе присвоит ШК из внутреннего пула.
Система позволяет передавать сразу много заказов на упаковку в запросе (массив orders).
Важно. Сразу после первичной полной упаковки заказа (по данным системы - все товары заказа упакованы) - идет выгрузка заказа в Апи службы доставки. Если получены ошибки от службы доставки - операция вернет success = false и список полученных ошибок. Их необходимо исправить и повторно вызвать упаковку заказа.
Пример запроса
{
"orders": [
{
"id": "60-71",
"packings": [
{
"num": 1,
"barcode": "123456789",
"items": [
{
"num":1,
"variantId": "154",
"quantity": 2,
"accountingAttributes": [
{
"code": "chestnyznak",
"stringValue":"010463001165001521WRA5MP18REV1Y91EE0692LsS8Yf4v2H/umBxy5U/QqZG+pWIGdAqdCktd7H5JAoI="
}
]
},
{
"num":2,
"variantId": "100-201",
"quantity": 2
}
],
"measurements": {
"weight": 565,
"dimensions": {
"height": 10,
"width": 11,
"depth": 13
}
}
}
]
}
]
}
Успешный ответ
{
"orders": [
{
"id": "60-71",
"success": true
}
],
"success": true
}
Ошибка:
{
"errors": [
{
"code": 0,
"message": "[1130659] Переданный уникальный номер не соответствует требованиям \"ЧестныйЗнак\""
}
],
"orders": [
{
"errors": [
{
"code": 0,
"message": "[1130659] Переданный уникальный номер не соответствует требованиям \"ЧестныйЗнак\""
}
],
"id": "5113-1141",
"success": false
}
],
"success": false
}
Создание/редактирование упакованного места заказа поштучно
PUT /api/lite/orders/consolidation/packing
Создание/редактирование упакованного места заказа поштучно. Влияет только на одно место заказа и изменяет его согласно переданному желаемому состоянию. Остальные места заказа не затрагиваются.
Номер заказа обязательный параметр - поле id.
Формат запроса и ответа аналогичен POST запросу.
Пример запроса
{
"orders": [
{
"id": "60-71",
"packings": [
{
"num": 1,
"barcode": "123456789",
"items": [
{
"num":1,
"variantId": "154",
"quantity": 2
},
{
"num":2,
"variantId": "100-201",
"quantity": 2
}
],
"measurements": {
"weight": 565,
"dimensions": {
"height": 10,
"width": 11,
"depth": 13
}
}
}
]
}
]
}
Успешный ответ
{
"orders": [
{
"id": "60-71",
"success": true
}
],
"success": true
}
Получение упакованных мест заказа
/api/lite/orders/consolidation/packing
Возвращает перечень упакованных мест заказа.
Обязательный параметр: id заказа.
Пример ответа по частично упакованному заказу
{
"orders": [
{
"date": "2023-09-26 13:40:13",
"externalId": "60-72",
"id": "60-72",
"items": [
{
"article": "",
"barcode": "2000916300001",
"img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
"itemAmountState": {},
"itemDimensions": {
"depth": 1,
"height": 15,
"width": 5
},
"itemWeight": 80,
"name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
"num": 1,
"price": 2846.00,
"productExtId": "BR00T-000140",
"productId": "1013",
"productVariantCount": 3,
"quantity": 2,
"skuType": "SKU",
"variantExtId": "BR00T-000140-2",
"variantId": "154",
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT"
},
{
"article": "100-201-артикул",
"barcode": "100-100-201",
"itemAmountState": {},
"itemDimensions": {
"depth": 10,
"height": 10,
"width": 10
},
"itemWeight": 500,
"name": "Тест товар - 100-201",
"num": 2,
"price": 1000.00,
"productId": "1066",
"productVariantCount": 1,
"quantity": 2,
"skuType": "SKU",
"variantId": "100-201",
"vatRate": "VAT_20"
},
{
"article": "",
"barcode": "",
"name": "Доставка",
"num": 3,
"price": 0.00,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"notPackedItems": [
{
"article": "100-201-артикул",
"barcode": "100-100-201",
"itemDimensions": {
"depth": 10,
"height": 10,
"width": 10
},
"itemWeight": 500,
"name": "Тест товар - 100-201",
"num": 2,
"productId": "1066",
"quantity": 1,
"skuType": "SKU",
"variantId": "100-201"
},
{
"article": "",
"barcode": "2000916300001",
"img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
"itemDimensions": {
"depth": 1,
"height": 15,
"width": 5
},
"itemWeight": 80,
"name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
"num": 1,
"productExtId": "BR00T-000140",
"productId": "1013",
"quantity": 1,
"skuType": "SKU",
"variantExtId": "BR00T-000140-2",
"variantId": "154"
}
],
"packings": [
{
"barcode": "3837100281759",
"files": [],
"items": [
{
"accountingAttributes": [],
"article": "",
"barcode": "2000916300001",
"img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
"itemDimensions": {
"depth": 1,
"height": 15,
"width": 5
},
"itemWeight": 80,
"name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
"num": 1,
"price": 2846.00,
"productExtId": "BR00T-000140",
"productId": "1013",
"productVariantCount": 3,
"quantity": 1,
"skuType": "SKU",
"variantExtId": "BR00T-000140-2",
"variantId": "154",
"vatRate": "NO_VAT",
"vatSkuProduct": "NO_VAT"
},
{
"accountingAttributes": [],
"article": "100-201-артикул",
"barcode": "100-100-201",
"itemDimensions": {
"depth": 10,
"height": 10,
"width": 10
},
"itemWeight": 500,
"name": "Тест товар - 100-201",
"num": 2,
"price": 1000.00,
"productId": "1066",
"productVariantCount": 1,
"quantity": 1,
"skuType": "SKU",
"variantId": "100-201",
"vatRate": "VAT_20"
}
],
"measurements": {
"dimensions": {
"depth": 13,
"height": 10,
"width": 11
},
"success": true,
"weight": 565
},
"num": 1
}
],
"status": "ORDER_INFO_READY_TO_PACK"
}
],
"recordsTotal": 1,
"success": true
}
Получение стикера упакованного места
/api/lite/orders/consolidation/packing/print
Возвращает pdf файл со стикером 6x6 см для переданного упакованного места, в формате base64.
Обязательный параметр: barcode - ШК упакованного места.
{
"success": true,
"content": "base64"
}
Пример стикера:
Отгрузка заказов (создание реестра отгрузки)
Создание/редактирование реестра отгрузки
/api/lite/takeout_list
Создание реестра отгружаемых заказов, объединенных одной службой доставки. По каждой службе доставки необходимо формировать отдеьный реестр. В отгруженный реестр вносить изменения состава заказов более нельзя.
{
"id":"1105",
"courierCode":"LOGSIS",
"takeoutDate": "2023-09-22",
"takeoutHourStart":"09:00",
"takeoutHourEnd":"18:00",
"gatherType": "COURIER",
"date":"2023-09-20 22:12:12",
"warehouseCode" : "e98f2e33-d488-d75c-4e38-b912e87429b6",
"orders": [{"id":"60-71"}, {"id":"60-72"}]
}
id - номер реестра,
courierCode - код курьерской компании (из перечисления),
Успешный ответ
{
"id": "1105",
"success": true
}
Получение реестра отгрузки
/api/lite/takeout_list
Возвращает реестр отгрузки по его id
Обязательный параметр: id реестра.
Пример успешного ответа
{
"recordsTotal": 1,
"success": true,
"takeoutLists": [
{
"availableForChanges": false,
"courierCode": "LOGSIS",
"date": "2023-09-22 11:53:44",
"id": "1101",
"orders": [
{
"customer": "Тестовый Покупатель",
"date": "2023-09-19",
"id": "60-55"
},
{
"customer": "Тестовый Покупатель",
"date": "2023-09-19",
"id": "60-56"
}
],
"status": "SHIPPED",
"takeoutDate": "2023-09-22",
"updateTs": "2023-09-22 11:53:44.643",
"warehouseCode": "e98f2e33-d488-d75c-4e38-b912e87429b6",
"warehouseManager": {
"address": {},
"alternativePhone": "",
"name": "Не задано",
"passport": {},
"patronymic": "",
"phone": "+73434343434",
"rawPhone": "Не задано",
"surname": ""
},
"warehouseName": "Свой склад"
}
]
}
Получение печатной формы реестра
/api/lite/takeout_list/print
Возвращает pdf файл спечатной формой реестра А4 для указанного реестра, в формате base64.
Обязательный параметр: id реестра.
Пример печатной формы:
Упаковочные материалы
Упаковочные материалы
Запрос списка упаковочных материалов (GET /api/lite/products)
/api/lite/products
Дублирует https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteproducts
Описание полей аналогичное запросу товаров.
Существует 4 типа упаковочных материалов:
Упаковочные короба | PACKING_MATERIAL_BOXES |
Другие виды расходных материалов | PACKING_MATERIAL_OTHER |
Допвложения для упаковки | PACKING_MATERIAL_ATTACHMENT |
Общие материалы | COMMON_PACKING_MATERIA |
Запросить можно через параметр запроса filters=SKU_TYPE:
Пример результата запроса:
/api/lite/products?size=2&filters=SKU_TYPE:COMMON_PACKING_MATERIAL
{
"products": [
{
"available": true,
"deleted": false,
"id": "COMMON_PACK_Birka",
"images": [
{
"id": "COMMON_PACK_Birka",
"pos": "1.000000000000000",
"success": true
}
],
"shortName": "Бирка + биркодержатель (цвет белый)",
"type": "COMMON_PACKING_MATERIAL",
"variants": [
{
"article": "COMMON_PACK_Birka",
"id": "COMMON_PACK_Birka",
"type": "COMMON_PACKING_MATERIAL",
"vat": "NO_VAT"
}
],
"vat": "NO_VAT"
}
],
"recordsTotal": 41,
"success": true
}
Фильтрация по полям товара
Можно задавать фильтр параметром ?query=test - для фильтрации по полям article, humanId, shortName, fullName, description
Дополнительно можно фильтровать по конкректному продукту параметром ?id=1000
Имеется поддержка фильтрации и по другим полям:
- по Id варианта - ?variantId=1001
- по ШК (штрихкоду товара) - ?barcode=0000000000001
- по названию, артикулу - ?query=короб1
Пейджинация
Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.
Пример: /api/lite/products?page=0&size=200
Если параметры не переданы, то дефолтные значения page=0&size=100
Максимальное количество продуктов - 100. Даже если указано значение более 100
Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).
Сортировка
Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.
Пример сортировки по имени (возрастание): /api/lite/products?order=shortname+asc
Пример сортировки по имени (убывание): /api/lite/products?order=shortname+desc
Доступные коды сортировки:
- shortname
- article
- price
- amount
-
stockUpdateFrom
Пример вызова с одновременной фильтрацией, пейджинацией и сортировкой:
/api/lite/products?query=Поло&order=shortname+asc&page=0&size=200
Создание/обновление упаковочных материалов (POST /api/lite/products)
/api/lite/products
Создает или обновляет продукт.
Если id указан - проводится обновление продукта с указанным id, если не указан - создается новый.
Если проводится обновление продукта (или варианта) - то обновляются все поля на те, что переданы. Если какие то поля в продукте были непустые, а в запросе они не переданы - то после обновления поля очищаются.
Опционально можно передавать список вариантов товара для обновления, в поле variantsToUpdate. Обновление продукта выполняется первым, если успешно - то начинается обновление вариантов.
Этот список не означает, что коллекция вариантов данного продукта будет приведена к виду в переданном списке вариантов. Будет выполнено только обновление указанных вариантов, безотносительно остальных вариантов их продукта.
Если передан список вариантов - то в ответе в поле variantsResult будет список результатов обновления по каждому варианту, для сопоставления на вызывающей стороне (по полям productId + variantId)
Поле | Тип / формат |
Описание |
id | string |
Идентификатор продукта. Если не указан, создается новый продукт. Если указан, обновляется продукт с данным id или создаётся новый продукт с пользовательским id. |
extId | string | Дополнительный идентификатор продукта |
shortName | string | Наименование продукта |
description | string | Описание (может содержать html) |
deleted | boolean | Архивная карточка |
type | enum | Тип упаковочного материала |
variantsToUpdate | объект | Объект варианта товара (см. POST /api/lite/products/variants) |
Пример вызова:
{
"id": "10106",
"shortName": "Новый упаковочный короб 1",
"type": "PACKING_MATERIAL_BOXES",
"variantsToUpdate": [
{
"weight": 1000,
"dimensions": {
"width": 10,
"height": 10,
"depth": 10
},
"article": "242343",
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "342424655"
}
],
"productId": "10106",
"variantId": "10234659"
}
]
}
Пример положительного ответа:
{
"id": "10106",
"success": true,
"variantsResult": [
{
"productId": "10106",
"success": true,
"variantId": "10234659"
}
]
}
Пример положительного ответа с ошибкой сохранения по указанному варианту:
{
"id": "10107",
"success": true,
"variantsResult": [
{
"errors": [
{
"code": 0,
"message": "Штрихкод 3424246755 уже используются в варианте [10234659] Новый упаковочный короб 1, артикул: 242343, ШК: 3424246755 "
}
],
"productId": "10107",
"success": false,
"variantId": "10234654"
}
]
}
Создание/обновление заказа с упаковочными материалами (POST/api/lite/orders)
/api/lite/orders
Дублирует https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteorders
Упаковочные материалы можно добавить к каждому товару в списке items (кроме товара доставки) в заказе списком packingMaterials,
который содержит в себе 2 дополнительных списка:
commonMaterials - передаются только общие упаковочные материалы
customMaterials - 3 других типа упаковочных материалов
{
"id": "5669-232434357",
"items": [
{
"article": "78787878",
"barcode": "4254345564",
"name": "Кактус",
"productId": "10040",
"quantity": 3,
"variantId": "10040",
"packingMaterials": {
"commonMaterials": [
{
"id": "COMMON_PACK_Birka",
"shortName": "Бирка + биркодержатель (цвет белый)",
"type": "COMMON_PACKING_MATERIAL",
"variants": [
{
"article": "COMMON_PACK_Birka",
"id": "COMMON_PACK_Birka",
"type": "COMMON_PACKING_MATERIAL",
"vat": "NO_VAT"
}
],
"quantity": 1,
"variantId": "COMMON_PACK_Birka"
}
],
"customMaterials": [
{
"id": "10058",
"shortName": "тест_ДВ",
"type": "PACKING_MATERIAL_ATTACHMENT",
"variants": [
{
"article": "66456456",
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "6564645456"
}
],
"dimensions": {
"depth": 10,
"height": 10,
"width": 10
},
"id": "1023402",
"type": "PACKING_MATERIAL_ATTACHMENT",
"weight": 1000
}
],
"quantity": 1,
"variantId": "1023402"
},
{
"id": "10059",
"shortName": "тест 44 апап",
"type": "PACKING_MATERIAL_OTHER",
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "441441441441441441"
}
],
"dimensions": {
"depth": 0,
"height": 0,
"width": 0
},
"id": "1023403",
"type": "PACKING_MATERIAL_OTHER",
"weight": 0
}
],
"quantity": 1,
"variantId": "1023403"
},
{
"id": "10042",
"shortName": "Короб 01",
"type": "PACKING_MATERIAL_BOXES",
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "34523465"
}
],
"dimensions": {
"depth": 0,
"height": 0,
"width": 0
},
"id": "1023386",
"type": "PACKING_MATERIAL_BOXES",
"weight": 0
}
],
"quantity": 1,
"variantId": "1023386"
}
]
}
}
]
}
Пример полного вызова:
{
"confirmStatus": "NEED_CONFIRM",
"createTs": "2025-02-10 17:41:47.618",
"crossdockEditable": true,
"currency": "RUB",
"customerPaymentInProcess": false,
"date": "2025-02-10 17:41:47",
"delivery": {
"address": {
"fullAddress": "",
"region": ""
},
"deliveryPrice": 0,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"pvzComment": "",
"receiver": {
"address": {
"fullAddress": "",
"region": ""
},
"alternativePhone": "",
"passport": {},
"personType": "CUSTOMER",
"phone": ""
}
},
"fbmWithFile": false,
"id": "5669-232434357",
"insuranceSum": 0,
"insuranceSumAutoCalculation": true,
"items": [
{
"article": "78787878",
"barcode": "4254345564",
"expirationDays": 180,
"expirationMode": "USE_EXPIRATION",
"itemDimensions": {
"depth": 0,
"height": 0,
"width": 0
},
"itemWeight": 0,
"name": "Кактус",
"num": 1,
"price": 0,
"productId": "10040",
"productVariantCount": 1,
"quantity": 3,
"quantityAvailable": 0,
"skuType": "SKU",
"variantId": "10040",
"vatRate": "VAT_5",
"vatSkuProduct": "VAT_5",
"packingMaterials": {
"commonMaterials": [
{
"id": "COMMON_PACK_Birka",
"shortName": "Бирка + биркодержатель (цвет белый)",
"type": "COMMON_PACKING_MATERIAL",
"variants": [
{
"article": "COMMON_PACK_Birka",
"id": "COMMON_PACK_Birka",
"type": "COMMON_PACKING_MATERIAL",
"vat": "NO_VAT"
}
],
"quantity": 1,
"variantId": "COMMON_PACK_Birka"
}
],
"customMaterials": [
{
"id": "10058",
"shortName": "тест_ДВ",
"type": "PACKING_MATERIAL_ATTACHMENT",
"variants": [
{
"article": "66456456",
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "6564645456"
}
],
"dimensions": {
"depth": 10,
"height": 10,
"width": 10
},
"id": "1023402",
"type": "PACKING_MATERIAL_ATTACHMENT",
"weight": 1000
}
],
"quantity": 1,
"variantId": "1023402"
},
{
"id": "10059",
"shortName": "тест 44 апап",
"type": "PACKING_MATERIAL_OTHER",
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "441441441441441441"
}
],
"dimensions": {
"depth": 0,
"height": 0,
"width": 0
},
"id": "1023403",
"type": "PACKING_MATERIAL_OTHER",
"weight": 0
}
],
"quantity": 1,
"variantId": "1023403"
},
{
"id": "10042",
"shortName": "Короб 01",
"type": "PACKING_MATERIAL_BOXES",
"variants": [
{
"barcodes": [
{
"isDefault": true,
"type": "COMMON",
"value": "34523465"
}
],
"dimensions": {
"depth": 0,
"height": 0,
"width": 0
},
"id": "1023386",
"type": "PACKING_MATERIAL_BOXES",
"weight": 0
}
],
"quantity": 1,
"variantId": "1023386"
}
]
}
},
{
"barcode": "",
"name": "Доставка",
"num": 2,
"price": 0,
"quantity": 1,
"skuType": "SERVICE",
"variantId": "delivery",
"vatRate": "NO_VAT"
}
],
"legalEntity": {
"id": "15d72385-dadf-a591-fefe-86c65661463f",
"name": " Розничный покупатель",
"type": "COMPANY"
},
"manualDiscount": {
"appliedDiscountValue": 0,
"discountType": "FIX",
"discountValue": 0,
"isActive": false
},
"needCustomerPayment": false,
"needReserve": true,
"onlinePaymentSum": 0,
"orderType": "STANDARD",
"packingOptions": [
{
"packSpecialsToSeparatePackingPlace": false
}
],
"paymentMethodCode": "no-cod",
"paymentMethodName": "Без наложенного платежа",
"paymentMethodType": "NO_COD",
"paymentStatus": "NOT_PAID",
"status": "ORDER_INFO_NEED_CONFIRM",
"totalOrderSum": 0,
"updateTs": "2025-02-10 17:41:48.025",
"warehouseCode": "21ad85be-09a9-c4f8-72e1-4976f9d5bda6",
"warehouseFFExportError": false,
"warehouseFFExported": false,
"warehouseFFSync": false,
"warehouseName": "NEW WMS!",
"warehouseShippingOptions": {
"packingType": "MIX_PACKINGS"
}
}
Пример положительного ответа:
{
"c": "825f47b4-fd58-24ce-65e0-2f3cf116caa0",
"orderId": "5669-232434357",
"status": "ORDER_INFO_NEED_CONFIRM",
"success": true
}
В запросе информации по заказу по методу GET /api/lite/orders информация по упаковочным материалам отображается аналогично, в виде приведенных выше списков