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

Авторизация в ЭДО лайт, и новый формат токена UUID - ? : Маркировка

18.08.2026 21:20


03.11.2025 19:15
Добрый день!
А ни кто не разбирался с этим вопросом?
Скриншот из описания API ЭДО лайт(свежее, только что скачал):

Но... Не работает ЭДО лайт по токену UUID... Нет, понятно, что подписание документов и не будет работать ни по каким токенам - тут требуется "живая" ЭЦП...
Но, просмотр списка документов и загрузка их "себе" на компьютер, прекрасно работает по токену...
Но, только по токену формата JWT, которыфй грозятся скоро отключить, по токену UUID вместо строки json ответа на запрос, возвращается обратно сам токен UUID...
Для всех методов TrueAPI, не требующих подписания документов, работают токены обеих форматов...
Это что, в описании API ЭДО лайт, ошибка - типа скопипастили раздел авторизации из описания TrueAPI, и типа все нормально? Или я чегор-то не понял?
Для всех методов TrueAPI токены обеих форматов работают без изменения запросов, и адреса те-же, и авторизация bearerr <токен>...
Ладно когда еще в начале лета, это в описание добавили - попробовал, не работает, фиг с ним, подождем, может еще не сделали...
Но, сейчас то, уже пора бы...
05.11.2025 12:39
я не видел даже это изменение. попробовал сегодня, так же. методы true api работают с токеном uuid (пробовал статус марки, информацию о товаре), а методы в эдо лайт возвращают статус = неавторизаван (HttpStatusCode.Unauthorized) и внутри переданный uuid токен
подождать наверное надо, ближе к марту разработчики эдо лайта увидят это изменение в документации и допилят)
05.11.2025 12:44
))
Ок. А то я уж думал, может я чего-то косячу, что у меня так...
05.11.2025 12:47
Цитата:
jokerpnz разработчики эдо лайта увидят это изменение в документации и допилят)
Это вообще блеск! ))
В стиле ЦРПТ...
Сначала написать описание к API, как вдумается, а потом подгонять под это описание сам API, а не наоборот
07.11.2025 10:56
MWWRuza, подскажите , вы кажется выкладывали код на 7.7 для работы с ЭДО лайт. Можете поделиться? перевести на 8-ку в свою самописку
07.11.2025 11:32
Что нужно конкретно?
Полностью код я не выкладывал, у меня обработка работы с ЭДО лайт - это часть конфигурации.
Она не самодостаточна, куча процедур и функций общих для всего - в глобальном модуле...
Так-же, там используется обработка сопоставления номенклатуры со своей и создание новой при ее отсутствии в базе...
Как Вы понимаете - она полностью завязана на метаданных конффы - справочники, перечисления, документы и все такое...
Выдрать это целиком из конфы - не получится.
А вот отдельные процедуры и функции - пожалуйста.
Напишите, что не получается - выложу.
07.11.2025 12:08
спасибо, хотел сделать что то как в ЛК ЧЗ одна кнопка, просто подписать, без сопоставления, без разбора содержимого ЭДО доков. Даже просят автоматом. Попробую поискать документацию. Получение токена я думаю похожее у меня есть, через сертификат (для вскрытия кег).
07.11.2025 17:17
Ну... Токеном Вы тут не обойдетесь, для подписания документа нкжна "живая" КЭП...
Сама процедура вот:

