Расчет скидок по чеку

Метод позволяет рассчитать скидки по чеку/заказу. Для выполнения данного запроса необходимо так же указывать заголовок с идентификатором магазина. Необходимо точно указывать номер, допускающий однозначную конвертацию к номеру телефона. При расчете скидок, применяемых к чеку можно указывать число баллов для списания markDecrease. Если данный параметр не указан или его значение null, производится расчет для максимально допустимого настройками числа списываемых баллов. В ответе присылаются два блока zeroSpend при нулевом числе списываемых баллов и notZeroSpend для ненулевого числа списываемых баллов. В параметре maxMarkCanSpend указано максимальное число баллов доступное для списания в данной транзакции, параметр calculateToSpendMark показывает для какого числа списываемых баллов выполнен расчет блока notZeroSpend. Если в запросе на расчет отправлено markDecrease = null, то в ответе придет calculateToSpendMark = maxMarkCanSpend. Параметр markDecrease в ответе дублирует соответствующий параметр из запроса.

Запрос:

POST: https://api.bm-app.com/getTransactionParameters

Description

isOrder: (boolean, optional) - true для заказов с отложенной оплатой, false для транзакций на кассе, оплате сразу, default = false
couponNumber: (string, optional) - номер купона/промокода
markDecrease: (number, optional) - количество списываемых баллов для расчета чека, при указании null или не отправке данного параметра, производится расчет по максимально доступному числу баллов. Если необходимо списывать меньшее число баллов, необходимо его отправить в данном параметре
customerPhone: (string, required) - номер телефона клиента
positions: (object, required) - массив позиций чека
externalUnitId: (string, required) - идентификатор позиции во внешней системе, как правило UUID
quantity: (number, required) - количество позиции чека
price: (number, required) - цена продажи без скидки 1 ед. измерения
externalDiscount: (number, required) - внешняя скидка на позицию, т.е. сумма скидки на 1 ед. измерения позиции
name: (string, required) - название позиции во внешней системе

Headers

BM-ApiKey: token
BM-StoreId: storeId
BM-CashBoxId: cashBoxId

Body

{
"isOrder": false,
"couponNumber": "123456",
"markDecrease": 0,
"customerPhone": "9219602566",
"positions": [
{
"externalUnitId":"4de7ffb5-3e9b-4c23-9db4-d5463651221a",
"quantity":3,
"price":50,
"externalDiscount": 0,
"name":"Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад"
}
]
}

Ответ:

Body:

