Skip to content

Синхронизация заказов

Синхронизация заказов решает сразу несколько задач:

  1. Первичный импорт истории заказов.
  2. Импорт заказов из розницы, где нет прямого трекинга покупок.
  3. Изменение статуса заказа и его структуры.
  4. Отмена заказа.
  5. Вызов триггерной цепочки по событию "Смена статуса заказа" (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. Если в запросе есть невалидные заказы, то уведомление о них придет по электронной почте сотрудникам, которые подписаны на технические уведомления в личном кабинете.