Skip to main content

Интеграция Учетная система - Лояльность

Задание на реализацию обмена данных между Учетной системой и АВМ Loyalty

Суть задачи - организовать регулярный автоматический (без участия человека) обмен данными между учетной системой Клиента и системой лояльности АВМ Loyalty.

Передача товарных групп

Необходимо реализовать выгрузку товарных групп. Выгружать нужно в такой последовательности: сначала группы первого уровня (родительская) затем группы нижнего уровня (дочерняя), следуя иерархии групп товаров вашей системы.

При изменении / обновлении товарных групп следует придерживаться ее иерархии.

Для передачи товаров с учетной системы в Лояльность используются методы API:

POST v2/partner/products/groups - создать группу товаров

PUT v2/partner/products/groups/{group_id} – изменить группу товаров

POST v2/partner/products - создать продукт (один запрос – один продукт)

PUT v2/partner/products/{art_id} - изменить продукт (один запрос – один продукт)

POST v2/partner/batch-products - создать продукты (несколько продуктов одним запросом, рекомендованное количество товаров в одном запросе - 1000)

PUT v2/partner/batch-products - изменить продукты (несколько продуктов одним запросом, рекомендованное количество товаров в одном запросе - 1000)

GET v2/partner/products/groups – получить список всех групп товаров

GET v2/partner/products/groups/{group_id} – получить данные о конкретной группе

GET v2/partner/products – получить список всех товаров

GET v2 /partner/products/{art_id} – получить данные о конкретном товаре

Описание методов так же доступно по ссылке:

https://documenter.getpostman.com/view/10073265/TzJuAdf6

Для передачи торговых точек с учетной системы в Лояльность используются методы API:

GET v2/partner/branch – получить список всех ТТ (в активном статусе)

POST v2/partner/branch – создать ТТ (несколько магазинов одним запросом)

PUT v2/partner/branch – изменить ТТ (несколько магазинов одним запросом)

GET v2/partner/branch/{branch_id} – получить информация о конкретном ТТ

канал API:    https://api.sandbox.abmloyalty.app

ключ (токен):(будет предоставлен менеджером внедрения дополнительно)

версия: v2

тип авторизации: Basic Authentication (можно использовать поле имени пользователя как токен(ключ) доступа и пропустить пароль)

ключ:

!! доступ к тестовой базе. Потом нужно будет переключиться на продуктовую систему

Все товары/группы товаров, которые есть в учетной системе должны присутствовать в Лояльности. Передавать новые товары/группы или обновлять существующие нужно с периодичностью 1 раз в несколько часов, а также возможность синхронизировать товары принудительно (на усмотрение стороны Заказчика)

При передаче классификатора сначала передавать группы, потом подгруппы, потом товары (если товар будет передан ранее чем группа, к которой он принадлежит, то товар не запишется. вернется ошибка).

Код группы и код товара должны быть уникальными для каждой группы и для каждого товара.

Ограничения на товар (максимальный бонус к списанию, максимальный бонус к начислению):

  • каждый дочерний элемент, может иметь свое ограничение, отличимое от ограничения родительской группы.
  • ограничение дочернего элемента, может быть равно или меньше, но не больше ограничения установленного для родительской группы.
  • тип ограничения не может быть отличимый от типа ограничения родительской группы.
  • если параметры не переданы - наследуются ограничения и тип родительской группы
  • если группа корневая – ограничения записываются по умолчанию как 100%

POST v2/partner/products/groups

создать группу товаров

Название

Тип данных

Описание

Соответствует значению у Клиента

group_id

integer

Код группы

 

name

string

Наименование группы

 

parent_id

integer

Код родительской группы. Если родительской группы нет, то заполнять - 0

 

status

integer

1 - активная группа, 0 - неактивная (удаленная) группа

 

max_calculation_bonus

number

Максимальный бонус к начислению для группы товаров

 

max_calculation_bonus_unit

integer

Тип ограничения для начисления: 0 - %; 1-фиксированное значение

 

