HTTP-сервис расчета скидок

HTTP сервис для расчета скидок ТП 7

Настройка

В ТП 7 требуется:

  1. Создать и настроить элемент справочника ККМ.
  2. Создать и настроить элемент справочника «Настройки расчета скидок».
  3. Создать запись в регистре сведений «Настройки расчета скидок для ККМ», в которой указать ККМ из п.1 и настройку из п.2.
  4. Опубликовать на веб-сервисе 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

Пожалуйста оцените пользу статьи для вас

Если у вас есть пожелания или вы не согласны с тем, что написано в статье, напишите нам в Телеграм