Форум OlegON > Программы и оборудование для автоматизации торговли > Другие вопросы

Алгоритм отправки кассовой продажи через УТМ : Другие вопросы

22.11.2024 13:05


29.09.2015 15:33
Проштудировал документацию по УТМ 1.1...
Коллеги, извиняюсь за м.б. глупые вопросы - только вникаю...
Кто уже разобрался, прошу пояснить

Насколько я понял, алгоритм кассовой продажи должен быть следующий:
1. Для алкогольной продукции программа должна сфоровать текстовый XML-файл, (корректен ли пример из документации(выделил синим)? какая кодировка создаваемого текстового файла может быть - строго UTF-8 или допускается Windows(ANSI)?)

<?xml version="1.0" encoding="UTF-8"?>
<Cheque inn="5036032527"
kpp="525745007"
address="Нижний Новгород,К.Маркса пр-т,7,А"
name="Пятёрочка"
kassa="3"
shift="735"
number="2187"
datetime="2003141459">
<Bottle price="352.89"
barcode="19N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947109"
ean="177736216338" volume="1.0000" />
<Bottle price="123.45"
barcode="19N00000XOPN13MM66T0HVF311220130003476539219152175585956302712947109"
ean="177736216338" volume="0.7500" />
</Cheque>


А как быть если количество бутылок две и более? Кстати, алкогольная марка уникальная на каждую бутылку? Если, видимо, так и есть, то это объяснет отсутствие тега количества. Получается, на каждую марку делаем <Bottle price? А если применяется дисконтная карта, то здесь уже цена c учетом предоставленной скидки?

2. Отправляю XML через curl
Код:
curl -F ''xml_file=@check.xml'' http://localhost:8080/xml
3. Дальше не знаю... В документации есть пример возвращаемой квитанции, но не нашел какой коммандой Curl ее запросить? И где сформируется файл квитанции? Дальше что с квитанцией делаем - парсим XML и разбираем?
29.09.2015 17:33
Привет Всем!

Вроде бы новую тему не создавал - Админы перенесли...


вижу что curl возвращает ответ в коммандную строку, можно ли это как-то направить в файл или Clipboard?

Читаю в документации:
Код:
Отправить xml-файл чека АП или пивного чека в УТМ командой:

curl -F "xml_file=@Cheque.xml" http://localhost:8080/xml

В ответ УТМ подпишет чек и вернет цифровую подпись
Блин, голову сломал, куда вернет, как получить квитанцию? какова последовательность действий?

Может быть необходим дополнительный запрос или разбор журнала УТМ определенной командой или последовательностью команд?
30.09.2015 08:00
1. Вроде как там везде кодировка UTF-8, без вариантов.
2. В приведенном вами примере примере уже ДВЕ разные бутылки. Т.е. один пакет - один кассовый чек, в пакете в Bottle все бутылки по очереди...
30.09.2015 08:23
Цитата:
SouthRegion вижу что curl возвращает ответ в коммандную строку, можно ли это как-то направить в файл или Clipboard?
можно - воспользоваться принтскрином, написать программу что будет перехватывать стандартный вывод ну или просто переписать все это ручками в файл сразу в удобном для тебя формате

а если серьезно

Цитата:
SouthRegion Читаю в документации:
Код:
Отправить xml-файл чека АП или пивного чека в УТМ командой:

curl -F "xml_file=@Cheque.xml" http://localhost:8080/xml

В ответ УТМ подпишет чек и вернет цифровую подпись
Блин, голову сломал, куда вернет, как получить квитанцию? какова последовательность действий?
воспользуйся поиском по форуму - Олег приводил хелп по курлу
или набери в командной строке
Код:
C:\Windows\system32>curl --help
в ответ будет

Usage: curl [options...] <url>
Options: (H) means HTTP/HTTPS only, (F) means FTP only

и далее куча параметров среди которых

-o, --output FILE Write to FILE instead of stdout