max_payment_bonus

number

Минимальный бонус к начислению для группы товаров

 

max_payment_bonus_unit

integer

Тип ограничения для списания: 0 - %; 1-фиксированное значение

 

PUT v2/partner/products/groups/{group_id}

изменить группу товаров

Параметры аналогичны запросу на создание группы. Можно передавать только те параметры, которые необходимо изменить.

POST v2/partner/products

создать продукт (один запрос – один продукт)

Название

Тип данных

Описание

Соответствует значению у Клиента

art_id

string

Артикул (код, SKU) товара

 

group_id

integer

Код родительской группы товаров

 

max_calculation_bonus

number

Максимальный бонус для начисления (ограничение начисления бонуса для данного товара)

 

max_calculation_bonus_unit

integer

Тип ограничения для начисления: 0 - %; 1-фиксированное значение

 

max_payment_bonus

number

Максимальный бонус для списания (ограничение на списание бонуса для данного товара)

 

max_payment_bonus_unit

integer

Тип ограничения для списания: 0 - %; 1-фиксированное значение

 

name

string

Наименование товара

 

price

number

Стоимость товара. Если стоимость товара часто меняется, или разниться в разных магазинах, то ее значение следует передать в запросах при предрасчете продажи и продажи (ссылка на описание запросов). По умолчанию значение: 0

 

mrp

number

Минимальная розничная цена. В зависимости от базовых настроек программы начисление и списание бонусов может быть применено только на сумму разницы между МРЦ и продажной ценой

 

status

integer

1 - активный товар, 0 - неактивный (удаленный) товар

 

properties

string

Дополнительные свойства товаров

 

barcode

string

Штрих-код товара

 

description

string

Описание товара

 

discount

number

Размер скидки, число, по умолчанию 0

 

discount_unit

integer

Тип скидки, 0-процент, 1- деньги

 

favorite_product_allowed

integer

Разрешение выбрать любимым продуктом,1 - разрешить, 0-запретить

 

group_id_client

integer

Код группы для мобильного приложения

 

img_url

string

Ссылка на изображение товара

 

PUT v2/partner/products/{art_id}

изменить продукт (один запрос – один продукт)

Параметры аналогичны запросу на создание продукта. Можно передавать только те параметры, которые необходимо изменить.

POST v2/partner/batch-products

создать продукты (создать несколько продуктов, переданных в одном запросе)

Параметры и их обязательность аналогичны запросу на создание продукта. Рекомендованное количество товаров в одном запросе - 1000.

Пример:

{

"100001":{

"group_id": 121981,

"art_id": "100001",

"name": "Макароны 400 гр.",

"status": 1,

"price": 80.29,

“mrp”: 50.00,

"max_calculation_bonus": null,

"max_calculation_bonus_unit": null,

"max_payment_bonus": null,

"max_payment_bonus_unit": null

},

"100002":{

"group_id": 121981,

"art_id": "100002",

"name": "Кетчуп острый",

"status": 1,

"price": null,

"max_calculation_bonus": null,

"max_calculation_bonus_unit": null,

"max_payment_bonus": null,

"max_payment_bonus_unit": null

}

}

PUT v2/partner/batch-products

изменить продукты (создать несколько продуктов, переданных в одном запросе)

Параметры аналогичны запросу на создание продукта. Можно передавать только те параметры, которые необходимо изменить.Рекомендованное количество товаров в одном запросе - 1000.

Для передачи торговых точек с учетной системы в Лояльность используются методы API:

GET v2/partner/branch – получить список всех ТТ (в активном статусе)

POST v2/partner/branch – создать ТТ (несколько магазинов одним запросом)

PUT v2/partner/branch – изменить ТТ (несколько магазинов одним запросом)

GET v2/partner/branch/{branch_id} - получить информация о конкретном ТТ

Все торговые точки, которые есть в сети и работают с лояльностью - должны присутствовать в Лояльности (система не сможет принять запрос от магазина, который отсутствует в базе лояльности).