{
"customer": {
"login": "+7 (921) 960-25-66",
"name": "вася",
"surname": null,
"patronymic": null,
"fio": "вася",
"male": null,
"bDate": null,
"numberVerified": false
},
"customerMarkParameters": {
"mark": 413,
"markLvl": 13,
"level": {
"number": 1,
"name": "Первый уровень",
"requiredSum": 0,
"requiredMarkLvl": 0,
"markToCash": 20,
"cashToMark": 5
},
"companyLoyaltyParameters": {
"levels": [
{
"number": 1,
"name": "Первый уровень",
"requiredSum": 0,
"requiredMarkLvl": 0,
"markToCash": 20,
"cashToMark": 5
},
{
"number": 2,
"name": "Второй уровень",
"requiredSum": 5000,
"requiredMarkLvl": 250,
"markToCash": 50,
"cashToMark": 10
}
],
"customerGroup": {
"groupId": 802,
"groupKey": "59793b10-6f7c-4f27-af1c-1d82e7523ab4",
"name": "ViP клиенты",
"state": "CREATED",
"timeCreate": "2021-04-09 09:54:49.730548",
"hash": 699679411
}
}
},
"customerCardUse": true,
"customerCard": "675675467",
"smsVerificationMarkSpend": false,
"smsVerificationCustomerPhone": false,
"isCouponUse": true,
"couponNumber": "123456",
"maxMarkCanSpend": 20,
"markDecrease": 0,
"calculateToSpendMark": 20,
"additionalMarkOnReceiptConfig": [
{
"cash": 500,
"mark": 100
},
{
"cash": 1000,
"mark": 200
}
],
"additionalMarkOnReceiptAlert": null,
"nextAdditionalMarkOnReceiptAlert": "При покупке на 500 рублей, Вам будет начислено дополнительно 100 баллов! Осталось докупить на 350 рублей!",
"zeroSpend": {
"appliedCombos": 1,
"totalCombos": 1,
"cashierMassages": [
{
"name": "Скидка по промокоду",
"type": "promoCode",
"description": [
"С 26.02.2021",
"Активируется по промокоду"
],
"state": "complete",
"operatorDescription": [
"Сумма скидки: 50 Р"
],
"positions": [
"Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад"
]
}
],
"print": [
{
"text": [
"СПИСАНО БАЛЛОВ: 0",
"НАЧИСЛЕНО БАЛЛОВ: 5",
"ИТОГО БАЛЛОВ: 418"
]
},
{
"text": [
"БЫЛА ПРИМЕНЕНА СКИДКА:",
" ",
"Скидка по промокоду",
"С 26.02.2021",
"Активируется по промокоду",
"Сумма скидки: 50 Р",
" Батончик Фитнес цельные злаки",
" 23.5 г 1*24 шоколад"
]
},
{
"text": [
"Скачайте мобильное приложение \"B",
"onus Money\" в Google Play / App ",
"Store или добавьте электронную к",
"арту лояльности в Google Pay / A",
"pple Wallet : bmcard.ru/?mH2PF"
],
"qrCode": "https://bmcard.ru/?mH2PF"
}
],
"resultCash": [
"Предытог 150.00 Р",
"Скидка по акции 50.00 Р",
"Скидка за баллы 0 Р",
"Округление 0 Р",
"Итого 100.00 Р"
],
"resultMark": [
"Баллов было 413",
"Списанно баллов 0",
"Начисленно баллов 5",
"Дополнительные баллы 0",
"Итого баллов 418"
],
"positions": [
{
"unitId": 0,
"externalUnitId": "4de7ffb5-3e9b-4c23-9db4-d5463651221a",
"name": "Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад",
"price": 50,
"priceWithDiscount": 50.00,
"externalDiscount": 0,
"quantity": 1.00
},
{
"unitId": 0,
"externalUnitId": "4de7ffb5-3e9b-4c23-9db4-d5463651221a",
"name": "Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад",
"price": 50,
"priceWithDiscount": 25.00,
"externalDiscount": 0,
"quantity": 2.00
}
]
},
"notZeroSpend": {
"appliedCombos": 1,
"totalCombos": 1,
"cashierMassages": [
{
"name": "Скидка по промокоду",
"type": "promoCode",
"description": [
"С 26.02.2021",
"Активируется по промокоду"
],
"state": "complete",
"operatorDescription": [
"Сумма скидки: 50 Р"
],
"positions": [
"Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад"
]
}
],
"print": [
{
"text": [
"СПИСАНО БАЛЛОВ: 20",
"НАЧИСЛЕНО БАЛЛОВ: 4",
"ИТОГО БАЛЛОВ: 397"
]
},
{
"text": [
"БЫЛА ПРИМЕНЕНА СКИДКА:",
" ",
"Скидка по промокоду",
"С 26.02.2021",
"Активируется по промокоду",
"Сумма скидки: 50 Р",
" Батончик Фитнес цельные злаки",
" 23.5 г 1*24 шоколад"
]
},
{
"text": [
"Скачайте мобильное приложение \"B",
"onus Money\" в Google Play / App ",
"Store или добавьте электронную к",
"арту лояльности в Google Pay / A",
"pple Wallet : bmcard.ru/?mH2PF"
],
"qrCode": "https://bmcard.ru/?mH2PF"
}
],
"resultCash": [
"Предытог 150.00 Р",
"Скидка по акции 50.00 Р",
"Скидка за баллы 20 Р",
"Округление 0 Р",
"Итого 80.00 Р"
],
"resultMark": [
"Баллов было 413",
"Списанно баллов 20",
"Начисленно баллов 4",
"Дополнительные баллы 0",
"Итого баллов 397"
],
"positions": [
{
"unitId": 0,
"externalUnitId": "4de7ffb5-3e9b-4c23-9db4-d5463651221a",
"name": "Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад",
"price": 50,
"priceWithDiscount": 40.00,
"externalDiscount": 0,
"quantity": 1.00
},
{
"unitId": 0,
"externalUnitId": "4de7ffb5-3e9b-4c23-9db4-d5463651221a",
"name": "Батончик Фитнес цельные злаки 23.5 г 1*24 шоколад",
"price": 50,
"priceWithDiscount": 20.00,
"externalDiscount": 0,
"quantity": 2.00
}
]
}
}

Description

customer: (object) - клиент
login: (string) - телефон клиента
name: (string) - имя клиента, может быть null
surname: (string) - фамилия клиента, может быть null
patronymic: (string) - отчество клиента, может быть null
male: (boolean) - пол клиента, true - мужской, false - женский, null - неопределено
bDate: (string) - день рождения клиента, может быть null
numberVerified: (boolean) - подтверждение номера телефона, true - да, false - нет

