Пустой параметр ListRezult

Mini web-сервер для печати чеков на фискальных регистраторах из мобильных приложений через HTTP запрос JSON.
Вадим
Сообщения: 7
Зарегистрирован: 06 дек 2019, 18:25

Пустой параметр ListRezult

Сообщение Вадим » 06 дек 2019, 18:38

День добрый, имеем установленный Kkmserver v. 2.1.30.17, у которого настроена отправка HTTP/POST уведомлений по таймауту раз в 30 сек на определенный адрес.

С этого адреса Kkmserver забирает команды (например на открытие/закрытие смены) и далее исполняет их, и в теле следующего запроса, в ключе ListRezult должен содержаться результат обработки команд.

В итоге этот параметр ListResult приходит всегда пустой, таким образом система с которой пытаемся настроить интеграцию, не может корректно получать итоговый статус обработки операции.

На приложении приёмщике специально записал лог запросов/ответов, чтобы было понятнее о чем идет речь:

Код: Выделить всё

Запускаем команду прослушки порта 9292 (на него настроена отправка уведомлений из kkmserver):  sudo  tcpflow -p -c -i wlan0 port 9292 2>&1 | tee kkm_request_log.txt


###
### Пришел запрос, т.к. команд для обработки на ккм нету, значит отдаем пустой {"ListCommand":[]}
###

POST /webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver HTTP/1.1
Authorization: Basic Og==
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Referer: http://***.***.182.80:9292/webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver
Accept: application/json
Content-Type: application/json
Host: ***.***.182.80:9292
Content-Length: 58
Expect: 100-continue
HTTP/1.1 100 Continue
{"Command":"GetCommand","Token":"token_str","ListRezult":[]} 

# ОТВЕТ: 

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 18
{"ListCommand":[]}


###
### Следующий запрос, тут у нас уже есть одна команда на открытие смены
###


POST /webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver HTTP/1.1
Authorization: Basic Og==
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Referer: http://***.***.182.80:9292/webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver
Accept: application/json
Content-Type: application/json
Host: ***.***.182.80:9292
Content-Length: 58
Expect: 100-continue
HTTP/1.1 100 Continue
{"Command":"GetCommand","Token":"token_str","ListRezult":[]}

# ОТВЕТ: 

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 198
{"ListCommand":[{"Command":"OpenShift","NumDevice":"0","IdCommand":"7766ef65-af17-4ffc-958d-2e092ee8d590","CashierName":"Тут имя кассира","CashierVATIN":"111801115111","NotPrint":false}]}


##
## Приходит следующий запрос от kkmserver где мы ожидаем результат обработки, но его нет ни в этом запросе ни в последующих
##

POST /webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver HTTP/1.1
Authorization: Basic Og==
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Referer: http://***.***.182.80:9292/webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver
Accept: application/json
Content-Type: application/json
Host: ***.***.182.80:9292
Content-Length: 58
Expect: 100-continue
Connection: Keep-Alive
HTTP/1.1 100 Continue
{"Command":"GetCommand","Token":"token_str","ListRezult":[]}

# ОТВЕТ: 

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 18
{"ListCommand":[]}


POST /webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver HTTP/1.1
Authorization: Basic Og==
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
Referer: http://***.***.182.80:9292/webhooks/417fac75-a9d9-4cc7-9458-9ecaaa2035cc/kkmserver
Accept: application/json
Content-Type: application/json
Host: ***.***.182.80:9292
Content-Length: 58
Expect: 100-continue
HTTP/1.1 100 Continue
{"Command":"GetCommand","Token":"token_str","ListRezult":[]}


# ОТВЕТ: 

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 18
{"ListCommand":[]}
В разделе kkmserver'a Логи код ответа содержит необходимую информацию, но не могу понять почему этот самый ответ в логе kkmserver'a есть, а в поле ListResult он не передается при последующем запросе?

Audim
Администратор
Сообщения: 1797
Зарегистрирован: 17 мар 2015, 18:36

Re: Пустой параметр ListRezult

Сообщение Audim » 06 дек 2019, 20:05

Пакет мог не дойти..
Перезапросите результат через:
{
Command: "GetRezult",
IdCommand: IdCommand,
}

Аватара пользователя
saratovout
Сообщения: 60
Зарегистрирован: 08 авг 2019, 23:52

Re: Пустой параметр ListRezult

Сообщение saratovout » 06 дек 2019, 21:02

Вадим писал(а):
06 дек 2019, 18:38
ListResult приходит всегда пустой
если ListResult всегда пустой на любые команды, то:
а. Попробуйте tcpflow заменить на что-то другое.
б. Попробуйте убить конфиг kkmserver и настроить вручную "с нуля".

Audim
Администратор
Сообщения: 1797
Зарегистрирован: 17 мар 2015, 18:36

Re: Пустой параметр ListRezult

Сообщение Audim » 07 дек 2019, 03:11

И проверьте что Ваш http сервер не кэширует ответы...

Вадим
Сообщения: 7
Зарегистрирован: 06 дек 2019, 18:25

