Appearance
Синхронизация заказов
Синхронизация заказов решает сразу несколько задач:
- Первичный импорт истории заказов.
- Импорт заказов из розницы, где нет прямого трекинга покупок.
- Изменение статуса заказа и его структуры.
- Отмена заказа.
- Вызов триггерной цепочки по событию "Смена статуса заказа" (
order_status).
Для всех этих операций используется один и тот же API endpoint.
Первичный импорт и синхронизация заказов
Данный метод используется как для первичного создания заказа в CDP, так и обновления уже существующего. Просто отправляйте информацию о заказе с тем же идентификатором и заказ будет обновлен. Плюс в интерфейсе CDP будет сохраняться история изменения состава заказа.
Рекомендуется отправлять заказы партиями не более 5000 штук в одном запросе.
В случае невалидных данных будет отправлено уведомление на email, отмеченный для технических уведомлений в списке сотрудников в личном кабинете.
POST https://api.rees46.ru/sync/ordersПараметры
Структура тела запроса
| Параметр | Обязателен? | Описание |
|---|---|---|
| shop_id | Да | API-ключ |
| shop_secret | Да | Секретный API-ключ |
| orders | Да | Массив заказов |
Структура объекта заказа
| Параметр | Обязателен? | Описание |
|---|---|---|
| email* | Да | Email клиента |
| phone* | Да | Телефон клиента |
| external_id* | Да | Внешний идентификатор клиента |
| loyalty_id* | Да | Идентификатор внешней программы лояльности клиента |
| telegram_id* | Да | Telegram ID клиента |
| id | Да | Номер заказа |
| status | Да | Статус заказа из таблицы соответствия |
| channel | Да | Канал заказа. Строка латиницей. Например: website |
| date | Да | Дата заказа в формате UNIX timestamp |
| value | Да | Стоимость заказа (объект) |
| value.total | Да | Полная стоимость заказа (число) |
| value.products | Нет | Стоимость товаров в заказе без учета доставки и прочих услуг (число) |
| items | Да | Список товаров в заказе (массив) |
| offline | Нет | Флаг "оффлайн" заказа, если заказ из розницы. Укажите true, если заказ из розницы или просто не указывайте, если заказ онлайн |
| location_id | Нет | Локация из товарного фида, в которой был создан заказ. Если локация заказа и локация клиента отличаются, то клиенту будет установлено это значение локации |
| promocode | Нет | Промокод, примененный к заказу |
| delivery_type | Нет | Тип доставки (строка) |
| delivery_address | Нет | Адрес доставки (строка) |
| delivery_date | Нет | Дата доставки (строка) |
| delivery_time | Нет | Время доставки (строка) |
| payment_type | Нет | Способ оплаты (строка) |
| tax_free | Нет | Булевый флаг, что заказ с Tax Free |
| bank_issuer | Нет | Банк платежной карты (строка) |
| bank_pos_processor | Нет | Банк экваринга (строка) |
| bank_loyalty_program | Нет | Полная стоимость заказа в случае банковской рассрочки/кредита (число) |
| payment_card_provider | Нет | Название поставщика банковской карты (строка) |
| gift_package | Нет | Флаг наличия подарочной упаковки (булевый) |
| comment | Нет | Комментарий к заказу (текст, не более 500 символов) |
| payment_structure | Нет | Структура цены заказа |
| payment_structure.cash | Нет | Сколько оплачено наличными (число) |
| payment_structure.bonuses | Нет | Сколько оплачено бонусами (число) |
| payment_structure.delivery | Нет | Стоимость доставки (число) |
| payment_structure.discount | Нет | Суммарная скидка, кроме бонусов (число) |
| custom | Нет | Объект с кастомными свойствами заказа (ключ – код свойства из настроек CDP) |
Анонимные заказы
Параметры, отмеченные [*] - обязателен хотя бы один из них. Анонимные заказы без идентификатора клиента загружать не нужно, т.к. их невозможно привязать к клиенту.
Структура объекта "товар" в заказе
| Параметр | Обязателен? | Описание |
|---|---|---|
| id | Да | Артикул товара из товарного фида |
| price | Да | Цена одной единицы товара |
| quantity | Да | Количество единиц товара. Для дробных единиц (например, весовой товар), просто указывайте 1 и конечную цену этого товара |
| status | Нет | Статус товара в заказе. Один из: created, invoiced, shipped, delivered, cancelled, refunded. Статусы cancelled и refunded приведут к тому, что товар будет удален из созданного ранее заказа. |
| original_price | Нет | Исходная цена одного товара до скидок |
| discount_product | Нет | Размер скидки по дисконтной программе лояльности на один товар |
| discount_coupon | Нет | Размер скидки по купону на один товар |
| discount_bonuses | Нет | Размер скидки бонусами на один товар |
| delivery_company | Нет | Название службы доставки, доставляющей этот товар |
| barcode | Нет | Штрих-код товара |
| line_id | Нет | Позиция товара в заказе (строка) |
| cancel_reason | Нет | Причина возврата |
Важно
В списке не может быть двух строк с одинаковым артикулом. Позиции в корзине с одинаковым артикулом необходимо объединить в одну строку.
Запрос
Запрос:
shell
curl -i -X POST -H "Content-Type: application/json" --data-binary "@data.json" https://api.rees46.ru/sync/ordersТело запроса:
json
{
"shop_id": "DvLWN2ZTMZ",
"shop_secret": "EIxTuot8sj",
"orders": [
{
"id": "yKsvZbWpCL",
"status": "Delivered",
"channel": "website",
"date": 1602338740,
"offline": false,
"email": "user@example.com",
"phone": "+15554443322",
"custom": {
"custom_key_1": "custom_value_1",
"custom_key_2": "custom_value_2",
"custom_key_3": "custom_value_3",
"custom_key_N": "custom_value_N"
},
"external_id": "777_777",
"telegram_id": "123456",
"loyalty_id": "000-33-444-111",
"location_id": "7701123",
"promocode": "vxawxSi9Uy",
"delivery_type": "courier",
"delivery_address": "Rouse st, 13",
"delivery_date": "2021-12-21",
"delivery_time": "15:00",
"tax_free": true,
"bank_issuer": "Sberbank",
"bank_pos_processor": "apex",
"bank_loyalty_program": "miles&smiles",
"bank_total_installment": 4,
"payment_card_provider": "mastercard",
"gift_package":true,
"value": {
"total": 200.13,
"products": 190
},
"payment_structure": {
"cash": 190,
"bonuses": 15,
"delivery": 20,
"discount": 24.87
},
"items": [
{
"id": "ITEM-ID-1",
"price": 205,
"quantity": 1,
"status": "cancelled",
"original_price": 230,
"discount_product": 30,
"discount_coupon": 10,
"discount_bonuses": 20,
"delivery_company": "ups",
"barcode": "195204003541",
"line_id": "195204003541-22323443-123434",
"cancel_reason": "over size"
}
]
}
]
}Ответ
Пример ответа сервера:
json
{
"status": "success"
}В случае ошибки ответ будет в формате:
json
{
"status": "error",
"payload": {
"message": "Shop not found"
}
}Важно
API не валидирует данные заказов синхронно. Метод принимает объект с заказами и отправляет в очередь для обработки. В ответ отдает 200 OK. Если в запросе есть невалидные заказы, то уведомление о них придет по электронной почте сотрудникам, которые подписаны на технические уведомления в личном кабинете.