customerMarkParameters: (object) - блок связанный с баллами клиента
mark: (number) - количество баллов клиента
level: (object) - текущий уровень клиента в таблице лояльности
number: (number) - номер уровня
name: (string) - название уровня
requiredSum: (number) - необходимая сумма покупок для достижения уровня
markToCash: (number) - процент от суммы чека который клиент может оплачивать баллами
cashToMark: (number) - процент от суммы чека который начисляется в виде баллов
companyLoyaltyParameters: (object) - таблица лояльности применяемая к клиенту
levels: (array) - уровни таблицы лояльности
number: (number) - номер уровня
name: (string) - название уровня
requiredSum: (number) - сумма покупок для достижения уровня
markToCash: (number) - процент списания баллов на уровне
cashToMark: (number) - процент начисления баллов на уровне
customerGroup: (object) - группа клиентов
name: (string) - название группы клиентов к которой применяется таблицы лояльности

customerCard: (string) - номер пластиковой карты клиента
customerCardUse: (boolean) - показывает использование пластиковых карт у клиентов
smsVerificationMarkSpend: (boolean) - показывает использование подтверждения списания баллов по смс
smsVerificationCustomerPhone: (boolean) - показывает использование подтверждения номера клиентов по смс
isCouponUse: (boolean) - показывает необходимость показа поля для ввода купона/промокода
couponNumber: (string) - примененный к чеку купон/промокод
maxMarkCanSpend: (string) - максимальное число баллов доступное для списания в данной транзакции
calculateToSpendMark: (string) - показывает для какого числа списываемых баллов выполнен расчет блока notZeroSpend
markDecrease: (string) - дублирует соответствующий параметр из запроса

transactionConfig: (object) - настройки покупок
numberVerification: (boolean) - подтверждение номера по смс
transactionVerification: (boolean) - подтверждение списания баллов по смс
cardUse: (boolean) - использование пластиковых карт

additionalMarkOnReceiptConfig: (object) - настройки дополнительных баллов
additionalMarkOnReceipt: (array) - настройки дополнительных баллов (функционал маркетинг -> увеличение среднего чека)
cash: (number) - сумма чека
mark: (number) - дополнительные баллы

additionalMarkOnReceiptAlert: (string) - подсказка кассиру о срабатывании функционала увеличения среднего чека
nextAdditionalMarkOnReceiptAlert: (string) - подсказка кассиру о следующем ближайшем уровне функционала увеличения среднего чека, с информацией необходимой сумме докупки

zeroSpend: (object) - блок применяемый при нулевом числе списываемых баллов
positions: (object) - массив позиций чека с применнеными скидками по акциям
externalUnitId: (string, required) - идентификатор позиции во внешней системе, как правило UUID
quantity: (number, required) - количество позиции чека
price: (number, required) - цена продажи без скидки 1 ед. измерения
priceWithDiscount: (number, required) - цена продажи со скидкой 1 ед. измерения, с учетом внешней скидки, скидки Bonus Money
externalDiscount: (number, required) - внешняя скидка на позицию, т.е. сумма скидки на 1 ед. измерения позиции
name: (string, required) - название позиции во внешней системе
resultCash: (array) - рублевый итог по чеку
resultMark: (array) - балловый итог по чеку
totalCombos: (number) - всего акций запущеных на данной точке
appliedCombos: (number) - применненных акций к данному чеку
cashierMassages: (object) - массив подсказок кассиру об акциях
name: (string) - название акции
type: (string) - тип акции, возможные значения discountSum, markIncrease, workingTime, bDay, nVisits, coupon, promoCode
description: (string) - описание акции
state: (string) - состояние, возможные значения complete - собрано, recommend - не собрано, partial - частично собрано
operatorDescription: (array) - массив строк описания действия акции к конкретному чеку
positions: (array) - массив строк позиций чека к которым была применена акция
print: (object) - массив сообщений для печати на чеке
text: (array) - массив строк для печати
qrCode: (string) - QR код для печати
barcode: (string) - штрих код для печати

При выполнении запросов возможно получение следующих ошибок:

  • HTTP Status 503 Превышено максимальное число запросов в секунду
  • HTTP Status 413 Превышен максимальный размер тела запроса
  • HTTP Status 401 API ключ не найден
  • HTTP Status 402 Система Bonus Money не оплачена или закончилось число транзакций предусмотренное тарифом
  • HTTP Status 400 Некорректный запрос, описание ошибки присылается в теле ответа в формате Json, доступное по ключу: message