POST v2/partner/branch

создать ТТ (несколько магазинов одним запросом)

Название

Тип данных

Описание

Соответствует значению у Клиента

branch_id

string

id торговой точки, уникальная в пределах сети

 

coord1

number

координаты по широте

 

coord2

number

координаты по долготе

 

address

string

адрес ТТ

 

phones

string

номер телефона ТТ

 

emails

string

Emails ТТ

 

status

string

статус ТТ: 1 - активная, 0 - неактивная

 

name

string

наименование ТТ

 

time_from

string

время начала работы ТТ по графику

 

time_to

string

время завершения работы ТТ по графику

 

Пример:

{

"06":{ //id торговой точки, уникальная в пределах сети

"branch_id": "06",

"coord1": 55.72839976498599,

"coord2": 37.67679348090883,

"address": "Москва, Волгоградский проспект, 18, Россия, 109316",

"phones": "044-006-06-06",

"emails": "mag06@gmail.com",

"status": 1,

"name": "ТТ6",

"time_from": "00:00",

"time_to": "23:59"

},

"07":{

"branch_id": "07",

"coord1": 55.71260711011073,

"coord2": 37.577362060546875,

"address": "Москва, Андреевская набережная, 1, Россия, 119334",

"phones": "044-007-07-07",

"emails": "mag07@gmail.com",

"status": 1,

"name": "ТТ7",

"time_from": "00:00",

"time_to": "23:59"

}

}

PUT v2/partner/branch

изменить ТТ (несколько магазинов одним запросом)

Параметры аналогичны запросу на создание ТТ. Можно передавать только те параметры, которые необходимо изменить.

Методы для загрузки акционной цены

Для загрузки акционных цен в лояльность, необходимо использовать следующие методы:

Метод v2/partner/products/warehouse

POST

Создает запись в таблице учета товара на складах.

Cоздает несколько записаей одним запросом (аналогично методу группового создания/изменения товаров /partner/batch-products)

Пример запроса:

{

"10.22":{ //id ТТ.id товара. Обязательный параметр

"branch_id": "10", //id ТТ. Обязательный параметр.

"art_id": "22", //id товара. Обязательный параметр.

"price": 100.00, //цена продажная. Не обязательный параметр, может принимать значение null.

"price_discount": 80.99, //цена акционная. Не обязательный параметр, может принимать значение null.

"in_stock": true //наличие остатка: true - в наличи/false нет в наличии. Не обязательный параметр. Если не передан, то false по умолчанию.

},

"10.23":{.....

}

}

Принадлежность партнеру определять по токену в запросе.

При успешном выполнении запроса возвращается ответ в статусе 201, количество созданных/не созданных записей и статус по каждой переданной записи.

Пример ответа:

{

"success": true,

"status": 201,

"data": {

"success": 3, //создано записей

"failed": 0, //не создано записей

"branch_product": {

"10.22": { //статус по конкретной записи

"status": 201,

"message": "Ok"

},

"10.23": {

"status": 201,

"message": "Ok"

},

"10.24": {

"status": 201,

"message": "Ok"

}

}

}

}

Если запрос выполнен частично - возвращается ответ в статусе 422, количество созданных/не созданных записей и статус по каждой переданной записи.

Пример ответа:

{

"success": false,

"status": 422,

"data": {

"success": 0,

"failed": 3,

"branch_product": {

"10.23": {

"status": 422,

"message": "Invalid product",

"data": {

"art_id": "Error. Acrticle of product has to be unique"

}

},

"10.24": {

"status": 422,

"message": "Invalid product",

"data": {

"art_id": "Error. Acrticle of product has to be unique"

}

},

"10.26": {

"status": 201,

"message": "Ok"

}

}

}

}

Метод

PUT /partner/products/warehouse

Изменяет запись в таблице учета товара на складах.

Изменяет несколько записаей одним запросом.

Пример запроса:

{

"10.22":{ //id ТТ.id товара

"branch_id": "10", //id ТТ

"art_id": "22", //id товара

"price": 100.00, //цена продажная, может принимать значение null.

"price_discount": 80.99, //цена акционная, может принимать значение null.

"in_stock": true //наличие остатка: true - в наличи/false нет в наличии

},

"10.23":{.....

}

}

Можно передавать только те параметры, которые подлежат изменению.

При успешном выполнении запроса возвращается ответ в статусе 201, количество измененных/не измененных записей и статус по каждой переданной записи.

Если запрос выполнен частично - возвращается ответ в статусе 422, количество измененных/не измененных записей и статус по каждой переданной записи.

Метод

GET /partner/products/warehouse/{branch_id}

Возвращает инфо о товарах на указанном складе (магазине).

  • {branch_id} - id магазина

Пример ответа:

{

"success": true,

"status": 200,

"data": {

"items": [

{

"branch_id": "10", //id ТТ

"art_id": "22", //id товара

"price": 100.00, //цена продажная

"price_discount": 80.99, //цена акционная

"in_stock": true //наличие остатка: true - в наличи/false нет в наличии

}

]

Метод

GET /partner/products/warehouse/{branch_id}/{art_id}

Возвращает инфо о конкретном товаре на указанном складе (магазине).

  • {branch_id} - id магазина
  • {art_id} - id товара

Пример успешного ответа и проверки - аналогичны методу /partner/products/warehouse/{branch_id}

Для загрузки товаров в Мобильное приложение необходимо выполнить несколько доработок с вашей стороны:

1. Реализовать передачу каталога групп и подгрупп товаров, который используется в Интернет-магазине. Используя метод POST /partner/products/groups-client

POST/partner/products/groups-client - Партнер определяется по токену авторизации

POST - создает новую запись

BODY:

parent_id - id родительской группы. Обязательно к заполнению. Для группы первого уровня принимать 0.

name - наименование группы. Обязательно к заполнению.

status - статус группы: 1-активный; 0-неактивный. Не обязательно к заполнению. Если не передан, то по умолчанию присваивать активный статус.

group_id - внешний id группы (id группы у партнера). Обязательно к заполнению.

img_url - вэб-ссылка на изображение группы товаров. Не обязательно к заполнению.

Response:

parent_id

name

status

updated_at

created_at

group_id

img_url

GET - отдает список групп партнера

Response:

parent_id

name

status

updated_at

created_at

group_id

img_url

PUT /partner/products/groups-client/{group_id} - новый метод.

Партнер определяется по токену авторизации.

{group_id} - id группы, по которой выполняется запрос.

PUT - изменяет запись

BODY:

parent_id

name

status

group_id

img_url

В BODY указываются только те параметры, которые подлежат изменению.

Response:

parent_id

name

status

updated_at

created_at

group_id

img_url

При переводе группы в неактивный статус - все ее подгруппы/товары должны быть в статусе неактивный.

GET - отдает информацию по конкретной записи

Response:

parent_id

name

status

updated_at

created_at

group_id

img_url

2. Реализовать выгрузку описания, штрих-кодов и изображений товаров используя методы:

POST v2/partner/products - создать продукт (один запрос – один продукт)

PUT v2/partner/products/{art_id} - изменить продукт (один запрос – один продукт)

POST v2/partner/batch-products - создать продукты (несколько продуктов одним запросом, рекомендованное количество товаров в одном запросе - 1000)

PUT v2/partner/batch-products - изменить продукты (несколько продуктов одним запросом, рекомендованное количество товаров в одном запросе - 1000)

Описание параметров в BODY которые, вам понадоблятся :

· barcode - Штрих-код товара, string

· description - описание товара, string

· discount - Размер скидки, число, по умолчанию 0

· discount_unit - Тип скидки, 0-процент, 1- деньги

· favorite_product_allowed- Разрешение выбрать любимым продуктом,1 - разрешить, 0-запретить

· group_id_client - Код группы для мобильного приложения, integer

· img_url - Ссылка на изображение товара, string