Разрешительный режим Честного знака | |
---|---|
PavlikPavlikovich Автор Сообщений: 190 Дата регистрации: 21.07.2010 |
Здравствуйте!
Не кидайтесь камнями за вопрос. Я не программист. Делаю что могу своими силами. Чисто для себя. У меня всего одна торговая точка. Мне очень тягостно даётся вся эта канитель с маркировкой. Вроде думаешь всё, работаем. А тут они опять что-то придумали. Вот придумали разрешительный режим. Я понял смысл. Но вот как реализовать я не знаю. Может кто поделиться кодом? Вот на что хватило меня. Но это во первых не работает. Сервер отвечает 200. А во вторых мы же должны запросить сервера проверки. Найти наименее загруженный. Ну и обработку ошибок. Вот подсобрал ещё информацию: Исправлено 1 раз(а). Последнее : PavlikPavlikovich, 05.11.24 13:46 ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
akvvohinc Сообщений: 4560 Откуда: Москва Дата регистрации: 11.11.2008 |
Вы же не сами этот код выдумали, а на основе чего-то. Откуда взялись все эти заголовки, почему возник вопрос GET или POST и т.д и т.п.? Наверно, у вас должно быть описание интерфейса работы с ЧЗ. Для меня, например, слова "Честный знак" значат не больше, чем "Дело табак". И не думаю, что я здесь один такой. Не вижу здесь ничего, касающегося запроса к markirovka.crpt.ru ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
У меня пока до этого места дошло. Примеры брал из методички честного знака. Пробовал подсовывать реальные коды маркировки, которые мы уже отправили в ЧЗ и не отправили, ответ примерно одинаковый. Код фискальника убрал из запроса, разницы нет. Осталось сообразить что из ответов куда вставить. Исправлено 1 раз(а). Последнее : Alsim, 06.11.24 07:00 ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
PavlikPavlikovich Автор Сообщений: 190 Дата регистрации: 21.07.2010 |
Я собрал это из трёх кусков. Где -то было get где-то post. Но я так понимаю что GET правильнее. т.к. нам нужно получить от сервера значение тега 1265 (UUID=&Time=) которое мы потом отправим в ККМ. Для меня "Разрешительный режим Честного знака" это два этапа. 1) Запрос в честный знак 2) Передача данных в ККМ Может вы и правы. Что это уже другая тема. А что у вас проходит так проверка? Вы пихаете код маркировки без криптохвоста. Я могу ошибаться, но надо пихать с ним. Так еще и надо в код маркировки пихать два разделителя "\u001d" Вот исходный код: 010460620309799921yEM1!K9800526900093CbP6240FA083231.05 вот что надо посылать в запросе: 010460620309799921yEM1!K9\u001d8005269000\u001d93CbP6\u001d240FA083231.05 Еще по хорошему как я и писал выше, нужно запрашивать у них список серверов с временем отклика и обращаться к наиболее "быстрому" У вас же вшит один сервер. А вдруг с ним что-то не так. Причём как я понимаю надо обыграть момент того что если нет интернета. Сервера не доступны. Тогда уже в ККМ надо пихать не время проверки, а информацию что проверить не удалось. Как я и писал выше. Нам нужно получить от сервера только одну строку с идентификатором запроса и временем этого заппроса. UUID=&Time= Пример ответа: UUID=b99278f8-fbef-42ff-9159-d1c743760f36&Time=1721227186096 Вот ещё номера ошибок проверки кодов маркировки раздобыл:
Исправлено 3 раз(а). Последнее : PavlikPavlikovich, 06.11.24 09:26 ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
В примере пихаю код из примера. Также вставлял данные из таблицы, где хранятся коды маркировок и помечаются проданными. Вставляю как есть, то есть отсканированный. Тогда ответ 200 с текстом. Пробовал вставлять "доработанный" марккод, как вставляется в файл-чек, который отправляет в ОФД и ЧЗ программа Штрихопечать. На чеке выходит [М+]. В запросе получаю ошибку. На этом пока эксперименты временно закончил. Надо попробовать отправлять кодмарку именно воды и разобрать что он там отвечает про на найден в базе и тд. ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
|
Re: Разрешительный режим Честного знака | |
---|---|
Евгений Банщиков Сообщений: 235 Откуда: Kurgan Дата регистрации: 09.04.2004 |
В марке нужно экранировать символы '\' '"' '/' . Так же обязательно передавать символ разделитель GS (ASC 29) и он так же должен быть экранирован.
В самой команде нужно экранировать символ кавычек , задваивая его :
![]() |
Re: Разрешительный режим Честного знака | |
---|---|
PavlikPavlikovich Автор Сообщений: 190 Дата регистрации: 21.07.2010 |
У меня вопрос. Мы же потом будем пихать код маркировки через переменную. Тогда же ничего задваивать не надо? Я сделал вот так:
Спасибо, добавил в код. Что-то у меня пока тест не проходит. Выдаёт ошибку 8 -КМ не прошел верификацию в стране эмитента/ошибка разбора КМ. Предполагаю это потому что я сканировал код сканером в блокнот и вставил сюда. Разделители потерялись видимо. ПОДСКАЖИТЕ Я запихал Json ответ в строку. И пытаюсь её так разобрать. Я в правильном направлении?
Я нашёл пример для 1с Тут они из строки выдирают параметры. В Фоксе аналог этой функции STREXTRACT() ?
При всём уважении. Не ругайте. Я не понимаю что это такое curl. Не программист я. Это аналог всего того что я сейчас пытаюсь сделать? Пытаюсь что-то слепить из кусков. Как удачный тест будет. Выложу Исправлено 1 раз(а). Последнее : PavlikPavlikovich, 07.11.24 16:33 ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Евгений Банщиков Сообщений: 235 Откуда: Kurgan Дата регистрации: 09.04.2004 |
Если вы делаете запрос через WinHttp.WinHttpRequest , то наверно задваивать не надо. Я использую утилиту curl.exe , там это делать необходимо. Да ,cкорее всего нет разделителей GS До анализа Json с данными надо проверить на интернет ощибки (типа Failed to connect или Connection timed out') Примерно так
Вам в ответ приходит строка в формате Json. Ее нужно распарсить. В винде нет встроеного парсера json , в VFP тоже поэтому или ищите стороний парсер или пишите свой , через strextract или getwornum , это не сложно. С начала анализируйте своиство ErrorCode. Если оно больше 0 , то берете текст ошибки из свойства Message Если ErrorCode=0 , анализируйте данные дальше согласно методички ЧЗ Примерно так
![]() |
Re: Разрешительный режим Честного знака | |
---|---|
andrewk Сообщений: 221 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Я слабо представляю кто такой «Честный знак». Но, пробежавшись по теме, замечу:
Здесь во всех 'CASE errorCode =' знак '=' лучше б заменить на '=='. Потому что при Set Exact OFF на errorCode="10" ответ получите неверный. Я давно использую nfJson. Он на чистом VFP. Всякое делает, но для данной задачи нужен только nfJsonRead.prg – он парсит JSON-строку или файл в Empty-объект либо массив. Я в нём правил маленько, если интересно могу скинуть. Есть JSONFox. С ним не разбирался. Есть вариант на VFP, а есть готовая dll на C# (автор пишет, что работает быстрее). ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
Спасибо, стало немного легче. Разобрал ответ по полочкам, анализирую ответы. *** Если отсылаю код платка, он возвращает код (там нет кода 93) "errorCode":8 "message":"cannot parse code. AiGroupNotSupportedException: AI group [H] is not supported" но он и по фотке в честном знаке как серый определяется, фиг с ним их у нас 15штук и вряд ли кто купит. *** С водой, пивом, газировкой получаю "errorCode":10 "message": "cannot find code [04601501261103******938++l] in db" причем без разницы, продан и передан с чеком в ЧЗ этот товар или нет. онлайн проверку такой код не проходит, "неизвестный кодмарк" обрабатывал кодом Евгения, разницы нет. Тот же результат как от чистого "напиканого". *** если отправляю код так, как он вставляется в чек и благополучно отправляется в ОФД 04601501261103****93ms/a то есть перед 93 и в конце вставляю GS код то ошибка {"code":400,"description":"400 BAD_REQUEST \"Failed to read HTTP message\"","codes":[]} причем этот код прекрасно превращается в штрихкод и проверяется программой честный знак на телефоне. *** Интересно, может это происходит от полученного Токена? Типа он не от нашей базы? *** *** Помню, что когда мы ещё не вставляли кодмарки в чек и выводили товар вручную из оборота, делал файлик для честного знака, он его тоже не принимал ни целиком и с GS кодами, выкрутился тогда отрезая строку кода до 93. *** парсю ответ пока так, может пригодится кому. ps там если errorCode = 8, то встаёт в хвост ответа и за ним нет "," то к коду "}]" добавляется, обрабатываю этот случай. ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
На сладкое, чтоб успокоиться на сегодня отрезал строку до кода 93.
Получаю: "errorCode": 7, "message": "AI 91 for [0104610011501982***********] is invalid", то есть: m.Error = "Ошибка верификации крипто-подписи КМ в ГИС МТ (крипто-ключ не валиден)." Ну уже хоть что-то ![]() ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Евгений Банщиков Сообщений: 235 Откуда: Kurgan Дата регистрации: 09.04.2004 |
Зачем в конце вставляете GS ? Насколько мне известно , он там не нужен. До проверочного режима я просто перед 93 добавлял GS и драивер атолла это нормально принимал и передавал далее в ЧЗ. С онлаин проверкой от ЧЗ такой способ не сработал. Там требуется точно передавать всю структуру. В некоторых видах марок этих GS оказалось до трех штук в разных местах. Поскольку разбираться со всем этим у меня желания не было, я напряг наших спецов по железу и они перепрограммировали все сканеры в режим считывания GS. После этого все ошибки при проверки исчезли. P.S. В методичке от ЧЗ есть набор готовых марок с встроенными ошибками , с помощью которых можно проверить работу софта. Советую использовать их для тестов. (работает только с тестовыми серверами) ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
В соседней теме про ФФД2 forum.foxclub.ru Равиль подсказал Цитата:Сделал примерно так, только длину вычисляю справа до "93", так и чеки пошли в Честный Знак с [М+]. * Сейчас попробовал с хвоста обрезать GS, перегнал в штрих, Честный знак в смартфоне определил. Послал код в разрешительном примере - также ошибка 400. * Сканеры перепрограммировал по методичке Честного Знака, код вставляется в текстбокс и дальше в таблицу, откуда потом берутся в чеки, без GS кодов. Но и без перепрограммирования было также. * Методичку целиком ещё не осилил. Тестовый токен тоже пока получить не удалось. Хочу в понедельник с утра попробовать повторить тесты на компе ГлавБуха, где Сертификаты и всё прочее для ЧЗ установлены и работают. Сам же играюсь на домашнем компе, где кроме крипто ничего нет. ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
PavlikPavlikovich Автор Сообщений: 190 Дата регистрации: 21.07.2010 |
Тут получается мы получили список серверов. Я так понимаю нужно выполнить запрос до каждого из них. При чём замерять время начала обращения к серверу и время его ответа в милисекундах. Потом нужно выбрать наименьшее время отклика и обратиться к этому серверу. Я вижу это так:
Да и что-то опрос этих 11 серверов как-то долговат.. Исправлено 3 раз(а). Последнее : PavlikPavlikovich, 09.11.24 10:28 ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
PavlikPavlikovich Автор Сообщений: 190 Дата регистрации: 21.07.2010 |
Затупил. через second() надо было делать.
"Долговато" эта процедура идёт. Секунды 2-3. Можно как-то ускорить? И это же не перед каждым сканированием надо делать? Может только при запуске программы? Раз в день так сказать. И брать из этой таблицы сервер. Если вдруг среди дня он окажется недоступен, то прать следующий и так далее. Исправлено 2 раз(а). Последнее : PavlikPavlikovich, 10.11.24 09:22 ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
Мысль правильная. У меня в трёх филиалах кладовщики чеки отбивают потоком. Сели, завели возвраты, печатают. Начинают процесс каждая в произвольное время, когда руки дойдут. Видимо надо таймер привязывать, или запоминать факт заведения первого возврата в сутки, делать запрос к серверам как у Вас. *** У меня пока проблема с получением токенов. Понял, что на каждой рабочем месте должен быть свой. Как именно его получить очень приблизительно представляю. Вроде как создать файл с произвольным содержимым, подписать директором ключа и потом это шифрованное содержимое и вложить в тело запроса токена. Руки пока не дошли, текучкой мешаются. ![]() ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
PavlikPavlikovich Автор Сообщений: 190 Дата регистрации: 21.07.2010 |
Токен - один на организацию. Это просто набор символов в кабинете честного знака.
![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Alsim Сообщений: 3682 Откуда: Екатеринбург Дата регистрации: 17.11.2004 |
Не прокатил полученный токен в каобинете ЧЗ, та же ошибка "errorCode": 7
Пробовал на компе с подключенным ключом, где в ЧЗ вход работает. Сгенерил файл подписанный по инструкции olegon.ru не прокатывает получение. Пока у меня эта главная проблема. Разбираюсь. ![]() |
Re: Разрешительный режим Честного знака | |
---|---|
Евгений Банщиков Сообщений: 235 Откуда: Kurgan Дата регистрации: 09.04.2004 |
При первом запуске делаете сканирование , выбираете площадку с наименьшим временем отклика. При каждом выполнении запроса замеряете время , если время запроса превысит заданный вами некий порог (например 3 секунды) , запускаете процедуру выбора площадки по новой. ![]() |
© 2000-2025 Fox Club  |