HTTP-сервис расчета скидок
HTTP сервис для расчета скидок ТП 7
Настройка
В ТП 7 требуется:
- Создать и настроить элемент справочника ККМ.
- Создать и настроить элемент справочника «Настройки расчета скидок».
- Создать запись в регистре сведений «Настройки расчета скидок для ККМ», в которой указать ККМ из п.1 и настройку из п.2.
- Опубликовать на веб-сервисе HTTP сервис KKMTransfer.
Метод DiscountCalculation
Для получения рассчитанных скидок нужно отправить POST запрос на адрес «{веб-адрес ТП 7}/hs/KKMTransfer/DiscountCalculation»,
где {веб-адрес ТП 7} - адрес опубликованной базы ТП 7, например, http://localhost:8080/TP7_dev.
В теле запроса нужно передать информацию о чеке, для которого нужно получить рассчитанные скидки.
Авторизация Basic Base64(login:password).
Входные параметры
Тело POST запроса строка JSON:
- kkm - код ккм
- card - код дисконтной карты
- items - массив позиций чека
- id - индекс позиции
- type - 0 - продажа, 2 - сторно (игнорируются)
- code - код номенклатуры
- attr - код разреза характеристики
- pack - штрихкод единицы (для базовой не заполняется)
- q - количество товара в позиции в единицах (для одной упаковки с коэффициентом 10 нужно передать 1)
- price - цена позиции (единицы)
- payments - необязательное поле - массив видов оплаты, используется только для активизации скидки по виду оплаты
- code - код вида оплаты в справочнике
- value - сумма вида оплаты
Пример
{ 'kkm': 1, 'card': '123456', 'items': [ { 'id': 0, 'type': 0, 'code': 1, 'attr': '', 'pack': '', 'q': 2, 'price': 50 }, { 'id': 1, 'type': 0, 'code': 4, 'attr': '1', 'pack': '', 'q': 2, 'price': 15.3 } ], 'payments': [ {'code': 1, 'value': 1000.00} ]}Выходные параметры
В ответ ф-я DiscountCalculation возвращает строку в формате JSON.
Выходные параметры строка JSON:
- result - «ok» - запрос успешно обработан, «error» - произошла ошибка
- msg - текст ошибки, в случае неуспешного запроса
- data - в случае успешного запроса содержит ниже перечисленные атрибуты
- sum_wd - сумма без скидки
- sum_total - итог чека
- discount_sum_total - общая сумма скидки (скидки на чек + скидки позиций)
- discount_sum - сумма скидок на только на чек
- discount_sum_round - сумма скидки округления итога (не учитывается в других скидках)
- active_schemes - массив активные схем скидок на чек
- code - код схемы скидки
- name - наименовании схемы скидок
- discount_sum - сумма скидок по схеме скидок
- bonus_sum - сумма начисленных бонусов
- details - массив активных скидок в схеме
- code - код скидки
- name - наименование скидки
- discount_type - Вид скидки (1-процентная, 2-суммовая)
- discount_value - значение скидки
- discount_sum - сумма скидки
- bonus_type - Вид бонуса (1-процентный, 2-суммовой)
- bonus_value - значение бонуса
- bonus_sum - сумма начисленного бонуса
- spec_price_code - код доп. цены акции
- text - текст скидки для чека
- items - массив описания скидок позиций
- id - индекс позиции
- discount_sum - сумма скидок на позицию
- bonus_sum - сумма начисленных бонусов на позицию
- spec_price_code - код доп. цены (может определяться как скидкой на чек, так и скидкой на позицию)
- spec_price_value - код доп. цены
- active_schemes - массив активных скидок на позицию (описание элементов массива совпадает с описанием active_schemes на чек)
- bonus_sum - общая сумма начисляемых бонусов на дисконтную карту при закрытии чека
- card - null, если номер ДК не был передан или если карта не была найдена, иначе содержит атрибуты:
- Код - номер карты
- Наименование - наименование карты
- ТекстДляЧека - текст для чека
- НеВестиНакопление - если true - накопление не начисляется
- ДеньРождения - день рождения владельца карты
- Накопление - сумма накопления
- КоличествоЧеков - количество чеков по карте
- СуммаБонуса - сумма бонусов на карте
- Группы - массив кодов групп дисконтных карт
- НомерТелефона - номер телефона владельца карты
- АдресЭлектроннойПочты - адрес эл. почты владельца карты
- card_error - пустая строка, если не был передан номер карты или если карта была найдена, иначе описание ошибки поиска карты.
Пример успешного запроса
{ 'data': { 'sum_wd': 130.6, 'sum_total': 81, 'discount_sum': 0, 'discount_sum_total': 50, 'discount_sum_round': -0.4, 'active_schemes': [ { 'code': 2, 'name': 'Акция на чек', 'discount_sum': 0, 'bonus_sum': 7, 'ban': false, 'details': [ { 'code': 2, 'discount_type': 1, 'discount_value': 0, 'discount_sum': 0, 'bonus_type': 1, 'bonus_value': 5, 'bonus_sum': 7, 'spec_price_code': 0, 'text': '5% бонус на карту', 'name': 'Начисление бонусов', 'ban': false } ] } ], 'items': [ { 'id': 0, 'discount_sum': 50, 'bonus_sum': 0, 'spec_price_code': 0, 'spec_price_value': 0, 'active_schemes': [ { 'code': 1, 'name': 'Акция на позиции', 'discount_sum': 50, 'bonus_sum': 0, 'ban': false, 'details': [ { 'code': 1, 'discount_type': 1, 'discount_value': 100, 'discount_sum': 50, 'bonus_type': 0, 'bonus_value': 0, 'bonus_sum': 0, 'spec_price_code': 0, 'text': 'Акция 1+1=1', 'name': 'Товарная скидка 2 по цене 1', 'ban': false } ] } ] }, { 'id': 1, 'discount_sum': 0, 'bonus_sum': 0, 'spec_price_code': 0, 'spec_price_value': 0, 'active_schemes': [] } ], 'bonus_sum': 7, 'card': { 'Код': '123456', 'Наименование': '123456', 'ТекстДляЧека': 'Текст чека ДК', 'НеВестиНакопление': false, 'ДеньРождения': '2021-03-19T00:00:00', 'Накопление': 0, 'КоличествоЧеков': 0, 'СуммаБонуса': 0, 'НомерТелефона': '', 'АдресЭлектроннойПочты': 'dsa@das.com', 'Группы': [1] }, 'card_error': '' }, 'result': 'ok'}Пример неуспешного запроса
{ 'result': 'error', 'msg': 'ККМ не найден'}Метод PriceChecker
Для получения информации о товаре и/или дисконтной карте нужно отправить POST запрос на адрес «{веб-адрес ТП 7}/hs/KKMTransfer/PriceChecker»,
где {веб-адрес ТП 7} - адрес опубликованной базы ТП 7, например, http://localhost:8080/TP7_dev.
В теле запроса нужно передать штрихкод и/или номер дисконтной карты.
Авторизация Basic Base64(login:password).
Входные параметры
Тело POST запроса строка JSON:
- kkm - код ккм
- barcode - штрихкод товара или код маркировки
- card - код дисконтной карты
Пример
{ 'kkm': 1, 'barcode': '12345678', 'card': '123'}Выходные параметры
В ответ ф-я PriceChecker возвращает код ответа 200 и в теле ответа строку в формате JSON.
Выходные параметры строка JSON:
- result - «ok» - запрос успешно обработан, «error» - произошла ошибка
- msg - текст ошибки, в случае неуспешного запроса
- good - null, если barcode не был передан, иначе структуру:
- code - код номенклатуры
- barcode - штрихкод товара или единицы (может отличаться от входного параметра)
- name - наименование номенклатуры или единицы
- art - артикул
- price - розничная цена
- spec_price - акционная цена, 0 - не действует акционная цена
- price_d - цена со скидкой
- discount_sum - сумма скидки (розничная цена минус акционная цена (если действует) минус скидки)
- measure_unit - единица измерения
- country - страна производителя
- description - описание товара
- image - картинка в base64 или null при отсутствии
- image_ext - расширение файла картинки или null при отсутствии картинки
- card - null, если номер ДК не был передан или если карта не была найдена, иначе содержит атрибуты:
- Код - номер карты
- Наименование - наименование карты
- ТекстДляЧека - текст для чека
- НеВестиНакопление - если true - накопление не начисляется
- ДеньРождения - день рождения владельца карты
- Накопление - сумма накопления
- КоличествоЧеков - количество чеков по карте
- СуммаБонуса - сумма бонусов на карте
- Группы - массив кодов групп дисконтных карт
- НомерТелефона - номер телефона владельца карты
- АдресЭлектроннойПочты - адрес эл. почты владельца карты
Пример успешного запроса
{ 'result': 'ok', 'good': { 'code': 1, 'barcode': '12345678', 'name': 'Товар 1', 'art': '01', 'price': 100.00, 'spec_price': 0, 'price_d': 95.00, 'discount_sum': 5.00, 'measure_unit': 'шт.', 'country': 'РФ', 'description': 'описание товара', 'image': null }, 'card': { 'Код': '1234', 'Наименование': '123', 'ТекстДляЧека': 'Текст чека ДК', 'НеВестиНакопление': false, 'ДеньРождения': '2021-03-19T00:00:00', 'Накопление': 0, 'КоличествоЧеков': 0, 'СуммаБонуса': 0, 'НомерТелефона': '', 'АдресЭлектроннойПочты': 'dsa@das.com', 'Группы': [1] }}Пример неуспешного запроса
{ 'result': 'error', 'msg': 'Товар не найден'}Коллекция Postman
Пожалуйста оцените пользу статьи для вас
Если у вас есть пожелания или вы не согласны с тем, что написано в статье, напишите нам в Телеграм