|
Батник для получения "единого токена в формате UUID", может кому-то пригодится. | ☑ | ||
|---|---|---|---|---|
|
0
MWWRuza
гуру
26.09.26
✎
17:20
|
BAT-файлик, скриптик для формирования токена UUID.
https://cloud.mail.ru/public/ow2f/KHEM3gn2j На входе - отпечаток КЭП и ИНН, заменить в файле. Там все с подробными комментариями. Для чего - вам виднее. В принципе, это токен TrueAPI, работаеющий везде в ЧЗ, где вообще токен работает. Делался для помещения в планировщик винды, запуск раз в 10 часов (ну, или чуть меньше, для запаса) и последующего копирования и загрузки в кассы. Этот кусок кода, запихивающий токен в кассовые программы, не прикладываю, так, как это сугубо индивидуальное дело, в зависимости от кассовых программ. Полная версия у меня под УКМWIN, но, я думаю тут мало кто ее использует. С 01.10.2026 - токен X_API_Key могут отключить, и разрешительный режим перестанет работать, кроме касс с ТСПИоТом... Но, чего греха таить - не все пока на ПИоТ перешли, и зачастую - по независящим от них обстоятельствам... Да, у кого АТОЛы или Штрихи и не перешли на ПИоТ - это тоглько от лени или жадности. Но, пока еще много ККТ, для которых ПИоТов в реестре еще нет... Отключат/не отключат - 50/50, как встретить динозавра свернув за угол - или встретишь или нет. Пока, скажу по секрету :-))) на кассах вместо X-API-Key работает и "единый в формате UUID". Его не отключат точно, на нем весь документооборот ЧЗ держится :-) Но, могут "прибить" авторизацию на CDN по нему, или вообще положить сервера CDN, кроме ПИоТовских... Но, тут уже никто ничего гарантировать не может, как повезет. Пока - так. PS На компе, где запускаете этот батник, естественно должна быть доступна КЭП (любая - или владельца бизнеса или физика с МЧД), КриптоПро и CuRl. |
|||
|
1
AleksNew
26.09.26
✎
09:54
|
А почему ИНН и отпечаток не передавать в качестве параметра?
|
|||
|
2
MWWRuza
гуру
26.09.26
✎
18:44
|
Передавайте, кто мешает :-)))
Просто мне нет смысла - я этот батник не пишу руками, я его генерю из обработки своей рабочей "клюшечной" конфы, в готовом виде, у меня в него при генерации подтягиваются и отпечаток и ИНН из справочников базы, сразу при генерации. Так-же, как и имена файлов и пути, для загрузки полученного токена в кассовую программу. Передавать "потом" еще что-то - для меня нет смысла. Из этой-же обработи, я и планировщиком "рулю", вот: ![]() Сам скрипт, у меня конечно сложнее, там и файлы для касс формируются, и копируются на кассы, с повторами, если каталоги загрузки на кассах не доступны(например, пришли на работу и кофе пьют, а кассы не включили пока). Но, этот кусок я не выкладываю - он сделан под конкретную кассовую программу, "УКМWIN", которой кроме меня тут вряд-ли кто-то пользуется. А та часть скрипта, которая выложена - универсальная. Вы можете дописать, что нужно Вам, и на вход параметры передать, и полученное на выходе как-то применить. Сейчас, в этом виде как выложен - он просто строку в окошко CMD выводит, и все. PS Я что подумал... Для типовых 1С смысла в этом батнике особого нет - там, где кассы работают из самой 1С, внешнее что-то и не нужно. Внутри конфы есть типовые механизмы для получения такого токена, надо только разобраться как заставить кассы при проверке по РР использовать его, а не X-API-Key. Не знаю, или код править, или может как-то можно даже настройками. У меня в 7.7 - такой токен тоже получается, но я не стал заморачиваться с его обновлением по расписанию, а просто при любом запросе где нужен токен - проверяю сохраненный на срок жизни, и если протух - получаю новый. Можно было-бы конечно организовать рассылку его из конфы на внешние кассы(не 1С, как в моем случае), но это надо держать экземпляр 1С запущеным... А в случае батника, необходимости в этом нет, достаточно, что-бы комп был включен. |
|||
|
3
MWWRuza
гуру
27.09.26
✎
12:02
|
Вот такую штуку еще у себя добавил, что-бы "черное окошко" не отсвечивало 😊))
![]() Живет оно сейчас себе спокойно, "где-то там" втихую крутится, и на кассах всегда живой токен. А как он дальше в ЧЗ жить будет - время покажет. |
|||
|
4
mzelensky
28.09.26
✎
18:51
|
Для памяти
|
|||
|
5
Kigo_Kigo
29.09.26
✎
10:43
|
Выложи содержимое батника сюда, а то у нас на работе за скачку батника можно и по заднице отхватить.
|
|||
|
6
MWWRuza
гуру
30.09.26
✎
19:27
|
Вот:@ECHO OFF :: Включаем расширенную обработку команд setlocal enabledelayedexpansion :: Устанавливаем рабочим каталогом каталог исполняемого файла %~d0 cd %~dp0 :: Отпечаток КЭП, ЗАМЕНИТЬ НА СВОЙ!:: set cert=Отпечаток вашего сертификата :: Адрес продуктивного контура set crpt_url=https://markirovka.crpt.ru :: ИНН организации (обязательно в случае использования сертификата по МЧД), ЗАМЕНИТЬ НА СВОЙ! set inn_mchd=ИНН фирмы :: Запрашиваем ключевую пару при единой аутентификации curl --connect-timeout 10 --max-time 20 -X GET "%crpt_url%/api/v3/true-api/auth/key" -H "accept:application/json" --output answer.json :: Получаем строку из файла ответа answer.json set /p uuid_data=<answer.json :: Анализируем ответ set namedata=%uuid_data:~2,4% If "%namedata%"=="uuid" ( echo %namedata% ) else ( echo %strdt% %uuid_data%>unifiedauth.log endlocal exit /b 0 ) :: Выделяем uuid и data из полученной строки set _uuid=%uuid_data:~9,36% set _data=%uuid_data:~55,32% del answer.json :: Создаём файл с полученными данными для подписывания echo %_data%>unifiedauth.log :: Убираем переводы строки <unifiedauth.log>datforsign.txt (for /f %%c in ('more') do @<nul set/p="%%c") :: Подписываем полученные данные data (должен быть отпечаток доступной КЭП), а ответ от утилиты - сохраняем в файл лога "C:\Program Files\Crypto Pro\CSP\csptest.exe" -noerrorwait -sfsign -sign -in datforsign.txt -out datforsign.sig -base64 -my %cert% -addsigtime -add > unifiedauth.log :: Выделяем из файла unifiedauth.log последнюю строку с ErrorCode (в переменную LastLine) for /f "usebackq delims=" %%b in ("unifiedauth.log") do (set LastLine=%%b) :: Анализируем ErrorCode (переменную LastLine) на успешное выполнение подписания произвольных данных if "%LastLine%" NEQ "[ErrorCode: 0x00000000]" ( echo %strdt% {"error_message":"the certificate was not found"}>unifiedauth.log del answer.json del datforsign.txt endlocal exit /b 0 ) del datforsign.txt :: Убираем переводы строки <datforsign.sig>signatura.sig (for /f %%c in ('more') do @<nul set/p="%%c") :: Формируем JSON <signatura.sig>data.json ( echo\^{^"uuid^"^:^" echo %_uuid% echo\^"^,^"data^"^:^" for /f %%c in ('more') do @<nul set/p="%%c" If %inn_mchd% NEQ "" ( echo\^"^,^"inn^"^:^" echo %inn_mchd% echo\^"^,^"unitedToken^"^:^" echo true ) echo\^"^}) del datforsign.sig del signatura.sig :: Убираем перевод строки <data.json>queryauthkey.json (for /f %%c in ('more') do @<nul set/p="%%c") del data.json :: Запрашиваем аутентификационный токен curl --connect-timeout 10 --max-time 20 -X POST "%crpt_url%/api/v3/true-api/auth/simpleSignIn" -H "Content-Type:application/json" -H "accept:application/json" -d @queryauthkey.json --output answer.json del queryauthkey.json :: Получаем строку из файла ответа answer.json set /p uuid_data=<answer.json set uuidToken=%uuid_data:~15,36% :: Отладка сообщаем полученный токен set expireDate=%uuid_data:~66,24% echo( echo %uuidToken% echo %expireDate% del answer.json :: Оставляем окно CMD на экране до нажатия любой клавиши pause :: Токен в переменной uuidToken, дальше делайте с ним что хотите - копируйте куда-то, сохраняйте в файл и т.д... Тут уже от программы зависит, в которой вы хотите его использовать. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |