Интеграция website→ 1С → MAXMA





Область применения:

Данное техническое задание описывает общую архитектуру интеграции между сайтом , CRM-системами и программой лояльности.

Ключевые характеристики системы:

Архитектурная модель:Система реализует распределенную Event-Driven архитектуру, где CRM-система выступает в качестве модератора бизнес-процессов, координируя взаимодействие между точкой продажи (InSales) и сервисом лояльности (MAXMA).
Роль CRM-системы:CRM выполняет функции центра управления жизненным циклом заказа, включая:
  • Модерацию и валидацию заказов
  • Управление статусами и workflow
  • Координацию бонусных операций
  • Синхронизацию данных между системами
Универсальность решения:Представленная архитектура является платформенно-независимой и может быть реализована с использованием различных CRM-систем, включая:
  •  (любые конфигурации с модулем заказов)
  • RetailCRM
  • AMOCrm (с активированным e-commerce модулем)
  • Битрикс24
  • Другие системы с REST API и возможностями workflow
Бизнес-контекст:Процесс предполагает человеко-ориентированную модерацию заказов, где менеджер в CRM-системе принимает решения по:
  • Подтверждению/отклонению заказов
  • Корректировке состава заказа
  • Управлению бонусными операциями
  • Обработке возвратов

1. Общие положения

Цель: Синхронизация данных о заказах между InSales, 1С и платформой лояльности MAXMA.Участники системы:
  • InSales: CMS интернет-магазина.
  • : Система управления заказами и складом.
  • MAXMA: SaaS-платформа для управления программой лояльности.
Основные требования:
  • Все операции в MAXMA используют уникальный индификатор orderId, полученный при создании заказа.
  • ID товаров в MAXMA передаются в поле externalId.
  • Данные в 1С передаются с учётом финальных скидок после применения баллов лояльности.


2. Процесс оформления заказа в InSales

    Клиент оформляет заказ в InSales.
    InSales отправляет в 1С данные заказа с рассчитанными скидками и orderId.
    Одновременно InSales передаёт в MAXMA запрос:
  • Метод: POST /v2/set-order
  • JSON:
{
"calculationQuery": {
"applyBonuses": 0,
"client": {
"phoneNumber": "+79000000000"
},
"collectBonuses": "auto",
"discountRoundStep": 0,
"executedAt": "2025-01-14T16:36:04+03:00",
"rows": [
{
"autoDiscount": 0,
"id": "266233",
"manualDiscount": 0,
"noApplyBonuses": false,
"noCollectBonuses": false,
"noOffer": false,
"noPromocode": false,
"product": {
"blackPrice": 2790,
"externalId": "131135",
"minPrice": 0,
"redPrice": 3290,
"sku": "3bb4fce9-18bc-11ed-9ec2-000c292cefe1",
"title": "Название товара"
},
"qty": 1
}
],
"shop": {
"code": "site",
"name": "site"
}
},
"orderId": "85333"
}


3. Действия менеджера в 1С

3.1. Изменение состава заказа

Если менеджер изменяет заказ (добавляет/удаляет товары, списывает баллы):
    1С выполняет перерасчет данных.
    1C отправляет в MAXMA запрос:
  • Метод: POST /v2/calculate-purchase
  • JSON:
{
"calculationQuery": {
"applyBonuses": 100, // количество списываемых бонусов
"client": {
"phoneNumber": "+79000000000"
},
"collectBonuses": "auto",
"discountRoundStep": 0,
"rows": [
{
"autoDiscount": 0,
"id": "266233",
"manualDiscount": 0,
"noApplyBonuses": false,
"noCollectBonuses": false,
"noOffer": false,
"noPromocode": false,
"product": {
"blackPrice": 2790,
"externalId": "131135",
"minPrice": 0,
"redPrice": 3290,
"sku": "3bb4fce9-18bc-11ed-9ec2-000c292cefe1",
"title": "Название товара"
},
"qty": 1
}
],
"shop": {
"code": "site",
"name": "site"
}
}
}
    После успешного ответа от MAXMA 1С отправляет обновлённый заказ:
  • Метод: POST /v2/set-order
  • Данные: Аналогично п.2, но с обновлёнными позициями и тем же orderId.

3.2. Отмена заказа

  • Условие: Только до подтверждения заказа.
  • Метод: POST /cancel-order
  • JSON:
{
"orderId": "85333",
"executedAt": "2025-01-14T16:36:04+03:00"
}

3.3. Подтверждение выкупа

  • Метод: POST /confirm-order
  • JSON:
{
"orderId": "85333",
"executedAt": "2025-01-14T16:36:04+03:00"
}

3.4. Возврат заказа

  • Метод: POST /apply-return
  • JSON:
{
"transaction": {
"id": "l23093295329", // уникальный ID возврата
"executedAt": "2025-01-14T16:36:04+03:00",
"purchaseId": "85333", // оригинальный orderId
"refundAmount": 3290, // сумма возврата
"shopCode": "site",
"shopName": "site",
"cashier": "Иванов Иван Иванович",
"cashierId": "A0000275",
"items": [
{
"sku": "3bb4fce9-18bc-11ed-9ec2-000c292cefe1",
"itemCount": 1
}
]
}
}


4. Требования к данным

4.1. Идентификаторы

  • orderId: Уникальный номер заказа, неизменный на всех этапах.
  • externalId: ID товара в MAXMA. Должен совпадать с ID в InSales/1C.
  • sku: Артикул товара в системе магазина.

4.2. Обязательные поля

  • client.phoneNumber: Телефон клиента для идентификации в программе лояльности.
  • executedAt: Дата и время операции в формате ISO 8601 с часовым поясом.
  • shop.code/shop.name: Код и название магазина.

4.3. Цены

  • blackPrice: Цена без скидки.
  • redPrice: Цена с переоценкой, всегда идет в приоритете чем blackPrice.




5. Важно

  • При изменении заказа обязательно передавать тот же orderId.
  • Поле applyBonuses в calculate-purchase указывает количество списываемых бонусов.
  • Для возвратов генерировать уникальный transaction.id.
  • Все временные метки должны быть актуальными и соответствовать времени операции.
  • Если происходит перерасчет, важно что бы 1С отправляла исходные суммы товаров без скидок.
Примечание: Перед реализацией проверить тестовое окружение MAXMA для валидации сценариев.