Имя: Пароль:
IT
Админ
Батник для получения "единого токена в формате 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, дальше делайте с ним что хотите - копируйте куда-то, сохраняйте в файл и т.д... Тут уже от программы зависит, в которой вы хотите его использовать.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой