Skip to main content

1.3.Интеграция Интернет магазин Лояльность

Задание на реализацию обмена данных между Интернет-магазином и АВМ Loyalty

Содержание

Общая информация: 3

Авторизация пользователя 5

Продажа 9

Запросить предрасчет по чеку 9

Запрос на подтверждение продажи 14

Реферальная программа 15

Метод на получение истории начисления, списания бонусов 22

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

  1. Общая информация:

В систему АВМ Loyalty передаются все транзакции, как идентифицированные, так и неидентифицированные.

Обмен данными между интернет-магазином и системой АВМ Loyalty должен быть реализован:

  • Online - взаимодействие интернет-магазина и системы АВМ Loyalty происходит в режиме реального времен)

Данные передаются методами RESTful API по протоколу https.

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

POST /v2/client/check-phone - метод проверяет есть ли этот номер телефона уже в программе лояльности;

POST /partner/operation/user/registration - создает новый счет в системе, заполняет анкету нового участника программы;

GET     v2.1/client/oauth2/authorize  - запрос на проверку данных;

POST   v2.1/client/oauth2/authorize  - для получения кода авторизации;

POST   v2.1/client/oauth2/token - для получения токена доступа;

POST   v2.1/client/oauth2/revoke - для получения обновленного "access_token" и "refresh_token" ;

POST /partner/operation/pre-check - предрасчёт по чеку;

POST /partner/operation/check-confirm - запрос подтверждения продажи;

POST /partner/referral/link- для создания связи реферал - реферер;

Операции продажи:

Порядок выполнения операций продажи:

Карт-юзер-инф

  1. Получить ответ предрасчета POST /v2/partner/operation/pre-check.
  2. Вывести сообщение сколько можно списать бонусов за этот чек, если можно списать бонусы - значение из параметра "receipt_bonus_amount": С вопросом списать ли бонусы (Ответ Да, и Ответ Нет).
  3. Если Ответ Да. Вывести поле для ввода количества к списанию, при этом отображать максимальное допустимое количество к списанию. Если пользователь ввел сумму бонусов больше, чем допустимая - выдавать соответствующее сообщение и не отправлять данные. Добавить кнопку после ввода - Отправить (выполнить второй предрасчет POST /v2/partner/operation/pre-check) и Отмена - не списывать бонусы (вывести сумму к оплате на чек и количество начисленных бонусов попозиционно и общее количество на чек) При нажатии отправить вывести сумму к оплате на чек и количество начисленных и списанных бонусов попозиционно и общее количество на чек).
  4. Если Ответ Нет вывести сумму к оплате на чек и количество начисленных бонусов попозиционно и общее количество.
  5. После введения суммы к оплате - подтверждение операции продажи POST    /v2/partner/operation/check-confirm

При любых изменениях в продажи - посылать запрос POST /v2/partner/operation/pre-check

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

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

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

ключ (токен):

версия: v2

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

ключ:

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

  1. Проверка номера телефона участника

POST /v2/client/check-phone – метод проверяет есть ли этот номер телефона уже в программе лояльности, если есть, то в параметр is_exist в ответ приходит true, если нет-false.

Название

Тип данных

Описание

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

phone

string

Номер мобильного телефона в формате 380#########

2.1. Запрос списка дополнительных полей

GET /system/profile-fields- возвращает список дополнительных полей анкеты и их обязательность к заполнению. 

2.2. Запрос списка регионов

GET /v2/client/geo/{country}/regions - возвращает все регионы и их ID

{country} - ID страны

2.3. Запрос списка городов

GET /v2/client/geo/{country}/{city}/search-city - поиск по части названия города, возвращает города (регионы, страны) заданной country, max = 10шт

{country} - ID страны

{city} - часть названия города

{country} - ID страны прописать в запросе по умолчанию и не выводить в интерфейс пользователя для выбора.

Например, ID страны Казахстан = 81

  1. Запрос на регистрацию нового участника ПЛ (без верификации по смс)

POST /partner/operation/user/registration

  • Создает новый счет в системе, заполняет анкету нового участника программы.
  • В параметрах необходимо передать анкетные данные клиента.
    Обязательными параметрами являются те поля анкеты, которые установлены как обязательны к заполнению (в данном примере 5 параметров).
  • Метод возвращает телефон и guid нового, созданного в системе участника программы лояльности.

Название

Тип данных

Описание

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

phone

string

Номер мобильного телефона в формате 380#########

first_name

integer

Имя участника ПЛ

middle_name

string

Отчество участника ПЛ

last_name

string

Фамилия участника ПЛ

birth_day

string

Дата рождения участника ПЛ в формате 1989-03-17

id_region

integer

Глобальный справочник региона проживания

id_city

integer

Глобальный справочник города проживания, связан с регионом.

gender

integer

Пол:

1 - мужчина

2- женщина

sms_notify

integer

Подписаться на смс рассылку:

1-Согласен

0-Не согласен

email_notify

integer

Подписаться на email рассылку:

1-Согласен

0-Не согласен

email

string

Электронная почта в формате abm@abmcloud.com

address

string

Адрес участника ПЛ

channel_reg

integer

Канал регистрации. Для интернет магазина: 9.

Пример ответа, при успешном запросе:

{

"success": true,

"status": 201,

"data": {

"phone": "380931000013",

"guid": "68c147a2-edbd-4df5-a8b2-dadfb3a70ebc",

}

}

  1. Авторизация пользователя

https://documenter.getpostman.com/view/2804494/SzfCUkyK?version=latest

OAuth 2.0 — протокол авторизации, позволяющий выдать одному сервису (Например, интернет- магазину) права на доступ к ресурсам пользователя на другом сервисе (в Личном кабинете). Протокол избавляет от необходимости доверять приложению логин и пароль, а также позволяет выдавать ограниченный набор прав.

Схема процесса: Приложение (Интернет- магазин), Сервис (Личный кабинет)

  1. С веб-старицы клиента (интернет - магазина) происходит редирект на страницу авторизации нашего ЛК: https://{base_url}/authorize?client_id={client_id}&redirect_uri={redirect_uri} где {base_url} - базовий url ЛК, {client_id} - id клиента, сгенерированный при создании конфигурации в CRM, {redirect_uri} - uri сервиса, на который будет выполняться редирект с добавлением в GET-параметры временного токена.(данные предоставляет АБМ)
  2. На странице авторизации у пользователя запрашивается подтверждение выдачи прав.(Страница личного кабинета с формой на соглашение предоставить свои данные - в случае, если авторизация в ЛК совершена, если не - форма для авторизации, потом соглашение).
  3. В случае согласия пользователя, браузер редиректится на URL, указанный при открытии страницы авторизации, с добавлением в GET-параметры специального ключа — authorization code.
  4. Сервер приложения выполняет POST-запрос с полученным authorization code в качестве параметра. В результате этого запроса возвращается access token.

Для работы с OAuth используются методы:

POST   v2.1/client/oauth2/token 

Служит для получения "access_token" - используется как временный токен авторизации, и "refresh_token" - токен для повторного запроса "access_token", если срок действия последнего истек. Срок действия "access_token" - 3600 сек. Информация о сроке действия возвращается в параметре "expires_in".

Название

Тип данных

Описание

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

client_id

string

id клиента, сгенерированный при создании конфигурации в CRM

client_secret

string

ключ клиента (сервиса), сгенерированный при создании конфигурации в CRM

code

string

временный код авторизаци, отправленный в параметре "code" GET-запроса на "redirect_uri"

redirect_uri

string

uri сервиса, на который будет выполняться редирект с добавлением в GET-параметры временного токена. Задается при создании конфигурации в CRM

Ответ: {

"success": true,

"status": 201,

"data": {

"token_type": "Bearer",

"expires_in": 3600,

"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjJhYzUwOTI1ZjE5YTBhYTQxNDZmYTRhYzhiMDQ5OGEwZjgyZDVlMzJmZjE3ODM3YmE3ZDkxM2RhM2JlNTRiYzhhZWVjZGZiMDQ0YjE4MzJiIn0.eyJhdWQiOiJFWS1RLVpMdUhRV0Fwakx6bDZMcE14NS1pYlBuZDMiLCJqdGkiOiIyYWM1MDkyNWYxOWEwYWE0MTQ2ZmE0YWM4YjA0OThhMGY4MmQ1ZTMyZmYxNzgzN2JhN2Q5MTNkYTNiZTU0YmM4YWVlY2RmYjA0NGIxODMyYiIsImlhdCI6MTU4ODAwODIwNywibmJmIjoxNTg4MDA4MjA3LCJleHAiOjE1ODgwMTE4MDcsInN1YiI6Ijc1NiIsInNjb3BlcyI6W119.dVG7iE3v8ZnxqS3TM88koQjCr7xTun1Nj4XAH1vSlOhgccYVjK8s7YRvEVlo_ti1JrNg1nMSUauX8tqRuCjnRDrCA0fCteJdPc0s3ZrEKjoy8XYNqbxtiurOJAz3bICUdF1s-hJbkV5yWYZleJZ2SfPDR3mSq1FPnWawCCeOpdzo0P3VFI3JiLBoRbSMLRS4k8AUhOIy5AGyITG8dY0mwS-EYmmmXkJG-2eO-KZcfvJWmCCC8NPhELVcyj1-gmmFOf_-_yWHW95ZHhQV8PVArNtvQPvL_JLeYLPK93DGXum73qB-zmCSbRIC4GpjAzkCW17QOkUTo_RDU1jB9QQFLQ",

"refresh_token": "def5020091793bb299b6c802a5ef5714aaeda1637d38ad33cbfbc6130cae09ef043fe7c7bbfa1315cb039f0abb4cc989d1112097be33bd1485512ded277e507867cdc1d8b360a9c4a933afaddf810fba2cf1e5bddace9e5e9fbf48e888527e1c8383f52e23d90031fc8b4cf80e6675e49000939df24562ce17541ff898eb1b4e7567b5d29a04d1b20c538f3b09a6fe340cd39589274bf2d5ba7a40af9c9dff0f11aa063fdc168aab0ab263a6812d99ec07a2d202ed7c9fd47f74db862c36de2da60f7d3077262a16817a292ba3fc60afdfd49ed001591411a5de8c49000fa308c75e28b2d19e0c65a4eb35774841998876dd1293163e5c380ad3b325bd67bcc461a6da3c88fdb8c0130ecb1ac94303a4254fa36704827bc89e39e7f801691301c6cfd3212458509a79b2d59c02aa575dac88c4fcce16f080caf33681cecf08c1c4ef26e86bc495e4da7bc89ae501385fe5f071d5b4395be4385f9d5ef5176ae81b045356402a1ef2c1d83f7885924855105ef0b99dffa553a666b22332572666"

}

POST   v2.1/client/oauth2/revoke 

Служит для получения обновленного "access_token" и "refresh_token" по "refresh_token". Срок действия "refresh_token" - 1 мес.

Название

Тип данных

Описание

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

client_id

string

id клиента, сгенерированный при создании конфигурации в CRM

client_secret

string

ключ клиента (сервиса), сгенерированный при создании конфигурации в CRM

refresh_token

string

временный код авторизаци, отправленный в параметре "code" GET-запроса на "redirect_uri"

redirect_uri

string

uri сервиса, на который будет выполняться редирект с добавлением в GET-параметры временного токена. Задается при создании конфигурации в CRM

Ответ: {

"success": true,

"status": 201,

"data": {

"token_type": "Bearer",

"expires_in": 3600,

"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImFiN2U1OWUzMzdlZWVhMjcxY2Q1MGU2ZGRlNTUwNjRjZGNkMzkwY2Y0MmQzYzJiN2Q5ODdiZDlhYWMzYjIxMzM1MGVlN2U2NzMwYzY2MzE5In0.eyJhdWQiOiJFWS1RLVpMdUhRV0Fwakx6bDZMcE14NS1pYlBuZDMiLCJqdGkiOiJhYjdlNTllMzM3ZWVlYTI3MWNkNTBlNmRkZTU1MDY0Y2RjZDM5MGNmNDJkM2MyYjdkOTg3YmQ5YWFjM2IyMTMzNTBlZTdlNjczMGM2NjMxOSIsImlhdCI6MTU4ODAwOTg1NywibmJmIjoxNTg4MDA5ODU3LCJleHAiOjE1ODgwMTM0NTcsInN1YiI6Ijc1NiIsInNjb3BlcyI6W119.DfA7la0WtVTj5QxVgIbPKMjc6LUQLb40T3pM4UtyDeYy0cTmcIv8qYMb_t1Yu8SRNgQwovOO8Y95eUnisM3l7h2sup1Abg78QYR2XaX3y9OiW388lJ2bTPgDTncgR7IliAx49jdDIgju5xRcRfukcJRkqd4ewrW3707tgteHMkuN6XWAafrSI0GZKkRgT9vFT4AvSIklo2tc8s8NGXBP-aIyvyYZNWSjaF6o52OE0ThYaKkUeMvPbbmITO2VsEOS3ko7BQye-5tQn2QhomU-CaSS96B7fBdFb--zgzGCgBgMB1ABi46MOAz_5sr9jGj2iZN7VnpvWZZQlzIXziSnnw",

"refresh_token": "def50200ef5c8a317304e039d3da86ed4aa375b90fe8314343218dbb4018cea97ebf9a3da7cb9b0467e201e25f6db9d3cb7c174e7f9b4a5b0b4d368787fa6998484a5fc0d8388c0aae18de6e21928ef5fc947f64c6be4bf0c6ab5890bf54eabb0eb4a9a820405f773ae2152b374b1131c84bacffbd63e5b04fef47c0e2f925281e9e600b872dcc15e50e2a51320a04ad3ed0a1ca9bdbd09d990bed18c89355751ef879e4fc851229c58e6c39557f0cba1124b59508d7d3ea911a6da6934335016300f2fee308c0cbf524a22060776e72ba7820316b323ae42b711643eb6a3382e9cf688e988cb9e95e796c84e151b3274f20a11727064041c6fd7541da441bc17a576fff0c48e996ae703939c097793da76a1e3e94e81f33c52cb7f69530e3ba7b43672f5046c088c5c88ccbf25f5f9b5b9b6b6d7eb97efaf7e0bb8246212ad93623c2e7288e7e12f7d7938005423dafaaac72099eed05aca120fe0aa962a9de05b3170e1ebcfb65696bd13dde40d7e66a42bcff24ff02462de8e35694dd9059"

}

Доступные методы при авторизации по "access_token":

Важно! При работе с запросами по "access_token"  Использовать тип авторизации "Bearer"

  • GET   v2/client/partners 
  • GET   v2/client/card/card-info
  • GET   v2/client/accounts
  • GET   v2/client/partner/news-all
  • GET   v2/client/partner/news-all/{id}
  • GET   v2/client/partner/{guid}/news
  • GET   v2/client/partner/{guid}/news/{id}
  • GET  v2/client/profile
  • GET   v2/client/client-history
  • GET   v2/client/card/card-info
  • GET   v2/client/partner/actions
  • GET   v2/client/partner/actions/{id}
  1. Продажа
    1. Запросить предрасчет по чеку

POST /v2/partner/operation/pre-check

Если пользователь - участник программы лояльности необходимо заполнить значение в поле card или phone. Если пользователь не участник программы лояльности, данные card или phone не передавать.

Данные полученные в pre-check нужно кешировать для дальнейшей печать чека и отправки данных о продажах в учетную систему клиента.

Данные параметра meta в receipt_details соответствуют значением товара описание деталей  клиент .

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

В запросе необходимо заполнять существующий параметр "coupon"

Перечень параметров в запросе:

Название

Тип данных

Описание

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

branch_id

string

Код (id) торговой точки

Предварительно должен быть создан в CRM Лояльности

card

integer

Номер карты участника ПЛ

coupon

string

Код купона, если купонов несколько, их необходимо записать через запятую

guid

string

Guid участника программы лояльности

offline

boolean

Определяет режим проведения операции : 1 - офлайн, 0-онлайн

Списать бонусы в режиме офлайн невозможно

operator_id

string

Код кассира

Предварительно должен быть создан в CRM Лояльности

phone

string

Номер телефона участника ПЛ

receipt_bonus_amount

number

Количество бонусов за чек. Этот параметр используется только в том случае, если партнер сам рассчитывает бонус. Соответствующая настройка должна быть применена в CRM.

Не передавать

receipt_currency

string

Валюта бонусов

Передавать значение BON

receipt_datetime

Integer (тип: 1470825537)

Дата и время покупки ( формат unix time)

receipt_description

string

Описание типа покупки

Звичайний продаж 

receipt_details

string

Детали покупки (полный список товаров и их свойства в квитанции) в виде массива JSON. «position» - позиция в чеке. "prod_cat" - код группы товаров. «prod_code» - код SKU. «prod_name» - полное название продукта. «prod_price» - цена товара. "prod_amount" - количество товара. «prod_sum» - общая стоимость продукта (обычно равна prod_amount * prod_price). bonus_restrict - исключить позицию из расчета бонуса, не требуется

"meta":"{\"параметр1\":\"значение\", \"параметр2\":\"значение\"}"

session_id

integer

Код сессии

terminal_id

string

Код кассы

variables

string

Доп. св-тва товара в виде массива JSON Пример: {"key1":1, "key2":1}

Пример ответа, при успешном запросе (значение в параметре "pre_check_id" необходимо сохранить, для передачи в операции подтверждения продажи )

{

"success": true,

"status": 201,

"data": {

"pre_check": {

"pre_check_id": "1548149007.104900.03",// id который необходимо будет подтвердить методом check-confirm

"payment": {

"money": 899.03, // "чистая"сумма к оплате (сколько денег необходимо заплатить пользователю, за вычетом дисконтных и бонусных скидок

"bonus_redeemed": 1, // сколько бонусов использовано на оплату покупки

"discount": 0// размер скидки в деньгах

},

"currency": "BON",// валюта начисления бонусов

"coupon": [

{

"code": "3863NUM6",

"success": false,

"message": "Coupon configuration is not active"

},

{

"code": "6556PRE",//номер купона

"success": true,

"message": "",

"reward_type": "1"

}

], // купон использованный с этим чеком

"branch_id": "001", // id торговой точки

"terminal_id": "terminal_1",// id кассы

"operator_id": "operator_1",// id кассыра

"session_id": null, // id сессии

"receipt_amount": 900.03, // полная сумма чека

"payment_bonus": 63.86, // всего бонусов начислено по чеку

"base_bonus": 63.86, //размер базового бонуса (кэшбэк)

"receipt_description": "Precheck test",// описание чека

"birthday_bonus": 0, // бонус в день рождения

"userStatusFixBonus": 0, // бонус за статус (только фиксированная сумма вознаграждения, не %)

"receipt_details": [

{

"position": 1, // номер позиции в чеке

"prod_cat": "20316",// категория продукта (если товара нет в CRM, то возвращается как "0")

"prod_code": "13997",// sku продукта

"prod_name": "КОНФ ВЕСОВЫЕ АССОРТИ",// название продукта (если товара нет в CRM, то возвращается как "no name product")

"prod_price": "100.01",// цена продукта

"prod_amount": "3",// количество продукта(шт.)

"prod_sum": 300.03, // общая стоимость по позиции продукта

"bonus_restrict": "ok",

"discount_limit": 300.03, // максимально возможная скидка на позицию

"discount": 0, // размер примененной скидки на позицию

"parameters": [],// дополнительные параметры позиции, установленные в настройках товаров(цена, мрц, ограничения по начислению и списанию бонусов)

"discount_success": [],// информация по успешно примененным дисконтным акциям

"discount_bonus": 0, // размер скидки предоставленный бонусами в деньгах

"bonus": 0, // количество бонусов начисленных на позицию

"bonus_success": []// подробная информация по бонусным начислениям на позицию

},

{

"position": 2,

"prod_cat": "20316",

"prod_code": "86163",

"prod_name": "Tekila Patron silver 0.5",

"prod_price": "100",

"prod_amount": "2",

"prod_sum": 200,

"discount_limit": 0,

"discount": 0,

"parameters": {

"price": 100,

"mrp": null,

"discount": 0,

"max_calculation_bonus": 4,

"max_payment_bonus": 0

},

"discount_success": [ // подробная информация по бонусным начислениям на позицию

{

"rule": "coupon",// тип начисления

"action_id": 0, // id акции (для начисления по акции)

"action_title": "",//название акции

"info": "6556PRE",

"discount": 7.11, // количество начисленных бонусов

"priority": 1// приоритет акции

}

],

"discount_bonus": 0,

"bonus": 4,

"bonus_success": [

{

"rule": "cashback",

"action_id": 0,

"action_title": "",

"bonus": 4,

"priority": 999998

}

]

},

{

"position": 3,

"prod_cat": "20316",

"prod_code": "77765",

"prod_name": "ПАКЕТ МАЙКА ФИРМЕННЫЙ ЕЛИСЕЙ 12КГ",

"prod_price": "100",

"prod_amount": "2",

"prod_sum": 200,

"discount_limit": 200,

"discount": 0,

"parameters": [],

"discount_success": [],

"discount_bonus": 0.5,

"bonus": 29.93,

"bonus_success": [

{

"rule": "cashback",

"action_id": 0,

"action_title": "",

"bonus": 29.93,

"priority": 999998

}

]

},

{

"position": 4,

"prod_cat": "20316",

"prod_code": "13997",

"prod_name": "КОНФ ВЕСОВЫЕ АССОРТИ",

"prod_price": "100",

"prod_amount": "2",

"prod_sum": 200,

"discount_limit": 200,

"discount": 0,

"parameters": {

"price": 100,

"mrp": 95,

"discount": 0,

"max_calculation_bonus": 200,

"max_payment_bonus": 200

},

"discount_success": [],

"discount_bonus": 0.5,

"bonus": 29.93,

"bonus_success": [

{

"rule": "cashback",

"action_id": 0,

"action_title": "",

"bonus": 29.93,

"priority": 999998

}

]

}

],

"max_payment_bonus_check": 2264.5, // максимальное количество бонусов для списания(в бонусах)

"max_payment_money_check": 226.45, // максимальное количество бонусов для списания(в денежной единице)

"balance_available": 100 , //доступно бонусов на счету в участника ПЛ

}

}

}

    1. Запрос на подтверждение продажи

POST    /v2/partner/operation/check-confirm

применяет купон (ставит отметку об использовании)

Перечень параметров в запросе:

Название

Тип данных

Описание

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

box

number

Количество денег, которые будут переначислены в бонусы согласно коэффициенту списания. Должен быть реализован функционал копилки.

check_number

integer

Номер чека

Код операции продажи. При формировании должен быть уникальным в разрезе партнера

Формат:

Номер_чека_+_Дата_покупки

payment_type

string

Массив с типами оплат. Пример: [{"type":1,"sum":899},{"type":2,"sum":0.00}]

pre_check_id

string

Код (ID) операции полученній в ответе на запрос POST /v2/partner/operation/pre-check

sms_id

идентификатор смс подтверждения списания бонусов

code

код полученный в смс покупателя

Пример ответа, при успешном запросе

{

"success": true,

"status": 201,

"data": {

"pre_check_id": "1548149007.104900.03", // идентификатор подтвержденного чека

"check_number": "100110", // номер чека, переданный кассой

"box_bonus": 0.07, // бонусы переданные в копилку

"bonus_accrued": 63.93, // начисленные бонусы

"bonus_redeemed": 1, // списанные бонусы, в счет оплаты

"bonus_balance": 288, // баланс бонусов у пользователя после оплаты чека

"c2b_result": { // информация по операции списания

"success": true, // статус операции

"errorDescription": "", // описание в случае ошибки

"processing_transaction_datetime": 1548150560, // время операции в unixtime

"c2b_check_number": "C2B-100110" // id операции

},

"b2c_result": { // информация по операции списания

"success": true, // статус операции

"errorDescription": "", // описание в случае ошибки

"processing_transaction_datetime": 1548150560, // время операции в unixtime

"b2c_check_number": "B2C-100110" // id операции

},

"coupon": [ // информация по купонам

{

"code": "6067PRECHECK",

"success": true,

"message": "",

"options": {

"received_discount": "16.85",

"redemption_count": 1

},

"reward_type": "1"

}

]

}

}

  1. Реферальная программа

POST /partner/referral/link

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

Нет постоянной привязки Реферала к Рефереру. Соотношение Реферал-Реферер может меняться от операции к операции.

К одному рефереру может быть привязано несколько рефералов. Реферал может поменять своего реферера, при этом старая связь не удаляется, а переходит в неактивный статус.

Реферер (referrer) – участник ПЛ, по рекомендации которого рефералы совершают операции.

Реферал (referee) – участник ПЛ, который совершает операцию по рекомендации другого участника.

РП – реферальная программа

Связь реферал -> реферер может быть создана двумя способами:

  • при регистрации, если будущий участник ПЛ указал идентификатор реферера и при этом выполняется событие Регистрация.
  • после регистрации, если участник ПЛ указал идентификатор реферера, при этом событие Регистрация не выполняется.

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

Событие Регистрация считать выполненным, если участник ПЛ заполнил все обязательные поля анкеты и указал идентификатор своего реферера (указана ссылка реферера на момент, когда юзеру проставляется дата регистрации в rtl_users.start_day). После этого в системе создается связь реферер -> реферал и фиксируется событие Регистрация.

Алгоритм:

  • Создание пользователя в системе
  • Создание связи реферер -> реферал методом /partner/referral/link
  • Завершение регистрации (заполнение всех обязательных полей анкеты)

Событие Покупка считать выполненным, если на момент покупки участник ПЛ является рефералом (в системе существует активная связь реферер -> реферал). После этого в системе фиксируется событие Покупка.

Алгоритм:

  • Предрасчёт по чеку методом pre-check
  • Создание связи реферер -> реферал методом /partner/referral/link
  • Подтверждение чека методом check-confirm

Или

  • Создание связи реферер -> реферал методом /partner/referral/link
  • Предрасчёт по чеку методом pre-check
  • Подтверждение чека методом check-confirm

Название

Тип данных

Описание

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

refereeToken

string

Токен (номер карты/телефона кто совершает продажу)

refereeType

string

Тип идентификации рефери(card/phone)

refererToken

string

Токен (номер карты/телефона по рекомендации которого операция происходит)

refererType

string

Тип идентификации реферера(card/phone)

Пример успешного ответа:

{

"success": true,

"status": 201,

"data": {

"refererType": "card",

"refererToken": "20000000001",

"refereeType": "card",

"refereeToken": "20000000001"

}

}

  1. Метод на получение истории начисления, списания бонусов

Метод на получение исторических транзакций

GET /v2/partner/operation/user/{type}/{token}/client-history

 

 

 

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

 

GET /v2/partner/operation/user/phone/380631024903/client-history?dateFrom=2021-01-01&dateTo=2021-12-31 HTTP/1.1

Host: api-groupeseb.abmloyalty.app

Content-Type: application/x-www-form-urlencoded

Accept-language: en

Authorization: Basic NzMyODljZTgtYzYwYS00ZjRjLTk5MjAtOWQ5ZmQ3NGZjOTQ0Og==

Cookie: _csrf=c0GBD8FUwOh6RU5PNNlNDKMBkjGoU2sR

 

 

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

"success": true,

"status": 200,

"data": {

"items": [

{

"type": "burn",

"data": {

"date": 1637542837,

"bonus": -2,

"description": "Bonus write off Partner:1 User:26430 Sum:2.000000"

}

},

{

"type": "burn",

"data": {

"date": 1637542837,

"bonus": -3,

"description": "Bonus write off Partner:1 User:26430 Sum:3.000000"

}

},

{

"type": "burn",

"data": {

"date": 1637542837,

"bonus": -1,

"description": "Bonus write off Partner:1 User:26430 Sum:1.000000"

}

},

{

"type": "burn",

"data": {

"date": 1637456419,

"bonus": -2,

"description": "Bonus write off Partner:1 User:26430 Sum:2.000000"

}

},

{

"type": "burn",

"data": {

"date": 1637370021,

"bonus": -1,

"description": "Bonus write off Partner:1 User:26430 Sum:1.000000"

}

},

{

"type": "gift",

"data": {

"date": 1637052008,

"bonus": 2,

"close_at": 1637531999,

"description": "Gift bonus User:19 Generator:26430 From:2021-11-16 To:2021-11-21 Sum:2.000000"

}

},

{

"type": "gift",

"data": {

"date": 1637051986,

"bonus": 3,

"close_at": 1637531999,

"description": "Gift bonus User:18 Generator:26430 From:2021-11-16 To:2021-11-21 Sum:3.000000"

}

},

{

"type": "gift",

"data": {

"date": 1636974592,

"bonus": 1,

"close_at": 1637359199,

"description": "Gift bonus User:17 Generator:26430 From:2021-11-15 To:2021-11-19 Sum:1.000000"

}

},

{

"type": "pending",

"data": {

"date": 1636974506,

"bonus": 1,

"category": "manually",

"close_at": 1637531999,

"description": "Test"

}

},

{

"type": "gift",

"data": {

"date": 1636974327,

"bonus": 2,

"close_at": 1637445599,

"description": "Gift bonus User:16 Generator:26430 From:2021-11-15 To:2021-11-20 Sum:2.000000"

}

},

{

"type": "burn",

"data": {

"date": 1635465609,

"bonus": -10,

"description": "Bonus write off Partner:1 User:26430 Sum:10.000000"

}

},

{

"type": "burn",

"data": {

"date": 1635465609,

"bonus": -10,

"description": "Bonus write off Partner:1 User:26430 Sum:10.000000"

}

},

{

"type": "burn",

"data": {

"date": 1635206405,

"bonus": -1,

"description": "Bonus write off Partner:1 User:26430 Sum:1.000000"

}

},

{

"type": "burn",

"data": {

"date": 1635033605,

"bonus": -1,

"description": "Bonus write off Partner:1 User:26430 Sum:1.000000"

}

},

{

"type": "pending",

"data": {

"date": 1634816857,

"bonus": 1,

"category": "manually",

"close_at": 1635195599,

"description": "Test 1"

}

},

{

"type": "gift",

"data": {

"date": 1634628771,

"bonus": 1,

"close_at": 1635022799,

"description": "Gift bonus User:10 Generator:26430 From:2021-10-19 To:2021-10-23 Sum:1.000000"

}

},

{

"type": "burn",

"data": {

"date": 1634428804,

"bonus": -1,

"description": "Bonus write off Partner:1 User:26430 Sum:1.000000"

}

},

{

"type": "gift",

"data": {

"date": 1633960959,

"bonus": 1,

"close_at": 1634417999,

"description": "Gift bonus User:8 Generator:26430 From:2021-10-11 To:2021-10-16 Sum:1.000000"

}

},

{

"type": "burn",

"data": {

"date": 1632960003,

"bonus": -5,

"description": "Bonus write off Partner:1 User:26430 Sum:5.000000"

}

},

{

"type": "pending",

"data": {

"date": 1632822670,

"bonus": 10,

"category": "profile",

"close_at": 1635414670,

"description": "Profile fill Юлия Шейнина 10.00BON expiration date 28.10.2021"

}

}

],

"_links": {

"self": {

"href": "https://api-groupeseb.abmloyalty.app/v2/partner/operation/user/phone/380631024903/client-history?dateFrom=2021-01-01&dateTo=2021-12-31&page=1"

},

"first": {

"href": "https://api-groupeseb.abmloyalty.app/v2/partner/operation/user/phone/380631024903/client-history?dateFrom=2021-01-01&dateTo=2021-12-31&page=1"

},

"last": {

"href": "https://api-groupeseb.abmloyalty.app/v2/partner/operation/user/phone/380631024903/client-history?dateFrom=2021-01-01&dateTo=2021-12-31&page=2"

},

"next": {

"href": "https://api-groupeseb.abmloyalty.app/v2/partner/operation/user/phone/380631024903/client-history?dateFrom=2021-01-01&dateTo=2021-12-31&page=2"

}

},

"_meta": {

"totalCount": 23,

"pageCount": 2,

"currentPage": 1,

"perPage": 20

}

}

}

 

Примеры ответов для разных типов операций (с описанием параметров)

 "type": "check" - продажа

"type": "check_return" - возврат

"type": "pending" -начисление бонусов за регистрацию, заполнение полей анкеты

"type": "gift"- подарочные бонусы

"type": "burn"-сгорание бонусов

"type": " withdraw"- ручное начисление или списание бонусов.