Процедура ПодписатьДокумент()
Вид = ТЗ.ПолучитьЗначение(ТЗ.ТекущаяСтрока(), "ТипКод");
Если Вид < 0 Тогда
Предупреждение("Подписание неформализованных дркументов из сторонних
|программ в Честном Знаке не реализовано!
|Воспользуйтесь личным кабинетом Честного Знака...", 10);
Если Вопрос("Открыть личный кабинет ЧЗ-?", 4) = 6 Тогда
ПутьКБраузеру = глБраузерПоУмолчанию();
Если ПутьКБраузеру = 0 Тогда
ЗапуститьПриложение("https://markirovka.crpt.ru/dashboard");
Иначе
ЗапуститьПриложение(ПутьКБраузеру + " " + "https://markirovka.crpt.ru/dashboard");
КонецЕсли;
КонецЕсли;
СтатусВозврата(0);
Возврат;
КонецЕсли;
Если Вопрос("Вы уверены, что хотите подписать документ?", 4) = 7 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
СтТекСтр = ТЗ.ТекущаяСтрока();
ИД = СокрЛП(ТЗ.ПолучитьЗначение(СтТекСтр, "ID"));
Если ПустоеЗначение(ИД) = 0 Тогда
СзПодп = СоздатьОбъект("СписокЗначений");
СзПодп.ДобавитьЗначение(Контекст, "Конт");
СзПодп.ДобавитьЗначение("Подписываем", "Действие");
ОткрытьФормуМодально("Обработка.ДанныеПодписанта", СзПодп);
Если ПустоеЗначение(СзПодп.Получить("Вып")) = 1 Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
ПроверитьПолучитьТокен();
Состояние("Иидет получение ИзвещенияОтправителя, пожалуйста подождите!");
ИмФайлаXMLИзвОтпр = ПолучитьXMLизвОтпрПоИД(ИД, СокрЛП(ТЗ.ПолучитьЗначение(СтТекСтр, "IDквитИзвОтпр")));
СигнДока = ПолучитьЭЦПизИзвОтпр(ИмФайлаXMLИзвОтпр);
ИмФайлаXML = ВернутьИмяВременногоКаталогаДляУПД(ИД) + "\DocEDO" + СокрЛП(ИД) + ".xml";
Если ФС.СуществуетФайл(ИмФайлаXML) = 0 Тогда
Состояние("Иидет получение XML входящего УПД, пожалуйста подождите!");
ИмФайлаXML = ПолучитьХМЛДокумента(ИД);
КонецЕсли;
ПутьКДоку = ИмФайлаXML;
Если ПустоеЗначение(ПутьКДоку) = 1 Тогда
Сообщить("Не удалось загрузить входящий документ!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
// Отладка скопируем исходный документ
Если Отл = 1 Тогда
ФС.КопироватьФайл(ПутьКДоку, "C:\Temp\Doc.xml", 0);
КонецЕсли;
СзРеквПодпДДока = ПолучитьДанныеДокаДляПодписанияXMLLite(ПутьКДоку,, СзПодп.Получить("ДатаПодп"));
СтрТитула = СформироватьХМЛинфПокупателяXMLLite(СзРеквПодпДДока, СигнДока, СзПодп);
Если СтрТитула = "" Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли;
Состояние("Идет подписание документа, пожалуйста ожидайте!");
ВыхФайл = ПодписатьТекст(СтрТитула, СокрЛП(глПользователь.ЭЦП.Отпечаток), , 1);
СигнДокаИнфПок = СокрЛП(УбратьПереносыСтрок(ВыхФайл));
// Отладка запишем текст эцп
Если Отл = 1 Тогда
Тхт = СоздатьОбъект("Текст");
Тхт.ДобавитьСтроку(СигнДокаИнфПок);
Тхт.Записать("C:\Temp\NewTitulSign.txt");
КонецЕсли;
СзКарл = СоздатьОбъект("СписокЗначений");
СзКарл.ДобавитьЗначение(СтрТитула, "СтрТитула");
СзКарл.ДобавитьЗначение(ИД, "ИД");
СзКарл.ДобавитьЗначение(СигнДокаИнфПок, "СигнДокаИнфПок");
СзКарл.ДобавитьЗначение(СзРеквПодпДДока.Получить("ИмХМЛИнфПок"), "ИмяФайлаИнфПок");
Состояние("Идет отправка подписанного документа на сервер ЭДО. Ожидайте!");
Вер = СзРеквПодпДДока.Получить("ВерсФормата");
Если СзРеквПодпДДока.Получить("ВидОперации") = "Исправление" Тогда
Url = АдресСервераЭДО + "/api/v1/incoming-documents/xml/updi/title";
Иначе
Если СзРеквПодпДДока.Получить("АтрФункция") = "КСЧФДИС" Тогда
Url = АдресСервераЭДО + "/api/v1/incoming-documents/xml/ukd/title/736";
Иначе
Если Вер = "5.03" Тогда
Url = АдресСервераЭДО + "/api/v1/incoming-documents/xml/upd/title/970";
Иначе
Url = АдресСервераЭДО + "/api/v1/incoming-documents/xml/upd/title";
КонецЕсли;
КонецЕсли;
КонецЕсли;
СтрОшибка = "";
Если (Отл = 1) И (флПодп = 0) Тогда
Ответ = "";
Иначе
Ответ = глКарлик_ВыполнитьЗапрос("POST", Url, ТекТокен,, СтрОшибка, СзКарл, 1, Отл, 0);
КонецЕсли;
Если ПустоеЗначение(СтрОшибка) = 0 Тогда
Если (СокрЛП(СтрОшибка) = "200") Или (СокрЛП(СтрОшибка) = "201") Тогда
Сообщить("Документ успешно подписан!");
Иначе
ОписОш = "Ошибка " + СокрЛП(СтрОшибка) + " " + СокрЛП(Ответ);
Тхт = СоздатьОбъект("Текст");
Тхт.ДобавитьСтроку(ОписОш);
Попытка
Тхт.Записать("C:\Temp\ОшОтпр" + ИД + ".txt");
Исключение
КонецПопытки;
ВывестиОшибкуВТабло(Ответ);
КонецЕсли;
КонецЕсли;
// Отладка запишем результат
Если Отл = 1 Тогда
Тхт = СоздатьОбъект("Текст");
Тхт.ДобавитьСтроку(Ответ);
Тхт.Записать("C:\Temp\ОтвОтпрИнфПокtxt");
КонецЕсли;
ОбновитьСписок();
ТекСтрДляКвПросм = "";
Если ТЗ.НайтиЗначение(СокрЛП(ИД), ТекСтрДляКвПросм, "ID") = 1 Тогда
ИдКвитПросм = СокрЛП(ТЗ.ПолучитьЗначение(ТекСтрДляКвПросм, "IDквитИзвПол"));
Если ПустоеЗначение(ИдКвитПросм) = 0 Тогда
ПодписатьКвитПоИД(ИД, ИдКвитПросм);
ОбновитьСписок();
КонецЕсли;
КонецЕсли;
ТЗ.ТекущаяСтрока(СтТекСтр);
ОбнСп = 1;
КонецЕсли;
КонецПроцедуры

Но, там куча ссылок на другие процедуры/функции, что не понятно - пишите, выложу.

Просто "только подписывать" в УС - смысла большого нет. В чем и цимус ЭДО - получать док в готовом виде в УС... А подписание, это уже дело десятое, пох, подписать можно и в ЛК на сайте, ради этого "городить огород" ИМХО не стоит. Вот загрузка доков, что-бы "не набивать руками", это да... Значительное облегчение жизни юзверям...
07.11.2025 18:41
Цитата:
MWWRuza Просто "только подписывать" в УС - смысла большого нет. В чем и цимус ЭДО - получать док в готовом виде в УС... А подписание, это уже дело десятое, пох, подписать можно и в ЛК на сайте, ради этого "городить огород" ИМХО не стоит. Вот загрузка доков, что-бы "не набивать руками", это да... Значительное облегчение жизни юзверям...
В ЭДО есть проблема, в протоколе обмена между операторами не предусмотрена возможность передачи грузополучателя, все документы передаются скопом на юрлицо (ип). Даже если отдельный оператор предусмотрел такое у себя (как Диадок), это работает только когда оба контрагента пользуются услугами этого оператора.
Таким образом, в сетях магазинов все видят общий список документов, поиск своих превращается в забавный аттракцион. В такой ситуации использование апи важно и для подписания документов. Мы в сети продуктовых магазинов прописали у каждого магазина фрагменты адреса (через пробел), затем получаем общий список документов, для каждого из них запрашиваем xml, вытаскиваем из xml адрес грузополучателя, проверяем по ключевым словам и отбираем документы конкретного магазина. Разумеется, результат распознавания кэшируется, так как загрузка и поиск в xml требует времени. Это касается упд, с ксф немного другой алгоритм распознавания.
07.11.2025 21:38
Хм... Есть и ИНН и КПП... Этого не достаточно? Мне как-то хватало, но у меня нет крупных сетей, максимум три ИП "под одной крышей"... Но, у них у каждого свой ИНН. Это не то... Не знаю, меня пока это не коснулось.
Часовой пояс GMT +3, время: 21:20.

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