т.е. применительно к твоей команде
Код:
curl -F "xml_file=@Cheque.xml" http://localhost:8080/xml -o "ChequeFromUTM.xml"
квитанция будет в "ChequeFromUTM.xml" вместо командной строки\экрана
никаких доп запросов или последовательности команд делать не надо
30.09.2015 12:05
Цитата:
student
т.е. применительно к твоей команде
Код:
curl -F "xml_file=@Cheque.xml" http://localhost:8080/xml -o "ChequeFromUTM.xml"
квитанция будет в "ChequeFromUTM.xml" вместо командной строки\экрана
никаких доп запросов или последовательности команд делать не надо
Это уже что-то, спасибо!
Коллеги, предлагаю коллективно создать алгоритм действий при обработке кассового чека, прошу поправить и дополнить:

1. Если в чеке присутвует алкоголь то проверяем доступность домашней страницы УТМ (если она доступна, значит УТМ установлен, JaCarta подключена и т.п.)
Код:
   curl -X GET http://localhost:8080
в качестве положительного ответа можно проверять наличие в отчете какой-то обязательной строки, да хоть
Код:
<h3>Версия транспортного модуля::</h3>
2. формируем файл Cheque.xml в кодировке UTF-8
3. удаляем, если есть "старый" ChequeFromUTM.xml
3. даем команду
Код:
curl -F "xml_file=@Cheque.xml" http://localhost:8080/xml -o "ChequeFromUTM.xml"
и ожидаем появления ChequeFromUTM.xml опрашивая папку (я так понимаю он появится там же где и Curl раз путь не указан) на появление файла. Тут вопрос -сколько по времени его ждать?

4. Если файл все-таки появился, открываем его, контролируя истинность содержимого по какому-то признаку, допустим по наличию
Код:
<url>https://check.egais.ru
если все Ok, то парсим и формируем "Подотчет чека". И что будет в содержимом квитанции если по одному "barcode" будет одобрение, а по другому нет? Как это узнать?

Кстати, если бутылок одного типа две и более "Подотчет чека" чем-то отличается от единичного, или этот "Подотчет чека" выдается по одному на каждый тип (наименование) АП?


p.s. я попробовал обрабатывать не через Curl, а через POST-GET самой среды программирования - опрашивать Localhost порта 8080 - вроде тоже работает...
30.09.2015 13:53
Цитата:
SouthRegion И что будет в содержимом квитанции если по одному "barcode" будет одобрение, а по другому нет?
я писал уже на форуме что утм дает одобрение только на проверку реквизитов запроса - никакие другие моменты он (пока) не проверяет и если в одном из реквизитов проблемаа - не проходит весь запрос сколько бы внутри бутылок не было

Цитата:
SouthRegion и ожидаем появления ChequeFromUTM.xml опрашивая папку (я так понимаю он появится там же где и Curl раз путь не указан) на появление файла. Тут вопрос -сколько по времени его ждать
смысла мониторить папку нет, если не запускаешь курл в асинхронном потоке, просто когда команда отработает файлик там гарантированно будет (кстати путь можно указать и не заставлять курл писать в программ файлс куда он по дефолту сетапом ставится) :) по времени - ровно столько сколько и при выводе в командную строку - впрочем никто не мешает попробовать самостоятельно - вдруг результаты другие будут

Цитата:
SouthRegion обрабатывать не через Curl, а через POST-GET самой среды программирования - опрашивать Localhost порта 8080 - вроде тоже работает...
также писал что можно идти таким путем, только вот в лоб решить задачу у меня не получилось - проблема с правильным формированием заголовка (ну не спец я в этом :( ) и выставлением атрибутов при посылке - утм практически всегда на ручной запрос в обход курла отвечает либо еррор 400 либо 500
мониторить посылки курла не стал - смысла особого не увидел тем более что с ним есть возможность состряпать независимый шаблон для команд\чеков (вдруг в будущем они поменяются от наших придурков всего можно ожидать)

Цитата:
SouthRegion Кстати, если бутылок одного типа две и более "Подотчет чека" чем-то отличается от единичного, или этот "Подотчет чека" выдается по одному на каждый тип (наименование) АП?
квитанций всегда вернется ровно столько сколько запусков курла\запросов будет, в принципе ничего не мешает по чеку формировать столько запросов сколько будет бутылок чтобы конкретно ловить проблемы реквизитов, вот только утм при появлении дубля номера смены\чека которые он уже принял будет выдавать сразу отказ :) т.е. на чек всегда будет одна квитанция и один подрасчет

пы сы
рекомендую внимательно поизучать форум на предмет уже сформированных ответов
Часовой пояс GMT +3, время: 13:05.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.