Re: Пустой параметр ListRezult

Сообщение Вадим » 08 дек 2019, 18:28

Audim писал(а):
06 дек 2019, 20:05
Пакет мог не дойти..
Перезапросите результат через:
{
Command: "GetRezult",
IdCommand: IdCommand,
}
Если бы пакеты через раз приходили, то ок, вопросов нет, можно и дозапрашивать, в моем же случае от меня уходит команда, допустим открыть смену, печатается чек на терминале, в логе ккмсервера написано что ответ ушел корректно, при этом у меня во всех логах пустота.
И так на все попытки, что открытие, что закрытие смены.

Вадим
Сообщения: 7
Зарегистрирован: 06 дек 2019, 18:25

Re: Пустой параметр ListRezult

Сообщение Вадим » 08 дек 2019, 18:35

saratovout писал(а):
06 дек 2019, 21:02
Вадим писал(а):
06 дек 2019, 18:38
ListResult приходит всегда пустой
если ListResult всегда пустой на любые команды, то:
а. Попробуйте tcpflow заменить на что-то другое.
б. Попробуйте убить конфиг kkmserver и настроить вручную "с нуля".
а. уже пробовал, аналогично пустой ответ и тут момент такой, я думаю что если бы что-то выпоняло фильтрацию, то зафильтровывало бы весь все содержимое POST Запроса. В моем же случае получается выборочно затирается ListRezult ключ. Ещё пробовал исходящий трафик со стороны машины на которую установлен kkmserver промониторить, но что-то сходу не нашел как это в wireshark делается.
б. пробовал на другом компе в этой же самой сети разворачивать, результат аналогичный.

И ещё один странный момент, если настроить устройство-эмулятор, и по посылать команды на него, то ListRezult прилетает корректно заполненный.

Аватара пользователя
saratovout
Сообщения: 60
Зарегистрирован: 08 авг 2019, 23:52

Re: Пустой параметр ListRezult

Сообщение saratovout » 08 дек 2019, 19:55

Вадим писал(а):
08 дек 2019, 18:35
странный момент, если настроить устройство-эмулятор, и по посылать команды на него, то ListRezult прилетает корректно заполненный.
Судя по вашему комментарию, копать нужно в сторону прошивки вашего устройства и совместимости ее с версией kkmserver.

Хотя, я всё-таки склоняюсь к тому, что дело в логировании -- не понимает вложенный ассоциативный массив и/или проблема с русской локалью.

Вадим
Сообщения: 7
Зарегистрирован: 06 дек 2019, 18:25

Re: Пустой параметр ListRezult

Сообщение Вадим » 09 дек 2019, 16:14

saratovout писал(а):
08 дек 2019, 19:55
Вадим писал(а):
08 дек 2019, 18:35
странный момент, если настроить устройство-эмулятор, и по посылать команды на него, то ListRezult прилетает корректно заполненный.
Судя по вашему комментарию, копать нужно в сторону прошивки вашего устройства и совместимости ее с версией kkmserver.

Хотя, я всё-таки склоняюсь к тому, что дело в логировании -- не понимает вложенный ассоциативный массив и/или проблема с русской локалью.
Дописал часть логики в своем приложении, теперь если не был получен ответ через поле ListRezult, то я дозапрашиваю статусы этих операций:

Код: Выделить всё

{"ListCommand":[{"Command":"GetRezult","IdCommand":"b8195858-f984-4e8c-989f-8b620ba2293d"},{"Command":"GetRezult","IdCommand":"75eb8447-0395-4e97-982b-91d9306a5617"},{"Command":"GetRezult","IdCommand":"cae401f2-2653-4464-b806-9a9f615a7922"}]}
Но тут опять на выходе имею тоже самое, ListRezult пуст.

Ещё странный момент обнаружил, для чего от kkmserver запросы приходят с заголовком: `Expect: 100-continue`?

Аватара пользователя
saratovout
Сообщения: 60
Зарегистрирован: 08 авг 2019, 23:52

Re: Пустой параметр ListRezult

Сообщение saratovout » 09 дек 2019, 16:32

Вадим писал(а):
09 дек 2019, 16:14
Ещё странный момент обнаружил, для чего от kkmserver запросы приходят с заголовком: `Expect: 100-continue`?
:idea: А давайте вы попробуете принудительно использовать HTTP/1.0? И скажите результат..

Вадим
Сообщения: 7
Зарегистрирован: 06 дек 2019, 18:25

Re: Пустой параметр ListRezult

Сообщение Вадим » 09 дек 2019, 17:57

saratovout писал(а):
09 дек 2019, 16:32
Вадим писал(а):
09 дек 2019, 16:14
Ещё странный момент обнаружил, для чего от kkmserver запросы приходят с заголовком: `Expect: 100-continue`?
:idea: А давайте вы попробуете принудительно использовать HTTP/1.0? И скажите результат..
не совсем понимаю зачем это делать, ведь клиент по сути говорит, что он желает общаться по HTTP 1.1 по логу запроса это видно.

Ответить