Запрос на списание бонусов
Для списания бонусов необходимо выполнить POST-запрос на URL:
http://<host>:<port>/spendbonus
Пример запроса через curl:
curl -i -X POST -d @check.json http://localhost:8090/spendbonus --header "Content-Type: application/json"
, где localhost:8090 – это <host>:<port> виртуальной кассы, а check.json – это файл с содержимым чека.
Структура запроса
Структура запроса в формате json:
{
"check": {
"cards": [
{
"bonusbalance": 60304.67,
"cardmode": 1,
"idcardgroup": 2,
"namecardgroup": "Группа карт 1",
"number": "1010"
}
],
"coupons": [
{
"number": "2232",
"type": 1
}
],
"identifier": "c4h1k7vnw56psuv8f",
"pointsForEarn": 21.4,
"pointsForSpend": 21.46,
"positions": [
{
"barcode": "1094",
"code": "1094",
"dept": 1,
"discounts": [
{
"campaigncode": 1061159515,
"campaignname": "11212",
"couponnumber": "2232",
"discountcode": 1061159516,
"discountmode": 1,
"discountname": "Скидка на товар",
"discountrate": 10,
"discountsum": 15.9,
"discounttype": 1,
"ispositiondiscount": 1,
"minpriceignored": false,
"posnum": 1
}
],
"earnedbonuses": [
{
"amount": 14.3,
"campaigncode": 1,
"campaignname": "1",
"cardnumber": "1010",
"ispositionbonus": 0
},
{
"amount": 7.1,
"campaigncode": 1,
"campaignname": "1",
"cardnumber": "1010",
"ispositionbonus": 0
}
],
"measure": 1,
"measurename": "шт",
"minprice": 14.31,
"name": "МУКА МАРИЯ В/С ГОСТ 1КГ",
"paymentmethod": 0,
"paymentobject": 0,
"posnum": 1,
"price": 15.9,
"quant": 10,
"sum": 143.1,
"sumWithoutDiscounts": 159,
"taramode": 0,
"vatcode": 4,
"vatrate": 4,
"vatsum": 5.18689570490239
}
],
"signature": "9f940b3de52a5f389b53957ed69f3c2b",
"sum": 143.1
},
"bonusSum": 10
}
Параметры тела запроса:
| Наименование | Тип данных | Описание |
|---|---|---|
| check | object | Результат запроса calculateDiscount |
| bonusSum | double | Сумма бонусов на карте |
Параметры объекта check:
| Наименование | Тип данных | Описание |
|---|---|---|
| identifier | string | Для внутреннего использования |
| pointsForEarn | double | Сумма баллов для начисления |
| pointsForSpend | double | Сумма баллов для списания |
| signature | string | Для внутреннего использования |
| sum | double | Сумма документа |
| cards | object | Объект "карты" |
| coupons | object | Объект "купоны" |
| position | object | Объект "позиции" |
Способ ввода для группы карт должен быть установлен "Удаленно".
При работе с сервисом онлайн-карт группы карт должны быть выгружены в базу данных того магазина, в который отправляется запрос.
Параметры объекта cards:
| Наименование | Тип данных | Описание |
|---|---|---|
| bonusbalance | double | Баланс бонусных баллов |
| cardmode | int | Тип карты |
| idcardgroup | int | Идентификационный номер группы карт, к которой относится данная карта |
| namecardgroup | string | Имя группы, к которой относится карта |
| number | int | Номер карты |
Параметры объекта coupons:
| Наименование | Тип данных | Описание |
|---|---|---|
| number | int | Номер купона |
| type | int | Тип купона |
Параметры объекта positions:
| Наименование | Тип данных | Описание | Примечания |
|---|---|---|---|
| barcode | string | Штрих-код товара | |
| code | string | Код товара | |
| dept | int | Отдел | |
| measure | int | Код единицы измерения | |
| measurename | string | Наименование единицы измерения | |
| minprice | double | Минимальная цена товара | |
| name | string | Название позиции | |
| paymentmethod | int | Признак способа расчета | |
| paymentobject | int | Признак предмета расчета | |
| posnum | int | Номер позиции в чеке | |
| price | double | Цена товара | |
| quant | double | Количество товара | |
| sum | int | Сумма со скидкой | |
| sumWithoutDiscounts | int | Сумма без скидки | |
| taramode | int | Для внутреннего использования | |
| vatcode | string | Код налога | |
| vatrate | double | Ставка налога | Можно указать 0. Используется для печати отчетов. |
| vatsum | double | Сумма налога | Можно указать 0. Используется для печати отчетов. |
Параметры объекта discounts:
| Наименование | Тип данных | Описание |
|---|---|---|
| campaigncode | int | Код акции |
| campaignname | string | Название акции |
| couponnumber | string | Номер купона |
| discountcode | int | Код правила начисления акции |
| discountmode | int | Тип правила начисления акции |
| discountname | string | Наименование правила начисления акции |
| discountrate | int | Процент скидки на позицию |
| discountsum | double | Сумма скидки на позицию |
| discounttype | int | Тип скидки:
|
| ispositiondiscount | int | Флаг на что применялась скидка:
|
| minpriceignored | tinyint | Флаг игнорирования минимальной цены при применении скидки |
| posnum | int | Номер позиции в чеке |
Параметры объекта earnedbonuses:
| Наименование | Тип данных | Описание |
|---|---|---|
| amount | decimal | Сумма начисления/списания бонусов |
| campaigncode | int | Код акции |
| campaignname | string | Наименование акции |
| cardnumber | int | Номер карты |
| ispositionbonus | int | Признак начисления на позицию |
Пример ответа
{
"cards": [
{
"bonusbalance": 105141.86,
"cardmode": 1,
"idcardgroup": 1,
"namecardgroup": "Карта клиента",
"number": "1010"
}
],
"coupons": [
{
"number": "2232",
"type": 1
}
],
"identifier": "c4h1k7vnw56psuv8fz12",
"pointsForEarn": 14.0,
"positions": [
{
"barcode": "4600605000991",
"code": "105",
"dept": null,
"discounts": [
{
"campaigncode": 99,
"campaignname": "Акция выходного дня",
"discountcode": 1,
"discountmode": 2,
"discountname": "Акция выходного дня",
"discountrate": 13.0,
"discountsum": 13.0,
"discounttype": 2,
"ispositiondiscount": 0,
"minpriceignored": false,
"posnum": 1
},
{
"campaigncode": 100,
"campaignname": "Спасибо за покупку",
"discountcode": 1,
"discountmode": 1,
"discountname": "Спасибо за покупку",
"discountrate": 200.0,
"discountsum": 27.0,
"discounttype": 2,
"ispositiondiscount": 0,
"minpriceignored": false,
"posnum": 1
}
],
"earnedbonuses": [
{
"amount": 14.0,
"assettimebeg": "",
"assettimeend": "",
"campaigncode": 104,
"campaignname": "Начисление бонусов",
"cardnumber": "1010",
"ispositionbonus": 0,
"weight": 0
}
],
"isallowbonusspend": true,
"measure": 1,
"measurename": "шт",
"minprice": 30.0,
"name": "МОЛОЧНЫЙ ДЕСЕРТ ДАНОН ДАНИССИМО С ТВОРОЖНЫМ КРЕМОМ ЧЕРНИКА 130Г",
"paymentmethod": 0,
"paymentobject": 0,
"posnum": 1,
"price": 38.0,
"quant": 5.0,
"spentbonuses": [
{
"campaigncode": 103,
"campaignname": "Акция на списание бонусов",
"cardnumber": "1010",
"discountcode": 104,
"discountmode": 2,
"discountname": "Списание бонусов",
"discountsum": 10.0,
"discounttype": 5,
"ispositiondiscount": 0,
"posnum": 1,
"sessionid": ""
}
],
"sum": 140.0,
"sumWithoutDiscounts": 190.0,
"taramode": 0,
"tmc": {
"minprice": 22.41,
"price": 24.9
},
"vatcode": -1,
"vatrate": 0.0,
"vatsum": 0.0
}
],
"sum": 140.0
}