Под обменом данными в Кассир 5 понимается загрузка справочников и выгрузка отчета (транзакций).
Файл справочных данных в формате SPR.
Формат выгружаемых транзакций.
Типовые способы обмена:
Бэк-офис выгружает файл справочник, к которому есть доступ на кассе.
Бэк-офис загружает файл отчета, выгруженный из Кассира.
Каталог обмена желательно располагать на компьютере кассы, т.к. прерывание связи с сетевым каталогом будет создавать задержки в работе.
При данном способе обмена в Кассире работа с FTP-сервером выполняется через внешнюю компоненту ExchangeMan.dll.
При выгрузке файлов на FTP-сервер рекомендуется сначала создавать временный файл, а потом переименовывать по формату, описанному ниже.
Бэк-офис выгружает файл справочника на FTP-сервер с именем, указанным в настройке Кассира «Имя файла справочника на FTP сервере» (задаётся в Кассире, например Files/POS1.spr) с суффиксом «.$1» (т.е. Files/POS1.spr.$1),
если файл этим суффиксом уже существует, тогда порядковый номер в суффиксе увеличивается, до первого свободного (Files/POS1.spr.$n).
Кассир загрузит и объединит файлы справочников в соответствии с порядком номеров в суффиксах.
При выгрузке отчета Кассир выгружает файл с транзакциями на FTP-сервер с суффиксами (например, «Files/POS1.rep.$1»…«Files/POS1.rep.$n»).
Отличается от способа «FTP-сервер» только наличием опции «Загружать файл без порядкового номера». Если флаг «Загружать файл без порядкового номера» установлен, тогда файлы на FTP записываются без суффиксов типа «.$n».
При обмене через HTTP-сервис Кассир вызывает функции HTTP-сервиса, который опубликован в бэк-офисе.
При обмене используется две функции: получение данных из бэк-офиса и отправка данных в бэк-офис.
GET запрос.
Получение данных из бэк-офиса, с возможностью получения данных (файла).
Функция должна иметь следующий веб-адрес:
http://{host}/hs/KKMTransfer/{НомерПОС}/{НомерПакета}/?text=1
host - веб-адрес сервиса
НомерПОС - число, уникальный номер рабочего места (задаётся в настройках стартера Кассира)
НомерПакета - число, номер пакета для загрузки, после успешной загрузки Кассир увеличивает номер пакета на 1.
text - необязательный параметр запроса.
Функция может вызываться несколько раз с одним номером пакета, поэтому сразу после выполнения нельзя удалять пакет с указанным номером.
В ответе нужно указать заголовок: «Content-type:application/json; charset=utf-8».
строка JSON с атрибутами:
data - пустая строка или zip-архив с файлом в виде строки в формате base64
dataText - пустая строка или текст файла
errcode - код ошибки, 0 - ошибок нет
errmessage - пустая строка или текст ошибки
packagetype - расширение файла (spr или flr или dcm)
UID - уникальный идентификатор, может указываться если packagetype = «flr» (файл запроса транзакций). По заданным параметрам в файле flr, касса сформирует файл с транзакциями и выполнит ф-ю SendData с указанием данного UID.
Если передан необязательный параметр запроса text и его значение равно «1», тогда сервис может вернуть текст файла в атрибуте dataText или вернуть base64 от zip архива файла в атрибуте data.
Если не передан необязательный параметр запроса text или его значение не равно «1», тогда сервис возвращает данные в base64 от zip архива файла в атрибуте data, атрибут dataText не заполняется.
Пример успешного получения пакета с zip архивом в формате base64:
{
"data": "UEsDBBQAAAgIABuVPVAHI4ouFgAAABQAAAAOAAAAdjhfOTk2OV8xNS50eHR7v3u/\r\nsrKDg5qaiopKUIAPL5cyLxcAUEsBAi4DFAAACAgAG5U9UAcjii4WAAAAFAAAAA4A\r\nJAAAAAAAAAAAALSBAAAAAHY4Xzk5NjlfMTUudHh0CgAgAAAAAAABABgAgF1jfrrW\r\n1QGAXWN+utbVAYBdY3661tUBUEsFBgAAAAABAAEAYAAAAEIAAAAAAA==",
"dataText": "",
"errcode": "0",
"errmessage": "",
"packagetype": "spr"
}
Пример успешного получения пакета с текстом файла (если был передан параметр ?text=1):
{
"data": "",
"dataText": "##@@&&\n#\n|ИнтервалОбменаДанными|TransportHTTP=120",
"errcode": "0",
"errmessage": "",
"packagetype": "spr"
}
Пример ответа, когда данные для отправки на кассу отсутствуют:
{
"data": "",
"dataText": "",
"errcode": "3",
"errmessage": "Не найдены данные для отправки"
}
POST запрос.
Отправка данных (текстовый файл с транзакциями).
Функция должна иметь следующий веб-адрес:
http://{host}/hs/KKMTransfer/SendData/{НомерПОС}/{НомерПакета}/?UID=uuid
host - веб-адрес сервиса
НомерПОС - число, уникальный номер рабочего места (задаётся в настройках стартера Кассира)
НомерПакета - число, номер пакета, после успешной загрузки Кассир увеличивает номер пакета на 1.
UID - необязательный параметр, уникальный идентификатор. Указывается при выгрузке по флагу выгрузки транзакций flr, полученным функцией RecieveData.
В тело запроса передаётся zip-архив файла отчета в виде строки формата base64.
В ответе нужно указать заголовок: «Content-type:application/json; charset=utf-8».
строка JSON с атрибутами:
errcode - код ошибки, 0 - ошибок нет, 1 - пакет с данным номером уже обработан, > 1 - другие ошибки
errmessage - пустая строка или текст ошибки