Имя: Пароль:
1C
1C 7.7
v7: Запрос к API МОТП, возвращает html вместо json - ?
0 MWWRuza
 
гуру
24.01.20
01:03
Добрый день!
Пытаюсь авторизоваться через API "Честного знака", табак...

Описание API: https://xn--80ajghhoc2aj1c8b.xn--p1ai/upload/iblock/056/Polnyy-spisok-API-true_api_v3.4.pdf

Делаю:

wHTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
wHTTP.Option(2,"utf-8");
wHTTP.SetTimeouts(0, 0, 0, 0);

Url = "https://ismotp.crptech.ru/v3/true-api/auth/key";;
wHTTP.Open("GET", Url, 1);
wHTTP.SetRequestHeader("Content-Type", "application/json");
wHTTP.SetRequestHeader("Accept-Charset", "utf-8");
wHTTP.Send();
    
RequestTimeout = 40;
Попытка
    Рез = wHTTP.WaitForResponse(RequestTimeout);
Исключение
    Рез = 0;
    Ответ = ОписаниеОшибки();
КонецПопытки;

Ответ = "";
Если Рез = -1 Тогда
    Статус = wHTTP.status();
        Ответ = СокрЛП(wHTTP.ResponseText());
КонецЕсли;

Статус = 200, вроде все нормально, но!!! Должна вернуться пара строк "uuid" и "data" в json... А в Ответе какая-то web-страница в html, вместо ответа json...
Что-то я совсем запутался в трех соснах, вроде все элементарно... Что я не так делаю?
1 palsergeich
 
24.01.20
01:09
(0) web-страница в html - вот и прочитай что там написано. Любят некоторые ошибки красиво выдавать, но с кодом 200.
2 MWWRuza
 
гуру
24.01.20
01:43
(1)Да пробовал... html не открывается, глазами просто в тексте, тоже ничего не вижу...

Судя по всему, что-то с адресом не так.

    Url = "https://int01.gismt.crpt.tech/api/v3/true-api/auth/key";;
//    Url = "https://ismotp.crptech.ru/v3/true-api/auth/key";;
//    Url = "https://ismotp.crptech.ru/api/v3/true-api/auth/key";;

Первый работает, выдает нормально, то что должен, в json, но, это типа "тестовая площадка".
Второй выдает что-то не понятное в html,
а третий не верный адрес шлюза, ошибка 502...

Из описания:

Url (интеграционный стенд): https://int01.gismt.crpt.tech/api/v3/true-api
Url (промышленный стенд): https://ismotp.crptech.ru/api/v3/true-api
3 MWWRuza
 
гуру
24.01.20
01:58
+(2)html не открывается, глазами просто в тексте, тоже ничего не вижу...

На самом деле, там конечно что-то написано, но как прочитать... Строка около 7000 символов, естественно в табло отладчика не лезет... А сохранить в файл, так:

Тхт = СоздатьОбъект("Текст");
Тхт.ДобавитьСтроку(Ответ);
Тхт.Сохранить("C:\Temp\Otvet.txt");

Сохраняет, но с кодировкой проблемы. Там одна строка на человеческом языке, и то по русски :-( , соответственно вопросиками выводится... Остальное, похоже тело web-страницы... Не понятно, чего ему надо...
4 MWWRuza
 
гуру
24.01.20
02:05
+(3)Не Тхт.Сохранить, а Тхт.Записать конечно, просто уже спать хочу...
5 Сергиус
 
24.01.20
02:42
(0)При переходе по ссылке https://ismotp.crptech.ru/api/v3/true-api/ выдает 502 Bad Gateway, походу на серваке проблемы.
6 MWWRuza
 
гуру
24.01.20
02:44
+(2) Из этих трех адресов, если их из браузера открывать:

"https://int01.gismt.crpt.tech/api/v3/true-api/auth/key";; - Работает, прилетает XML в браузер, но это тестовая площадка. Из запроса возвращается json.

"https://ismotp.crptech.ru/v3/true-api/auth/key";;         - Попадает в web-интерфейс личного кабинета клиента, как просто при вводе адреса.

"https://ismotp.crptech.ru/api/v3/true-api/auth/key";;     - а тут, 502, как из браузера так и из запроса...
7 MWWRuza
 
гуру
24.01.20
02:46
(5) Ага... Надо будет завтра попробовать.
8 big
 
24.01.20
05:46
В продолжение темы вопрос ТС-у.

А как вы будете формировать строку data для получения ключа сессии? Если я правильно понял, это необходимо для юридически значимых операций. Или таких операций у вас не будет, или можно без них обойтись?
9 victuan1
 
24.01.20
07:28
(3) Ну выведи строку в цикле в табло сообщений, разбив по 500 символов в строке.
10 MWWRuza
 
гуру
24.01.20
09:20
(9) Да, можно, но уже и так понятно - там в адресе нет "/api/", оно идет на страничку web-интерфейса ЛК, ну, и что-то там не сростается,запрашивает авторизацию наверно... Но это уже не принципиально - правильный адрес который третий - https://ismotp.crptech.ru/api/v3/true-api/auth/key%22 . А по нему - 502...

(8) Строка "data" должна прилетать с сервера, в ответ на этот запрос, вместе с ключом "uuid", в json. Мне ее нужно подписать ЭЦП и отправить обратно, подписанную, вместе с этим-же ключом, запросом "POST", так-же в json. В ответ, сервер должен вернуть токен, сроком жизни один час. Его нужно использовать во всех последующих запросах. Как-то так... Или я чего-то не правильно понимаю из описания API - ???
11 MWWRuza
 
гуру
24.01.20
09:26
+(10)
Вот, только что:

"[{"uuid":"9d1184fc-bd6d-4006-9942-55db77b2f575","data":"UJNMDZDNNHQMITAPBOCNWAWVFVNRMK"},{"uuid":"9b1751f4-32a5-4ec9-80a2-1c0e335d3019","data":"UBIEOYRKNMUXDBKWMMOFXMHEZKYAIU"}]"

Такое возвращается по первому, тестовому адресу. По третьему, все так-же, 502, хоть из запроса, хоть из браузера...
12 big
 
24.01.20
10:03
(10) Вот меня и интересует - как в 7.7 подписать ЭЦП? Через какой "инструмент" можно это сделать?
13 big
 
24.01.20
10:08
(12) + 1 час "живет" пара uuid-data из (11), а вот то, что вернётся из запроса "/auth/simpleSignIn" уже будет "ключом сессии" (токеном) и будет "жить" 10 часов.

з.ы. сам только начал разбираться, читаю по документации
14 big
 
24.01.20
10:09
(13) + и подписывать ЭЦП-шкой надо будет строку "data" из каждой полученной пары.
15 MWWRuza
 
гуру
24.01.20
10:15
(12) Подписывается нормально, с помощью CAPICOM. Вот была публикация на ИС: http://catalog.mista.ru/public/156973/ , от туда взял алгоритм, успешно работает, и для деклараций алкогольных, и эти данные подписывает. Только, единственное - с "аппраратными ключами", с криптографией "на борту" не дружит. ДжаКарту или Рутокен ЭЦП 2.0 использовать не получается. А с Крипто-прошными или VIP-Net ЭЦП, работает отлично.
16 MWWRuza
 
гуру
24.01.20
10:36
Вот мне пока не понятно, если клиент с ЭЦП зареген в "Честном знаке", на площадке табака... ЛК у него работает, чеки с касс прилетают. Нужно дополнительно регистрироваться для получения доступа через API, плюс внешний статический IP адрес, который надо указать при доп. регистрации, или и так должно работать? Встречал такое в описании регламента, но, там почему-то конкретно про лекарства... Для табака тоже так?
17 big
 
24.01.20
10:39
(15) Спасибо за информацию!!! )
18 MWWRuza
 
гуру
24.01.20
10:43
(13)читаю по документации

Какой адрес "боевой" площадки указан в Вашей документации? А то документаций версий много, и адреса разные, я уже как минимум два видел:

"https://ismotp.crptech.ru/api/v3/true-api";
и
"https://ismotp.crptech.ru/private-office-api/private/v2";

Ни тот ни другой у меня не работает, только тестовый:

"https://int01.gismt.crpt.tech/api/v3/true-api";
19 big
 
24.01.20
10:50
(18) Я читаю, что у вас в первом посте. До самих запросов у меня ещё не дошло
20 MWWRuza
 
гуру
24.01.20
22:38
Вот так: Url = "https://ismotp.crptech.ru/api/v3/auth/cert/key";
Пару получаю, подписываю, токен возвращается...
А дальше - глухо... То, ради чего я это затевал, упорно не работает...
Хочу агрегацию получить, из кода коробки вытащить все коды пачек...
Явно что-то с адресом опять не то, в разных вариантах пробовал - 405, 401, 404 возвращается...
21 MWWRuza
 
гуру
24.01.20
22:39
(20)все коды пачек...

Все коды блоков...
22 MWWRuza
 
гуру
25.01.20
01:13
Победил... В бухгалтерии 3.0 подсмотрел :-)
Вот так должно быть: "https://ismotp.crptech.ru/private-office-api/private/v2/cis/aggregated?cis="; + СокрЛП(КодМаркировки)
КодМаркировки, это код агрегации с коробки, или блока, в зависимости от того, что нужно получить.
23 MWWRuza
 
гуру
25.01.20
01:30
24 MWWRuza
 
гуру
27.01.20
00:13
Вот, скриншот в принципе, "финального" варианта: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-288.jpg
Запрос по ШК короба, выводит 50 ШК блоков, каждый ШК блока расшифровывается в список пачек, всего 500 пачек в коробе.
Не знаю, будет ли это иметь какое-нибудь "прикладное" значение, но, пусть будет.
Сейчас пытаюсь список документов клиента с сервера МОТП получить, пока безрезультатно - то-ли по тому, что их там просто нет, то-ли опять что-то не так описано в описании API(ну, или я не так понял :-))
25 MWWRuza
 
гуру
27.01.20
00:19
+(24) Если сделать запрос по ШК блока, то выводит список пачек, 10 кодов.
Только пришлось "нормализовать" ШК перед передачей на сервер - оставить только часть до первого спец-символа разделителя, и заменить "недопустимые" с их точки зрения символы, согласно таблице замены из описания API.
26 РоманВ_К
 
28.01.20
12:04
(0) А в Ответе какая-то web-страница в html, вместо ответа json...
Я для отладки Фидлер использую, очень удобно. Бесплатный. https://www.telerik.com/fiddler
27 igel1969
 
17.03.20
13:49
(22) так в итоге пришлось авторизоваться или без авторизации выдает?
потому что я без авторизации попробвал Ваш вариант, мне выдает ответ:
<UnauthorizedException><error>unauthorized</error><error_description>Full authentication is required to access this resource</error_description></UnauthorizedException>
28 MWWRuza
 
гуру
17.03.20
14:07
(27) Да нет, авторизуюсь, нормально все, и после авторизации работает запрос вложений в упаковку(агрегации)...
Без авторизации, скорее всего и не должно работать.
29 igel1969
 
17.03.20
14:13
а после подписания date у Вас тоже становится длиной около 5000 знаков? просто в документации по API в примере подписанная date такой же длины как и не подписанная.
30 MWWRuza
 
гуру
17.03.20
20:55
Да, после подписания становится значительно длиннее, сколько символов, я не считал, но много, наверное так и есть...
31 igel1969
 
18.03.20
09:35
(((((((((( ну никак не могу получить токен.
все делаю по инструкции в описании API, который прислала техподдержка:
WinHttp2 = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp2.Open("POST", "https://ismotp.crptech.ru/api/v3/true-api/auth/simpleSignIn",0);
WinHttp2.setRequestHeader("Content-Type","application/json; charset=utf-8");
//WinHttp2.setRequestHeader("Postman-Token","5325d8aa-ba27-44c5-9b10-c02da19f1b0c");  // тут непонятно что писать
WinHttp2.setRequestHeader("cache-control","no-cache");
СтрокаЗапроса = "{""uuid"": """+СокрЛП(Uuid)+""",""data"": """ + ТекстОтвета + """}";
Сообщить(СтрокаЗапроса);
WinHttp2.Send(СтрокаЗапроса);
РезультатСтр = WinHttp2.ResponseText();
Сообщить(РезультатСтр);

получаю ответ:
Ошибка при выполнении запроса
32 Garykom
 
гуру
18.03.20
10:14
(31) Обычно запрос токена идет по http (без s) а уже дальше по https
33 Garykom
 
гуру
18.03.20
10:14
(32)+ Но я могу ошибаться, проверь в мануале
34 ДенисЧ
 
18.03.20
10:18
(32) Ну, у меня (точнее, у того сервиса, что я использую) например авторизация идёт по хттпс...
35 MWWRuza
 
гуру
18.03.20
10:18
Вот так получаю пару:

// Возвращает пары идентификатор-данные для запроса токена
Функция ВернутьПаруЗапрТокена(УРЛ, ПрефиксВерсии)
//    WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.Option(2,"utf-8");
    WinHttp.SetTimeouts(0, 0, 0, 0);
    Url = "https://"; + УРЛ + ПрефиксВерсии + "auth/cert/key";    
    WinHttp.Open("GET", Url, 1);
    WinHttp.SetRequestHeader("Content-Type", "application/json");
    WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
    WinHttp.Send();
    RequestTimeout = 40;
    Попытка
        Рез = WinHttp.WaitForResponse(RequestTimeout);
    Исключение
        Рез = 0;
        Ответ = ОписаниеОшибки();
    КонецПопытки;
    Ответ = "";
    Если Рез = -1 Тогда
        Статус = WinHttp.status();
        Ответ = СокрЛП(WinHttp.ResponseText());
    КонецЕсли;
    СЗ = глРазборJSON(Ответ);
    Возврат СЗ;
КонецФункции

СзКей    = ВернутьПаруЗапрТокена(СокрЛП(Константа.АдресСервисаМОТП), ПрефиксВерсии);

ПрефиксВерсии = "/api/v3/";
36 Garykom
 
гуру
18.03.20
10:19
37 MWWRuza
 
гуру
18.03.20
10:22
Константа адрес сервера: "ismotp.crptech.ru"
38 igel1969
 
18.03.20
10:25
(35) это я уже прошел, получаю, подписываю.
не могу послать запрос с подписанным data на получения токена ((((
39 MWWRuza
 
гуру
18.03.20
10:27
//******************************************************************************
// ПолучитьКлючСессии(code)
//
// Параметры:
//  code
// Возвращаемое значение:
//  token
//
// Описание:
Функция ПолучитьТокенЦРПТ(ВыбЭЦП, ПрефиксВерсии, СтрОшибка="",life_time=0) Экспорт
    Перем Сигнатура;
    Перем uuid;
    Перем code;
    СзКей            = ВернутьПаруЗапрТокена(СокрЛП(Константа.АдресСервисаМОТП), ПрефиксВерсии);
    сзJSONЗапрос    = СоздатьОбъект("СписокЗначений");
    Сч = 0;
    Для Сч = 1 По СзКей.РазмерСписка() Цикл
        uuid         = СзКей.Получить("uuid");
        code        = СзКей.Получить("data");
        Сигнатура     = ПодписатьТекст(code,СокрЛП(ВыбЭЦП.Отпечаток),1);
        Если ПустоеЗначение(Сигнатура) = 1 Тогда
            Возврат "";
        КонецЕсли;
        Сигнатура     = ПолучитьPublic_cert(Сигнатура);
        сзJSONЗапрос.Установить("uuid",uuid);
        сзJSONЗапрос.Установить("data",Сигнатура);        
    КонецЦикла;
    Ответ             = глHTPP_ВыполнитьЗапрос("POST","https://"; + СокрЛП(Константа.АдресСервисаМОТП) + ПрефиксВерсии + "auth/cert/", сзJSONЗапрос,,,СтрОшибка);
    Если ПустоеЗначение(Ответ) = 0 Тогда
        сзОтвет     = глРазборJSON(Ответ);
    КонецЕсли;
    Если ПустоеЗначение(сзОтвет) = 1 Тогда
        Возврат 0;
    КонецЕсли;
    Возврат сзОтвет.Получить("token");
КонецФункции // ПолучитьКлючСессии()

Сам запрос у меня универсальный, много под что... Нужен?
40 MWWRuza
 
гуру
18.03.20
10:29
Вот:

//******************************************************************************
// ВыполнитьЗапрос()
//
// Параметры:
//  ТипЗапроса="POST",Url,сзJSONЗапрос,КлючСессии="",сзЗаголовки="",СтрОшибка=""
//
// Возвращаемое значение:
//  Ответ
//
// Описание:
//
Функция глHTPP_ВыполнитьЗапрос(ТипЗапроса="POST",Url,сзJSONЗапрос,КлючСессии="",сзЗаголовки="",СтрОшибка="", НеОбр429 = 0) Экспорт
//    WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.Option(2,"utf-8");
    WinHttp.SetTimeouts(0, 0, 0, 0);    
    Если ТипЗначенияСтр(сзJSONЗапрос) = "СписокЗначений" Тогда
        ЗапросJSON    = ЗначениеВJSON(сзJSONЗапрос);
    Иначе
        ЗапросJSON    = "";
    КонецЕсли;
    WinHttp.Open(ТипЗапроса,Url,1);
    WinHttp.SetRequestHeader("Content-Type", "application/json");
    WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
    Если ПустоеЗначение(КлючСессии) = 0 Тогда
        WinHttp.SetRequestHeader ("Authorization", "Bearer " + КлючСессии);
    КонецЕсли;
    Если ПустоеЗначение(сзЗаголовки) = 0 Тогда
        СчЦикла = 0;
        Для СчЦикла = 1 По сзЗаголовки.РазмерСписка() Цикл
            ИмяЗаголовка = "";
            ЗначениеЗаголовка = сзЗаголовки.ПолучитьЗначение(СчЦикла,ИмяЗаголовка);
            Если (ПустоеЗначение(ИмяЗаголовка) = 0) И (ПустоеЗначение(ЗначениеЗаголовка) = 0) Тогда
                WinHttp.SetRequestHeader (ИмяЗаголовка, ЗначениеЗаголовка);
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    WinHttp.Send(ЗапросJSON);
    RequestTimeout = 40;
    Попытка
        Рез = WinHttp.WaitForResponse(RequestTimeout);
    Исключение
        //ошибка
        Рез = 0;
        Ответ = ОписаниеОшибки();
        Возврат Ответ;
    КонецПопытки;
//    Ответ = "";
    Если Рез = -1 Тогда
        Статус = WinHttp.status();
        СтатусТекст = WinHttp.statusText();
        Ответ = СокрЛП(WinHttp.ResponseText());
        Если Статус <> 200 Тогда
            Если Статус = 307 Тогда//перенаправление
                Url = WinHttp.GetResponseHeader("Location");
                Если ПустоеЗначение(Url) = 0 Тогда
                    Возврат глHTPP_ВыполнитьЗапрос(ТипЗапроса,Url,сзJSONЗапрос,КлючСессии,сзЗаголовки,СтрОшибка);
                КонецЕсли;
            КонецЕсли;
            Если (Статус = 429) И (НеОбр429 = 0) Тогда//слишком много запросов
                глЗадержка(5);
                Возврат глHTPP_ВыполнитьЗапрос(ТипЗапроса,Url,сзJSONЗапрос,КлючСессии,сзЗаголовки,СтрОшибка);
            КонецЕсли;
            Если ПустоеЗначение(Ответ) = 0 Тогда
                Если Лев(Ответ,1) = "{" Тогда
                    сзОтвет     = глРазборJSON(Ответ);
                    СтрОшибка     = сзОтвет.Получить("error_description");
                    Возврат Ответ;
                КонецЕсли;
            Иначе
                Возврат "";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    Возврат Ответ;
КонецФункции // ВыполнитьЗапрос()
41 igel1969
 
18.03.20
10:38
(40) я дико прошу прощения,  а ЗапросJSON    = ЗначениеВJSON(сзJSONЗапрос); ?
там просто перевод в {"uuid": "dfghdfgg", "date": "dfhdfgh"} или что-то другое?
42 big
 
18.03.20
10:41
(31)(41)  Опять не на тот сервис запрос шлёшь!  )))

Я ещё в прошлой ветке на это внимание обращал!!

должно быть auth/cert , а у тебя SimplSignIn
43 igel1969
 
18.03.20
10:47
(42) пробовал, тоже пока не смог
44 big
 
18.03.20
10:59
(43) Кстати, а в ЧЗ зарегистрированы? А то м.б. там просто не понимают кто к ним стучится?
45 igel1969
 
18.03.20
11:03
(44) вот вчера зарегистрировался
46 igel1969
 
18.03.20
11:04
кое-что подправил. теперь пишет:
{Форма.Форма.Форма(384)}: Ошибка при вызове метода контекста (ResponseText): Произошла исключительная ситуация (WinHttp.WinHttpRequest): Данные, необходимые для завершения этой операции еще не доступны.
47 big
 
18.03.20
11:06
(46) Попробуй отправлять запрос через curl с параметром v - там можно увидеть какие ошибки вылазят.
48 igel1969
 
18.03.20
11:11
(47) Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\admin>d:

D:\>cd 111

D:\111>curl.exe -X POST int01.gismt.crpt.tech/api/v3/auth/cert -H "content-type:
application/json;charset=UTF-8" --data "{"uuid": "71e8c0eb-8eaf-4195-b1bd-37379
a3f02c9","data": "MIIWKwYJKoZIhvcNAQcCoIIWHDCCFhgCAQExDjAMBggqhQMHAQECAgUAMAsGCS
qGSIb3DQEHAaCCEZ0wggfPMIIHfKADAgECAgsAmS9RJwAAAAAC7DAKBggqhQMHAQEDAjCCASQxHjAcBg
kqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L7Rgd
C60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEuMCwGA1UECQwl0YPQu9C40YbQsCDQotCy0L
XRgNGB0LrQsNGPLCDQtNC+0LwgNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0Y
HRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQzNz
UxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MB4XDTE5MTAwMjEwMz
c1OFoXDTM0MTAwMjEwMzc1OFowggF6MSAwHgYJKoZIhvcNAQkBFhF1Y0BzZWNyZXQtbmV0Lm5ldDEYMB
YGBSqFA2QBEg0xMTAyMjI1MDExMDIwMRowGAYIKoUDA4EDAQESDDAwMjIyNTExMzA5MjELMAkGA1UEBh
MCUlUxJzAlBgNVBAgMHjIyINCQ0LvRgtCw0LnRgdC60LjQuSDQutGA0LDQuTEXMBUGA1UEBwwO0JHQsN
GA0L3QsNGD0LsxUTBPBgNVBAkMSNC/0YDQvtGB0L/QtdC60YIg0KHRgtGA0L7QuNGC0LXQu9C10LksIN
C00L7QvCAxMTcsINC/0L7QvNC10YnQtdC90LjQtSA2MDEwMC4GA1UECwwn0KPQtNC+0YHRgtC+0LLQtd
GA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMSUwIwYDVQQKDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40Y
EiMSUwIwYDVQQDDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40YEiMGYwHwYIKoUDBwEBAQEwEwYHKo
UDAgIjAQYIKoUDBwEBAgIDQwAEQMeCHyPOMgYpCckYLi46EqL/hB1axhdQHWU3QXocOtn0OQGrZVk2Hn
kWxkwi2IJYu8I3RS3ebRfLSRf80rFfzaKjggQsMIIEKDALBgNVHQ8EBAMCAYYwHQYDVR0OBBYEFPmf1b
B+wUz+7lXnaKmFGLiBvddnMBQGCSsGAQQBgjcUAgQHDAVTdWJDQTASBgNVHRMBAf8ECDAGAQH/AgEAMC
UGA1UdIAQeMBwwBgYEVR0gADAIBgYqhQNkcQEwCAYGKoUDZHECMFQGBSqFA2RvBEsMSSLQmtGA0LjQv9
GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDQuMCkgKNC40YHQv9C+0LvQvdC10L3QuNC1IDItQm
FzZSkwEgYJKwYBBAGCNxUBBAUCAwEAATCCAWUGA1UdIwSCAVwwggFYgBTCVPG0a9RMt+BtNrQjkPH+wz
ybBqGCASykggEoMIIBJDEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEwJSVT
EYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMS4wLAYDVQ
QJDCXRg9C70LjRhtCwINCi0LLQtdGA0YHQutCw0Y8sINC00L7QvCA3MSwwKgYDVQQKDCPQnNC40L3Qut
C+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRowGAYIKo
UDA4EDAQESDDAwNzcxMDQ3NDM3NTEsMCoGA1UEAwwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0Y
HRgdC40LiCEE5tR4sm8n1lf3aOAlzj05MwgZgGA1UdHwSBkDCBjTAtoCugKYYnaHR0cDovL3JlZXN0ci
1wa2kucnUvY2RwL2d1Y19nb3N0MTIuY3JsMC2gK6AphidodHRwOi8vY29tcGFueS5ydC5ydS9jZHAvZ3
VjX2dvc3QxMi5jcmwwLaAroCmGJ2h0dHA6Ly9yb3N0ZWxlY29tLnJ1L2NkcC9ndWNfZ29zdDEyLmNybD
BDBggrBgEFBQcBAQQ3MDUwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndWNfZ2
9zdDEyLmNydDCB9QYFKoUDZHAEgeswgegMNNCf0JDQmtCcIMKr0JrRgNC40L/RgtC+0J/RgNC+IEhTTc
K7INCy0LXRgNGB0LjQuCAyLjAMQ9Cf0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+0YHRgtC+0L
LQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAwrsMNdCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxNDkvMy
8yLzIvMjMg0L7RgiAwMi4wMy4yMDE4DDTQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzcvNi8xMD
Ug0L7RgiAyNy4wNi4yMDE4MAoGCCqFAwcBAQMCA0EAaGjWDl7JZCpMI0Cjx6cR0l0MrrQ+EERYil6UL4
Wpl+v2S8AT+3/jU6mDDiglUBWAOE7N7c0hDeXsnu4nqTkQ1jCCCcYwgglzoAMCAQICEQErH+EALas6mU
gjadWlHATlMAoGCCqFAwcBAQMCMIIBejEgMB4GCSqGSIb3DQEJARYRdWNAc2VjcmV0LW5ldC5uZXQxGD
AWBgUqhQNkARINMTEwMjIyNTAxMTAyMDEaMBgGCCqFAwOBAwEBEgwwMDIyMjUxMTMwOTIxCzAJBgNVBA
YTAlJVMScwJQYDVQQIDB4yMiDQkNC70YLQsNC50YHQutC40Lkg0LrRgNCw0LkxFzAVBgNVBAcMDtCR0L
DRgNC90LDRg9C7MVEwTwYDVQQJDEjQv9GA0L7RgdC/0LXQutGCINCh0YLRgNC+0LjRgtC10LvQtdC5LC
DQtNC+0LwgMTE3LCDQv9C+0LzQtdGJ0LXQvdC40LUgNjAxMDAuBgNVBAsMJ9Cj0LTQvtGB0YLQvtCy0L
XRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDElMCMGA1UECgwc0J7QntCeICLQptCY0JEt0KHQtdGA0LLQuN
GBIjElMCMGA1UEAwwc0J7QntCeICLQptCY0JEt0KHQtdGA0LLQuNGBIjAeFw0xOTEyMjQxMzI5MzlaFw
0yMTAzMjQxMzI5MzlaMIIB8jEYMBYGCCqFAwOBDQEBEgoxNjA2NjE1NDEwMTAwLgYJKoZIhvcNAQkCDC
ExNjYxMDM0ODY4LTEyMTUwMTAwMS0wMDMxNjQzNzQ2MzMxJTAjBgkqhkiG9w0BCQEWFnZlcm9uaWthMj
AwNjc4QG1haWwucnUxGjAYBggqhQMDgQMBARIMMDAxNjYxMDM0ODY4MRYwFAYFKoUDZAMSCzAzMTY0Mz
c0NjMzMRgwFgYFKoUDZAESDTExMjE2OTAwODY4MjUxGTAXBgNVBAwMENCU0LjRgNC10LrRgtC+0YAxHj
AcBgNVBAoMFdCe0J7QniAi0JDQm9Cs0K/QndChIjEyMDAGA1UECQwp0KPQmyDQn9Cj0KjQmtCY0J3QkC
wg0JTQntCcIDMwLCDQn9Ce0JwgMTQxHDAaBgNVBAcME9CZ0L7RiNC60LDRgC3QntC70LAxMDAuBgNVBA
gMJzEyINCg0LXRgdC/0YPQsdC70LjQutCwINCc0LDRgNC40Lkg0K3QuzELMAkGA1UEBhMCUlUxKjAoBg
NVBCoMIdCS0LvQsNC00LjQvNC40YAg0JjQstCw0L3QvtCy0LjRhzEXMBUGA1UEBAwO0JzQsNGI0LDQvd
C40L0xHjAcBgNVBAMMFdCe0J7QniAi0JDQm9Cs0K/QndChIjBmMB8GCCqFAwcBAQEBMBMGByqFAwICJA
AGCCqFAwcBAQICA0MABEBYmBAKPpLuQvLp1BsvO5erVQbccvI9+iGifZMadMrw63o9pWFQbR6/n53bNf
jEpbQ/8VTaTmDmxvd92I0gt0hpo4IFTzCCBUswDgYDVR0PAQH/BAQDAgTwMD8GA1UdEQQ4MDaBFnZlcm
9uaWthMjAwNjc4QG1haWwucnWkHDAaMRgwFgYIKoUDA4ENAQESCjE2MDY2MTU0MTAwEwYDVR0gBAwwCj
AIBgYqhQNkcQEwSgYDVR0lBEMwQQYIKwYBBQUHAwIGByqFAwICIgYGCCsGAQUFBwMEBgcqhQMDB4N0Bg
cqhQMDBwgBBggqhQMDBwEBAQYGKoUDAwcBMIGKBggrBgEFBQcBAQR+MHwwPAYIKwYBBQUHMAKGMGh0dH
A6Ly9jaWItc2VydmljZS5ydS9maWxlcy9jaWItc2VydmljZS0yMDE5LmNydDA8BggrBgEFBQcwAoYwaH
R0cDovL3NlY3JldC1uZXQubmV0L2ZpbGVzL2NpYi1zZXJ2aWNlLTIwMTkuY3J0MCsGA1UdEAQkMCKADz
IwMTkxMjI0MTMyOTM4WoEPMjAyMTAzMjQxMzI5MzhaMIIBMwYFKoUDZHAEggEoMIIBJAwrItCa0YDQuN
C/0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gNC4wKQxTItCj0LTQvtGB0YLQvtCy0LXRgNGP0Y
7RidC40Lkg0YbQtdC90YLRgCAi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiINCy0LXRgNGB0LjQuCAyLj
AMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyDihJYg0KHQpC8xMj
QtMzM4MCDQvtGCIDExLjA1LjIwMTgMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0Y
HRgtCy0LjRjyDihJYg0KHQpC8xMjgtMzU5MiDQvtGCIDE3LjEwLjIwMTgwIwYFKoUDZG8EGgwYItCa0Y
DQuNC/0YLQvtCf0YDQviBDU1AiMHkGA1UdHwRyMHAwNqA0oDKGMGh0dHA6Ly9jaWItc2VydmljZS5ydS
9maWxlcy9jaWItc2VydmljZS0yMDE5LmNybDA2oDSgMoYwaHR0cDovL3NlY3JldC1uZXQubmV0L2ZpbG
VzL2NpYi1zZXJ2aWNlLTIwMTkuY3JsMIGCBgcqhQMCAjECBHcwdTBlFkBodHRwczovL2NhLmtvbnR1ci
5ydS9hYm91dC9kb2N1bWVudHMvY3J5cHRvcHJvLWxpY2Vuc2UtcXVhbGlmaWVkDB3QodCa0JEg0JrQvt
C90YLRg9GAINC4INCU0JfQngMCBeAEDEXBtDNdLNgECHMe3DCCAWAGA1UdIwSCAVcwggFTgBT5n9Wwfs
FM/u5V52iphRi4gb3XZ6GCASykggEoMIIBJDEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQ
swCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0L
rQstCwMS4wLAYDVQQJDCXRg9C70LjRhtCwINCi0LLQtdGA0YHQutCw0Y8sINC00L7QvCA3MSwwKgYDVQ
QKDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0xMDQ3NzAyMD
I2NzAxMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3NTEsMCoGA1UEAwwj0JzQuNC90LrQvtC80YHQst
GP0LfRjCDQoNC+0YHRgdC40LiCCwCZL1EnAAAAAALsMB0GA1UdDgQWBBSYBtRn1I8J5V2ODFMBFUxrUd
yIvzAKBggqhQMHAQEDAgNBAOzE7bK5+cqKH9wvCMZuJ9yZdkS4WFPKRxGQznig9uam0gFCLD2PXIFx/Q
DvpQ6GPoyJGdgiIBOVVEeY1XqFJu8xggRTMIIETwIBATCCAZEwggF6MSAwHgYJKoZIhvcNAQkBFhF1Y0
BzZWNyZXQtbmV0Lm5ldDEYMBYGBSqFA2QBEg0xMTAyMjI1MDExMDIwMRowGAYIKoUDA4EDAQESDDAwMj
IyNTExMzA5MjELMAkGA1UEBhMCUlUxJzAlBgNVBAgMHjIyINCQ0LvRgtCw0LnRgdC60LjQuSDQutGA0L
DQuTEXMBUGA1UEBwwO0JHQsNGA0L3QsNGD0LsxUTBPBgNVBAkMSNC/0YDQvtGB0L/QtdC60YIg0KHRgt
GA0L7QuNGC0LXQu9C10LksINC00L7QvCAxMTcsINC/0L7QvNC10YnQtdC90LjQtSA2MDEwMC4GA1UECw
wn0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMSUwIwYDVQQKDBzQntCe0J4gIt
Cm0JjQkS3QodC10YDQstC40YEiMSUwIwYDVQQDDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40YEiAh
EBKx/hAC2rOplII2nVpRwE5TAMBggqhQMHAQECAgUAoIICVTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQ
cBMBwGCSqGSIb3DQEJBTEPFw0yMDAzMTgwODAzNDRaMC8GCSqGSIb3DQEJBDEiBCB0V9JA8JAnEbgbok
67AMCYgTJxiGvxC1seu+xIZve4UjCCAegGCyqGSIb3DQEJEAIvMYIB1zCCAdMwggHPMIIByzAKBggqhQ
MHAQECAgQgbvs2sSgOSuXjWego1rbNpyGK2bWi7ri0TEvEQZfcv2YwggGZMIIBgqSCAX4wggF6MSAwHg
YJKoZIhvcNAQkBFhF1Y0BzZWNyZXQtbmV0Lm5ldDEYMBYGBSqFA2QBEg0xMTAyMjI1MDExMDIwMRowGA
YIKoUDA4EDAQESDDAwMjIyNTExMzA5MjELMAkGA1UEBhMCUlUxJzAlBgNVBAgMHjIyINCQ0LvRgtCw0L
nRgdC60LjQuSDQutGA0LDQuTEXMBUGA1UEBwwO0JHQsNGA0L3QsNGD0LsxUTBPBgNVBAkMSNC/0YDQvt
GB0L/QtdC60YIg0KHRgtGA0L7QuNGC0LXQu9C10LksINC00L7QvCAxMTcsINC/0L7QvNC10YnQtdC90L
jQtSA2MDEwMC4GA1UECwwn0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMSUwIw
YDVQQKDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40YEiMSUwIwYDVQQDDBzQntCe0J4gItCm0JjQkS
3QodC10YDQstC40YEiAhEBKx/hAC2rOplII2nVpRwE5TAMBggqhQMHAQEBAQUABEDa3SziDTXF598f2D
07rwLAmqveC0tGrH0Az+yGL7vr057gSr9ZLpcp8mGo/k6j+eyAx/TqyuiPK2IED3ZplDlB"}" -v -k
--output D:\111\out.txt
Note: Unnecessary use of -X or --request, POST is already inferred.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*
  Trying 23.105.245.14:80...
* Connected to int01.gismt.crpt.tech (23.105.245.14) port 80 (#0)
> POST /api/v3/auth/cert HTTP/1.1
> Host: int01.gismt.crpt.tech
> User-Agent: curl/7.69.1
> Accept: */*
> content-type: application/json;charset=UTF-8
> Content-Length: 7623
>
} [7623 bytes data]
* upload completely sent off: 7623 out of 7623 bytes
* Mark bundle as not supporting multiuse
< HTTP/1.1 307 Temporary Redirect
< Server: nginx
< Date: Wed, 18 Mar 2020 08:08:42 GMT
< Content-Type: text/html
< Content-Length: 180
< Connection: keep-alive
< Location: https://int01.gismt.crpt.tech/api/v3/auth/cert
<
{ [180 bytes data]
100  7803  100   180  100  7623    720  30492 --:--:-- --:--:-- --:--:-- 31337
* Connection #0 to host int01.gismt.crpt.tech left intact

D:\111>
в файле out.txt пишет:
<html>
<head><title>307 Temporary Redirect</title></head>
<body bgcolor="white">
<center><h1>307 Temporary Redirect</h1></center>
<hr><center>nginx</center>
</body>
</html>
49 igel1969
 
18.03.20
11:12
ой, адрес не тот, сейчас исправлю
50 igel1969
 
18.03.20
11:16
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\admin>вЖ
"вЖ" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

C:\Users\admin>d:

D:\>cd 111

D:\111>curl.exe -X POST https://ismotp.crptech.ru/api/v3/auth/cert -H "content-t
ype: application/json;charset=UTF-8" --data "{"uuid": "71e8c0eb-8eaf-4195-b1bd-3
7379a3f02c9","data": "MIIWKwYJKoZIhvcNAQcCoIIWHDCCFhgCAQExDjAMBggqhQMHAQECAgUAMA
sGCSqGSIb3DQEHAaCCEZ0wggfPMIIHfKADAgECAgsAmS9RJwAAAAAC7DAKBggqhQMHAQEDAjCCASQxHj
AcBgkqhkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgMDzc3INCc0L
7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEuMCwGA1UECQwl0YPQu9C40YbQsCDQot
Cy0LXRgNGB0LrQsNGPLCDQtNC+0LwgNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoN
C+0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0Nz
QzNzUxLDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MB4XDTE5MTAwMj
EwMzc1OFoXDTM0MTAwMjEwMzc1OFowggF6MSAwHgYJKoZIhvcNAQkBFhF1Y0BzZWNyZXQtbmV0Lm5ldD
EYMBYGBSqFA2QBEg0xMTAyMjI1MDExMDIwMRowGAYIKoUDA4EDAQESDDAwMjIyNTExMzA5MjELMAkGA1
UEBhMCUlUxJzAlBgNVBAgMHjIyINCQ0LvRgtCw0LnRgdC60LjQuSDQutGA0LDQuTEXMBUGA1UEBwwO0J
HQsNGA0L3QsNGD0LsxUTBPBgNVBAkMSNC/0YDQvtGB0L/QtdC60YIg0KHRgtGA0L7QuNGC0LXQu9C10L
ksINC00L7QvCAxMTcsINC/0L7QvNC10YnQtdC90LjQtSA2MDEwMC4GA1UECwwn0KPQtNC+0YHRgtC+0L
LQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMSUwIwYDVQQKDBzQntCe0J4gItCm0JjQkS3QodC10YDQst
C40YEiMSUwIwYDVQQDDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40YEiMGYwHwYIKoUDBwEBAQEwEw
YHKoUDAgIjAQYIKoUDBwEBAgIDQwAEQMeCHyPOMgYpCckYLi46EqL/hB1axhdQHWU3QXocOtn0OQGrZV
k2HnkWxkwi2IJYu8I3RS3ebRfLSRf80rFfzaKjggQsMIIEKDALBgNVHQ8EBAMCAYYwHQYDVR0OBBYEFP
mf1bB+wUz+7lXnaKmFGLiBvddnMBQGCSsGAQQBgjcUAgQHDAVTdWJDQTASBgNVHRMBAf8ECDAGAQH/Ag
EAMCUGA1UdIAQeMBwwBgYEVR0gADAIBgYqhQNkcQEwCAYGKoUDZHECMFQGBSqFA2RvBEsMSSLQmtGA0L
jQv9GC0L7Qn9GA0L4gQ1NQIiAo0LLQtdGA0YHQuNGPIDQuMCkgKNC40YHQv9C+0LvQvdC10L3QuNC1ID
ItQmFzZSkwEgYJKwYBBAGCNxUBBAUCAwEAATCCAWUGA1UdIwSCAVwwggFYgBTCVPG0a9RMt+BtNrQjkP
H+wzybBqGCASykggEoMIIBJDEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6LnJ1MQswCQYDVQQGEw
JSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvtGB0LrQstCwMS4wLA
YDVQQJDCXRg9C70LjRhtCwINCi0LLQtdGA0YHQutCw0Y8sINC00L7QvCA3MSwwKgYDVQQKDCPQnNC40L
3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRowGA
YIKoUDA4EDAQESDDAwNzcxMDQ3NDM3NTEsMCoGA1UEAwwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoN
C+0YHRgdC40LiCEE5tR4sm8n1lf3aOAlzj05MwgZgGA1UdHwSBkDCBjTAtoCugKYYnaHR0cDovL3JlZX
N0ci1wa2kucnUvY2RwL2d1Y19nb3N0MTIuY3JsMC2gK6AphidodHRwOi8vY29tcGFueS5ydC5ydS9jZH
AvZ3VjX2dvc3QxMi5jcmwwLaAroCmGJ2h0dHA6Ly9yb3N0ZWxlY29tLnJ1L2NkcC9ndWNfZ29zdDEyLm
NybDBDBggrBgEFBQcBAQQ3MDUwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndW
NfZ29zdDEyLmNydDCB9QYFKoUDZHAEgeswgegMNNCf0JDQmtCcIMKr0JrRgNC40L/RgtC+0J/RgNC+IE
hTTcK7INCy0LXRgNGB0LjQuCAyLjAMQ9Cf0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+0YHRgt
C+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAwrsMNdCX0LDQutC70Y7Rh9C10L3QuNC1IOKEliAxND
kvMy8yLzIvMjMg0L7RgiAwMi4wMy4yMDE4DDTQl9Cw0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzcvNi
8xMDUg0L7RgiAyNy4wNi4yMDE4MAoGCCqFAwcBAQMCA0EAaGjWDl7JZCpMI0Cjx6cR0l0MrrQ+EERYil
6UL4Wpl+v2S8AT+3/jU6mDDiglUBWAOE7N7c0hDeXsnu4nqTkQ1jCCCcYwgglzoAMCAQICEQErH+EALa
s6mUgjadWlHATlMAoGCCqFAwcBAQMCMIIBejEgMB4GCSqGSIb3DQEJARYRdWNAc2VjcmV0LW5ldC5uZX
QxGDAWBgUqhQNkARINMTEwMjIyNTAxMTAyMDEaMBgGCCqFAwOBAwEBEgwwMDIyMjUxMTMwOTIxCzAJBg
NVBAYTAlJVMScwJQYDVQQIDB4yMiDQkNC70YLQsNC50YHQutC40Lkg0LrRgNCw0LkxFzAVBgNVBAcMDt
CR0LDRgNC90LDRg9C7MVEwTwYDVQQJDEjQv9GA0L7RgdC/0LXQutGCINCh0YLRgNC+0LjRgtC10LvQtd
C5LCDQtNC+0LwgMTE3LCDQv9C+0LzQtdGJ0LXQvdC40LUgNjAxMDAuBgNVBAsMJ9Cj0LTQvtGB0YLQvt
Cy0LXRgNGP0Y7RidC40Lkg0YbQtdC90YLRgDElMCMGA1UECgwc0J7QntCeICLQptCY0JEt0KHQtdGA0L
LQuNGBIjElMCMGA1UEAwwc0J7QntCeICLQptCY0JEt0KHQtdGA0LLQuNGBIjAeFw0xOTEyMjQxMzI5Mz
laFw0yMTAzMjQxMzI5MzlaMIIB8jEYMBYGCCqFAwOBDQEBEgoxNjA2NjE1NDEwMTAwLgYJKoZIhvcNAQ
kCDCExNjYxMDM0ODY4LTEyMTUwMTAwMS0wMDMxNjQzNzQ2MzMxJTAjBgkqhkiG9w0BCQEWFnZlcm9uaW
thMjAwNjc4QG1haWwucnUxGjAYBggqhQMDgQMBARIMMDAxNjYxMDM0ODY4MRYwFAYFKoUDZAMSCzAzMT
Y0Mzc0NjMzMRgwFgYFKoUDZAESDTExMjE2OTAwODY4MjUxGTAXBgNVBAwMENCU0LjRgNC10LrRgtC+0Y
AxHjAcBgNVBAoMFdCe0J7QniAi0JDQm9Cs0K/QndChIjEyMDAGA1UECQwp0KPQmyDQn9Cj0KjQmtCY0J
3QkCwg0JTQntCcIDMwLCDQn9Ce0JwgMTQxHDAaBgNVBAcME9CZ0L7RiNC60LDRgC3QntC70LAxMDAuBg
NVBAgMJzEyINCg0LXRgdC/0YPQsdC70LjQutCwINCc0LDRgNC40Lkg0K3QuzELMAkGA1UEBhMCUlUxKj
AoBgNVBCoMIdCS0LvQsNC00LjQvNC40YAg0JjQstCw0L3QvtCy0LjRhzEXMBUGA1UEBAwO0JzQsNGI0L
DQvdC40L0xHjAcBgNVBAMMFdCe0J7QniAi0JDQm9Cs0K/QndChIjBmMB8GCCqFAwcBAQEBMBMGByqFAw
ICJAAGCCqFAwcBAQICA0MABEBYmBAKPpLuQvLp1BsvO5erVQbccvI9+iGifZMadMrw63o9pWFQbR6/n5
3bNfjEpbQ/8VTaTmDmxvd92I0gt0hpo4IFTzCCBUswDgYDVR0PAQH/BAQDAgTwMD8GA1UdEQQ4MDaBFn
Zlcm9uaWthMjAwNjc4QG1haWwucnWkHDAaMRgwFgYIKoUDA4ENAQESCjE2MDY2MTU0MTAwEwYDVR0gBA
wwCjAIBgYqhQNkcQEwSgYDVR0lBEMwQQYIKwYBBQUHAwIGByqFAwICIgYGCCsGAQUFBwMEBgcqhQMDB4
N0BgcqhQMDBwgBBggqhQMDBwEBAQYGKoUDAwcBMIGKBggrBgEFBQcBAQR+MHwwPAYIKwYBBQUHMAKGMG
h0dHA6Ly9jaWItc2VydmljZS5ydS9maWxlcy9jaWItc2VydmljZS0yMDE5LmNydDA8BggrBgEFBQcwAo
YwaHR0cDovL3NlY3JldC1uZXQubmV0L2ZpbGVzL2NpYi1zZXJ2aWNlLTIwMTkuY3J0MCsGA1UdEAQkMC
KADzIwMTkxMjI0MTMyOTM4WoEPMjAyMTAzMjQxMzI5MzhaMIIBMwYFKoUDZHAEggEoMIIBJAwrItCa0Y
DQuNC/0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gNC4wKQxTItCj0LTQvtGB0YLQvtCy0LXRgN
GP0Y7RidC40Lkg0YbQtdC90YLRgCAi0JrRgNC40L/RgtC+0J/RgNC+INCj0KYiINCy0LXRgNGB0LjQuC
AyLjAMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0LjRjyDihJYg0KHQpC
8xMjQtMzM4MCDQvtGCIDExLjA1LjIwMTgMT9Ch0LXRgNGC0LjRhNC40LrQsNGCINGB0L7QvtGC0LLQtd
GC0YHRgtCy0LjRjyDihJYg0KHQpC8xMjgtMzU5MiDQvtGCIDE3LjEwLjIwMTgwIwYFKoUDZG8EGgwYIt
Ca0YDQuNC/0YLQvtCf0YDQviBDU1AiMHkGA1UdHwRyMHAwNqA0oDKGMGh0dHA6Ly9jaWItc2VydmljZS
5ydS9maWxlcy9jaWItc2VydmljZS0yMDE5LmNybDA2oDSgMoYwaHR0cDovL3NlY3JldC1uZXQubmV0L2
ZpbGVzL2NpYi1zZXJ2aWNlLTIwMTkuY3JsMIGCBgcqhQMCAjECBHcwdTBlFkBodHRwczovL2NhLmtvbn
R1ci5ydS9hYm91dC9kb2N1bWVudHMvY3J5cHRvcHJvLWxpY2Vuc2UtcXVhbGlmaWVkDB3QodCa0JEg0J
rQvtC90YLRg9GAINC4INCU0JfQngMCBeAEDEXBtDNdLNgECHMe3DCCAWAGA1UdIwSCAVcwggFTgBT5n9
WwfsFM/u5V52iphRi4gb3XZ6GCASykggEoMIIBJDEeMBwGCSqGSIb3DQEJARYPZGl0QG1pbnN2eWF6Ln
J1MQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRkwFwYDVQQHDBDQsy4g0JzQvt
GB0LrQstCwMS4wLAYDVQQJDCXRg9C70LjRhtCwINCi0LLQtdGA0YHQutCw0Y8sINC00L7QvCA3MSwwKg
YDVQQKDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB0LjQuDEYMBYGBSqFA2QBEg0xMDQ3Nz
AyMDI2NzAxMRowGAYIKoUDA4EDAQESDDAwNzcxMDQ3NDM3NTEsMCoGA1UEAwwj0JzQuNC90LrQvtC80Y
HQstGP0LfRjCDQoNC+0YHRgdC40LiCCwCZL1EnAAAAAALsMB0GA1UdDgQWBBSYBtRn1I8J5V2ODFMBFU
xrUdyIvzAKBggqhQMHAQEDAgNBAOzE7bK5+cqKH9wvCMZuJ9yZdkS4WFPKRxGQznig9uam0gFCLD2PXI
Fx/QDvpQ6GPoyJGdgiIBOVVEeY1XqFJu8xggRTMIIETwIBATCCAZEwggF6MSAwHgYJKoZIhvcNAQkBFh
F1Y0BzZWNyZXQtbmV0Lm5ldDEYMBYGBSqFA2QBEg0xMTAyMjI1MDExMDIwMRowGAYIKoUDA4EDAQESDD
AwMjIyNTExMzA5MjELMAkGA1UEBhMCUlUxJzAlBgNVBAgMHjIyINCQ0LvRgtCw0LnRgdC60LjQuSDQut
GA0LDQuTEXMBUGA1UEBwwO0JHQsNGA0L3QsNGD0LsxUTBPBgNVBAkMSNC/0YDQvtGB0L/QtdC60YIg0K
HRgtGA0L7QuNGC0LXQu9C10LksINC00L7QvCAxMTcsINC/0L7QvNC10YnQtdC90LjQtSA2MDEwMC4GA1
UECwwn0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMSUwIwYDVQQKDBzQntCe0J
4gItCm0JjQkS3QodC10YDQstC40YEiMSUwIwYDVQQDDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40Y
EiAhEBKx/hAC2rOplII2nVpRwE5TAMBggqhQMHAQECAgUAoIICVTAYBgkqhkiG9w0BCQMxCwYJKoZIhv
cNAQcBMBwGCSqGSIb3DQEJBTEPFw0yMDAzMTgwODAzNDRaMC8GCSqGSIb3DQEJBDEiBCB0V9JA8JAnEb
gbok67AMCYgTJxiGvxC1seu+xIZve4UjCCAegGCyqGSIb3DQEJEAIvMYIB1zCCAdMwggHPMIIByzAKBg
gqhQMHAQECAgQgbvs2sSgOSuXjWego1rbNpyGK2bWi7ri0TEvEQZfcv2YwggGZMIIBgqSCAX4wggF6MS
AwHgYJKoZIhvcNAQkBFhF1Y0BzZWNyZXQtbmV0Lm5ldDEYMBYGBSqFA2QBEg0xMTAyMjI1MDExMDIwMR
owGAYIKoUDA4EDAQESDDAwMjIyNTExMzA5MjELMAkGA1UEBhMCUlUxJzAlBgNVBAgMHjIyINCQ0LvRgt
Cw0LnRgdC60LjQuSDQutGA0LDQuTEXMBUGA1UEBwwO0JHQsNGA0L3QsNGD0LsxUTBPBgNVBAkMSNC/0Y
DQvtGB0L/QtdC60YIg0KHRgtGA0L7QuNGC0LXQu9C10LksINC00L7QvCAxMTcsINC/0L7QvNC10YnQtd
C90LjQtSA2MDEwMC4GA1UECwwn0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMS
UwIwYDVQQKDBzQntCe0J4gItCm0JjQkS3QodC10YDQstC40YEiMSUwIwYDVQQDDBzQntCe0J4gItCm0J
jQkS3QodC10YDQstC40YEiAhEBKx/hAC2rOplII2nVpRwE5TAMBggqhQMHAQEBAQUABEDa3SziDTXF59
8f2D07rwLAmqveC0tGrH0Az+yGL7vr057gSr9ZLpcp8mGo/k6j+eyAx/TqyuiPK2IED3ZplDlB"}" -v
-k --output D:\111\out.txt
Note: Unnecessary use of -X or --request, POST is already inferred.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*
  Trying 78.142.221.76:443...
* Connected to ismotp.crptech.ru (78.142.221.76) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*
TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [70 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [1761 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=ismotp.crptech.ru
*  start date: Mar 19 08:10:31 2019 GMT
*  expire date: Mar 18 08:10:31 2021 GMT
*  issuer: O=AO Kaspersky Lab; CN=Kaspersky Endpoint Security Personal Root Cert
ificate
*  SSL certificate verify result: self signed certificate in certificate chain (
19), continuing anyway.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0

} [5 bytes data]
* Using Stream ID: 1 (easy handle 0x4e4790)
} [5 bytes data]
> POST /api/v3/auth/cert HTTP/2
> Host: ismotp.crptech.ru
> user-agent: curl/7.69.1
> accept: */*
> content-type: application/json;charset=UTF-8
> content-length: 7623
>
{ [5 bytes data]
* Connection state changed (MAX_CONCURRENT_STREAMS == 4294967295)!
} [5 bytes data]
* We are completely uploaded and fine
{ [5 bytes data]
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
} [5 bytes data]
< HTTP/2 401
< server: nginx
< date: Wed, 18 Mar 2020 08:13:18 GMT
< content-type: application/xml;charset=UTF-8
< cache-control: no-store
< pragma: no-cache
< www-authenticate: Bearer realm="null", error="unauthorized", error_description
="Full authentication is required to access this resource"
<
{ [5 bytes data]
100  7791    0   168  100  7623    388  17645 --:--:-- --:--:-- --:--:-- 17993
* Connection #0 to host ismotp.crptech.ru left intact

D:\111>

возвращает в файле:
<UnauthorizedException><error>unauthorized</error><error_description>Full authentication is required to access this resource</error_description></UnauthorizedException>

Может действительно что-то не так с регистрацией.
я зарегистрировался в:
https://markirovka.crpt.ru/dashboard
и в
https://markirovka.int01.gismt.crpt.tech/dashboard
но во втором случае не дает договор для подписи
51 big
 
18.03.20
11:25
Если у вас табак, то всё-таки адрес для авторизации будет /auth/simpleSignIn. Адрес auth/cert  это для молока, как у меня.
52 igel1969
 
18.03.20
11:31
(51) да, у нас табак. а что - молоко тоже маркируют???????????????????????? и что - продавцы на кассе QR-код считывают сканером????
53 big
 
18.03.20
11:34
(52) Нет, ещё не маркируют и ничего не считывают, но мы свой паровоз уже строить начали по-тихоньку ))
54 igel1969
 
18.03.20
12:00
(22) все таки для получения токена Вы используете
https://ismotp.crptech.ru/api/v3/auth/cert/key
или
https://ismotp.crptech.ru/private-office-api/private/v2/";?
55 igel1969
 
18.03.20
14:38
Ребята, уже на пороге стою, совсем немного осталось, помогите пожалуйста.
Дело оказалось в подписании.
Когда подписываю с помощью
Функция ComОбъектСертификатаПоОтпечатку(Отпечаток)
    
    CAPICOM_CURRENT_USER_STORE         = 2;    // 2 - Искать сертификат в ветке "Личное" хранилища.

    CAPICOM_MY_STORE                   = "My";// Указываем, что ветку "Личное" берем из хранилища текущего пользователя

    CAPICOM_STORE_OPEN_READ_ONLY       = 0;    // Открыть хранилище только на чтение

    CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
    
    oStore = Новый COMОбъект("CAdESCOM.Store");// Объект описывает хранилище сертификатов

    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY);// Открыть хранилище сертификатов

    
    Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, Отпечаток);
    ComОбъект = Certificates.Item(1);// Найденный сертификат (Com-объект)

    
    oStore.Close();// Закрыть хранилище сертификатов и освободить объект

    
    Возврат ComОбъект;
    
КонецФункции

Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint, bDetached)
    
    CADESCOM_BASE64_TO_BINARY = 1;// Входные данные пришли в Base64

    
    CADESCOM_CADES_TYPE = 1;// Тип усовершенствованной подписи

    //bDetached     = Ложь;

    EncodingType = 0;
    
    oSigner = Новый COMОбъект("CAdESCOM.CPSigner");// Объект, задающий параметры создания и содержащий информацию об усоверш-ной подписи

    oSigner.Certificate = ComОбъектСертификатаПоОтпечатку(sThumbprint);
    
    oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");// Объект CadesSignedData предоставляет свойства и методы для работы с усоверш-ной подписью.

    oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
    oSignedData.Content = Кодировать(ТекстДляПодписи);    
    //Сообщить(oSignedData.Content);
    
    sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);// Метод добавляет к сообщению усовершенствованную подпись.

    
    Возврат sSignedMessage;// Подпись в формате Base64

    
КонецФункции


то возвращает одно значение, а когда подписываю на сайте

https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html

то значение другое (хотя общие символы и встречаются).
И вот с Date, который я подписал на сайте токен возвращается нормально.
Значит я неправильно подписываю.

Пробовал вернуть к старому варианту
ФайлИн = ПолучитьИмяВременногоФайла();
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(data);
ТекстовыйФайл.Записать(ФайлИн, КодировкаТекста.UTF8);
        //
ФайлАут = ПолучитьИмяВременногоФайла();

Отпечаток = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";  (здесь стоит правильный отпечаток)
СтрокаКоманды = """C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe""" + " -sfsign -sign -in "+ ФайлИН + " -out " + ФайлАут + " -my " + Отпечаток + " -base64 -add";
ЗапуститьПриложение(СтрокаКоманды, "C:\Program Files (x86)\Crypto Pro\CSP", Истина);
Ответ = Новый ТекстовыйДокумент();
Ответ.Прочитать(ФайлАут, КодировкаТекста.UTF8);
ТекстОтвета = Ответ.ПолучитьТекст();
ТекстОтвета = СтрЗаменить(ТекстОтвета, Символы.ПС, "");
Сообщить(ТекстОтвета);

Не помогло
56 MWWRuza
 
гуру
18.03.20
15:17
Я через Capicom подписываю... Да, знаю, что эта технология устаревшая, но, пока работает, когда перестанет, тогда и буду думать о переходе на КадесКом, или как у Вас, на консольную утилиту...
Хотите - могу процедуры/функции подписания выложить...
57 igel1969
 
18.03.20
15:48
(56) можно, пожалуйста? уже голова опухла.
а я когда смогу получить агрегатные КМ как и Вы также потом поделюсь с тем кому нужно (я же на 8.2 все делаю)
58 igel1969
 
18.03.20
17:14
Ура, я получил токен!!!!!
еще один микрошажок пройден!!!!
теперь получить агрегацию осталось
59 MWWRuza
 
гуру
18.03.20
19:52
Вот, агрегация:

Перем ПрефиксВерсии;

Процедура Сформировать()
    token         = ПолучитьТокенЦРПТ(ВыбЭЦП, ПрефиксВерсии);
    КодУпаковки    = ЗаменитьСимволы(ОтрезатьЛишнееОтСтрМаркировки(СокрЛП(КодМаркировки)));
    ПечШКУП        = "ШК: " + КодУпаковки;
    Ответ        = глHTPP_ВыполнитьЗапрос("GET", "https://"; + СокрЛП(Константа.АдресСервисаМОТП) + "/private-office-api/private/v2/cis/aggregated?cis=" + КодУпаковки, "", token);
    Если ПустоеЗначение(Ответ) = 0 Тогда
        СзКодов = глРазборJSON(Ответ);
    КонецЕсли;
    Если СзКодов.РазмерСписка() = 0 Тогда
        Сообщить("Информации по коду " + СокрЛП(КодМаркировки) + " на сервере ""Честного знака"" не найдено!");  
    Иначе
        Таб         = СоздатьОбъект("Таблица");
        Таб.ИсходнаяТаблица("СписКодовМарк");
        Таб.ВывестиСекцию("Шапка");
        Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);        
        Сч             = 0;
        Для Сч = 1 По СзКодов.РазмерСписка() Цикл
            Код        = "";
            Марка    = СзКодов.ПолучитьЗначение(Сч, Код);
            Если СтрДлина(СокрЛП(Код)) < 4 Тогда
                ПечМарка    = СокрЛП(Марка);
                Расш         = "";
            Иначе
                ПечМарка    = СокрЛП(Код);
                Расш        = Марка;
            КонецЕсли;
            ПечНом            = Сч;
            Таб.ВывестиСекцию("Строка_1");
        КонецЦикла;
        Таб.ВывестиСекцию("Подвал");
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Список кодов маркировки","");        
    КонецЕсли;
    
КонецПроцедуры

Запрос в глобальнике, тот-же самый, который для токена.
60 MWWRuza
 
гуру
18.03.20
19:53
ПрефиксВерсии = "/api/v3/";
61 MWWRuza
 
гуру
18.03.20
19:57
";" = в адресе после ""https://""; лишняя, форум подставляет сам при вставке текста модуля...
62 MWWRuza
 
гуру
18.03.20
19:59
+(61)Во, опять подставил, думал две пары двойных кавычек помогут, а нет...
63 igel1969
 
19.03.20
08:04
(62) Получилось получить ))))
Хотя и чуть-чуть иначе в моем случае работает почему-то.
Все-равно без Вас я бы не справился, подсказки подводили меня к цели, давали направление.
Сейчас код приведу в порядок и выложу
64 igel1969
 
19.03.20
09:05
Вот, не спрашивайте как и почему (мноное сделано методом тыка), но это работает:

Функция НайтиЗначениеПараметра(Стр, Параметр)
     Ответ = "";
     Поз = Найти(Стр, Параметр);
     Если Поз > 0 Тогда
         Поз = Поз + СтрДлина(Параметр) + 3;
         Пока Сред(Стр, Поз, 1) <> """" Цикл
             Ответ = Ответ + Сред(Стр, Поз, 1);
             Поз = Поз + 1;
         КонецЦикла;
        
     КонецЕсли;
     Возврат Ответ;    
КонецФункции


Функция Кодировать(СтрокаКодирования)
     Кодировка = "windows-1251";
     ИмяВременногоФайла = ПолучитьИмяВременногоФайла();
    
     ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, Кодировка);
     ЗаписьТекста.Записать(СтрокаКодирования);
     ЗаписьТекста.Закрыть();
    
     ТвояСтрокаДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла);
     ЗакодированнаяСтрока = Base64Строка(ТвояСтрокаДвоичныеДанные);
     Попытка
         УдалитьФайлы(ИмяВременногоФайла);
     Исключение
         Сообщить("жопа");
         Возврат СтрокаКодирования;
     КонецПопытки;
     Возврат ЗакодированнаяСтрока;
КонецФункции



Функция Рекодировать(Строка)                        
    Рус = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя";
    Анг = "F,DULT`;PBQRKVYJGHCNEA[WXIO]SM" + """" + ".Zf,dult`;pbqrkvyjghcnea[wxio]sm" + """" + ".z";
    Стр = "";
    Для индекс = 1 по СтрДлина(Строка) Цикл
        Символ = Сред(Строка, индекс, 1);
        Поз = Найти(Рус, Символ);
        Если Поз > 0 Тогда
            Символ = Сред(Анг, Поз, 1);
        КонецЕсли;
        Стр = Стр + Символ;
    КонецЦикла;
    // Неплохо бы тут включить экранирование, как сказано в документации по API, чуть попозже.
    
    Если Сред(Стр, 1, 2) = "01" и Сред(Стр, 17, 2) = "21" Тогда // блоки
        Стр = "(01)" + Сред(Стр, 3, 14) + "(21)" + Сред(Стр, 19, 7);
    ИначеЕсли  Сред(Стр, 1, 4) = "(01)" и Сред(Стр, 19, 4) = "(21)" Тогда // новое написание блоков
        Стр = Лев(Стр, 29);
    Иначе
        Стр = Лев(Стр, 21);
    КонецЕсли;    
        
    Возврат Стр;
КонецФункции

Процедура ОсновныеДействияФормыПроверить(Кнопка)
    Код = Рекодировать(Код);
    Сообщить(Код);
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    попытка
        WinHttp.Open("GET", "https://ismotp.crptech.ru/api/v3/true-api/cises/aggregated/list?codes="; + СокрЛП(Код),0);
        WinHttp.SetRequestHeader("Authorization", "Bearer " + Токен);
        WinHttp.Send();
        РезультатСтр = WinHttp.ResponseText();
        Сообщить(РезультатСтр);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры


Функция ComОбъектСертификатаПоОтпечатку(Отпечаток)
    CAPICOM_CURRENT_USER_STORE         = 2;    // 2 - Искать сертификат в ветке "Личное" хранилища.
    CAPICOM_MY_STORE                   = "My";// Указываем, что ветку "Личное" берем из хранилища текущего пользователя
    CAPICOM_STORE_OPEN_READ_ONLY       = 0;    // Открыть хранилище только на чтение
    CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
    oStore = Новый COMОбъект("CAdESCOM.Store");// Объект описывает хранилище сертификатов
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY);// Открыть хранилище сертификатов
    Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, Отпечаток);
    ComОбъект = Certificates.Item(1);// Найденный сертификат (Com-объект)
    oStore.Close();// Закрыть хранилище сертификатов и освободить объект
    Возврат ComОбъект;
КонецФункции

Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint, bDetached)
    CADESCOM_BASE64_TO_BINARY = 1;// Входные данные пришли в Base64
    CADESCOM_CADES_TYPE = 1;// Тип усовершенствованной подписи
    EncodingType = 0;
    oSigner = Новый COMОбъект("CAdESCOM.CPSigner");// Объект, задающий параметры создания и содержащий информацию об усоверш-ной подписи
    oSigner.Options = 2;
    oSigner.Certificate = ComОбъектСертификатаПоОтпечатку(sThumbprint);
    oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");// Объект CadesSignedData предоставляет свойства и методы для работы с усоверш-ной подписью.
    oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
    oSignedData.Content = Кодировать(ТекстДляПодписи);    
    sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);// Метод добавляет к сообщению усовершенствованную подпись.
    Возврат sSignedMessage;// Подпись в формате Base64
КонецФункции


Процедура ОсновныеДействияФормыАвторизация(Кнопка)
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    попытка
        WinHttp.Open("GET", "https://ismotp.crptech.ru/api/v3/true-api/auth/key",0);      
        WinHttp.Send();
        РезультатСтр = WinHttp.ResponseText();
        Сообщить(РезультатСтр);
        uuid = НайтиЗначениеПараметра(РезультатСтр, "uuid");
        data = НайтиЗначениеПараметра(РезультатСтр, "data");
        Сообщить(uuid);
        Сообщить(data);
        
        Отпечаток = "252dec0451161f78670824799ed2e0f1ee52f171"; // отпечаток не настоящий, для форума изменил
        
        ТекстОтвета = ПодписатьТекст(СокрЛП(data), Отпечаток, Ложь);
        ТекстОтвета = СтрЗаменить(ТекстОтвета, Символы.ПС, "");
        ТекстОтвета = СтрЗаменить(ТекстОтвета, Символы.ВК, "");
        Сообщить(ТекстОтвета);
        
        WinHttp.Open("POST", "https://ismotp.crptech.ru/api/v3/true-api/auth/simpleSignIn",1);
        WinHttp.SetRequestHeader("Content-Type", "application/json");
        WinHttp.SetRequestHeader("Accept-Charset", "utf-8");
        СтрокаЗапроса = "{""uuid"": """+СокрЛП(Uuid)+""",""data"": """ + ТекстОтвета + """}";
        Сообщить(СтрокаЗапроса);
        WinHttp.Send(СтрокаЗапроса);
        Предупреждение("ывыв", 2, "");
        РезультатСтр = WinHttp.ResponseText(40);
        Токен = НайтиЗначениеПараметра(РезультатСтр, "token");
        Сообщить(Токен);
        

    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры
65 MWWRuza
 
гуру
19.03.20
14:21
(57) я же на 8.2 все делаю

Я вот думаю - а расскажите, зачем такие сложности? Даже если это какая-то самописка-нетленка, ИМХО, проще "украсть" из типовых 8.3... Все ближе...
Одно дело, я под 7.7 делаю, "украсть" не откуда, принципиально... Но, под восьмерку - куча типовых, где это все работает.
66 kkkooottt
 
21.04.20
14:31
Господа, нахожусь на этапе "отправляю uuid + data но не могу получить токен" - {"error_message":"Ошибка при выполнении запроса"}
Не подскажите как добились получения токена и в чем был корень проблемы? Вопрос в первую очередь к  igel1969. Спасибо!
67 ChMikle
 
25.05.20
11:14
(0) так в итоге-то на боевом заработало или нет ?
68 MWWRuza
 
гуру
25.05.20
11:48
(67) Разогрегация - да. Работает, вполне нормально, использую для получения ШК пачки как базовой единицы для создания приходной накладной полученной через ЭДО, блоками. Ну, и так список пачек в блоке могу получать, правда пока не понимаю, для чего: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-315.jpg
69 ChMikle
 
25.05.20
12:02
(68) Круто , за денежку отдадите ?
70 ChMikle
 
25.05.20
12:03
+(69) мне в принципе этот блок получения QR кодов пачек получить , а дальше я уже под наши нужны приженю
71 MWWRuza
 
гуру
25.05.20
12:25
(70) Да я и так поделюсь, только это не отдельный блок, это все встроено в конфигурацию... Сама внешняя обработка не будет работать без кусков глобального модуля. Вы лучше скажите - что у Вас конкретно не получается, я кину сюда текст процедуры/функции, как у меня это делается...

Обработку я могу выложить, но, только толку от нее... Я хотел в выходные собрать отдельной, самодостаточной обработкой, и выкинуть на ИС... А то, СМ заканчиваются :-)... Но, занят был другими делами, пока не получилось.
72 ChMikle
 
25.05.20
12:35
(71) Если на ИС будете выкладывать то мы бы за см взяли бы.
Не понятно : 1. разбор и сбор Json()
             2. ПолучитьPublic_cert()
             3. ЗначениеВJSON() , ЗначениеИзJSON()
             4. ПодписатьТекст()
             5. ОтрезатьЛишнееОтСтрМаркировки()
73 ChMikle
 
25.05.20
12:46
В качестве вклада в общую копилку , доделываю обработку перевода со 2-го регистра на 3ий старых акцизных марок по алкоголю , обработка не универсальная , но в качестве заготовки вполне подойдет , так что если кому надо поделюсь с удовольствием  . Естессно написано на 7.7.
74 MWWRuza
 
гуру
25.05.20
13:00
По пунктам:
1. Брал отсюда: https://github.com/r72cccp/1C77_JSON_parser/
2.
// ПолучитьPublic_cert(ПутьКСертификату)
//
// Параметры:
//  ПутьКСертификату - путь к файлу или текст сертификата КЭП
//
// Возвращаемое значение:
//  public_cert,signature
//
// Описание:
//  убирает переносы строк и возвращает содержимое в виде строки
//
Функция ПолучитьPublic_cert(ПутьКСертификату)
    
    ВозврPublic_cert = "";
    Если (Прав(ПутьКСертификату,4) = ".cer") ИЛИ (Прав(ПутьКСертификату,4) = ".txt") Тогда
        Если ФС.СуществуетФайл(ПутьКСертификату) = 0 Тогда
            Сообщить("Файл сертификата "+СокрЛП(ПутьКСертификату)+" не найден");
            Возврат "";
        КонецЕсли;
        АдоДБСтрим = СоздатьОбъект("ADODB.Stream");
        АдоДБСтрим.Mode = 3;
        АдоДБСтрим.Type = 2;//текст
        АдоДБСтрим.charset="utf-8";
        АдоДБСтрим.Open();
        АдоДБСтрим.LoadFromFile(ПутьКСертификату);
        АдоДБСтрим.Position = 0;
        ТекстСертификата = АдоДБСтрим.ReadText(-1);
        АдоДБСтрим.Close();
        Для СчСтрок = 1 По СтрКоличествоСтрок(ТекстСертификата) Цикл
            ТекСтрока = СтрПолучитьСтроку(ТекстСертификата,СчСтрок);
            Если Лев(ТекСтрока,4) = "----" Тогда
                Продолжить;
            КонецЕсли;
            ТекСтрока = СтрЗаменить(ТекСтрока,РазделительСтрок,"");
            ВозврPublic_cert = ВозврPublic_cert + ТекСтрока;
        КонецЦикла;
    Иначе
        Для СчСтрок = 1 По СтрКоличествоСтрок(ПутьКСертификату) Цикл
            ТекСтрока = СтрПолучитьСтроку(ПутьКСертификату,СчСтрок);
            Если Лев(ТекСтрока,4) = "----" Тогда
                Продолжить;
            КонецЕсли;
            ТекСтрока = СтрЗаменить(ТекСтрока,РазделительСтрок,"");
            ВозврPublic_cert = ВозврPublic_cert + ТекСтрока;
        КонецЦикла;
    КонецЕсли;

    Возврат ВозврPublic_cert;
    
КонецФункции // ПолучитьPublic_cert()

Тоже брал где-то тут. Если память не изменяет - была обработка подписания деклараций из 1с7.7, вроде код оттуда.
3. Это все из п. 1.
4. из п. 2.
5. ну, тут все просто:
// Отрезает от строки маркировки левую часть до первого СпецСимвола(Симв(29))
Функция ОтрезатьЛишнееОтСтрМаркировки(ИсхСтр) Экспорт
    ПозСпецСимвола        = Найти(ИсхСтр, Симв(29));
    Если ПозСпецСимвола = 0 Тогда
        ПозСпецСимвола    = Найти(ИсхСтр, "8005");        
    КонецЕсли;
    Если ПозСпецСимвола > 25 Тогда
        Возврат СтрЗаменить(Лев(ИсхСтр, ПозСпецСимвола - 1), Симв(29), "");    
    Иначе
        Возврат ИсхСтр;
    КонецЕсли;
КонецФункции
75 ChMikle
 
25.05.20
15:27
Не нашел одну функцию : ПодписатьТекст(code,СокрЛП(ВыбЭЦП.Отпечаток),1) и откуда брать отпечаток ?
76 MWWRuza
 
гуру
25.05.20
16:21
Отпечаток из справочника ЭЦП, в свою очередь он привязывается к реквизиту "Директор" СвоегоЮрЛица.

//******************************************************************************
// НайтиПоОтпечатку(Отпечаток, СпрСертификаты)
//
// Параметры:
//  Отпечаток, СпрСертификаты
//
// Возвращаемое значение:
//  1,0
//
// Описание:
//  
//
Функция НайтиПоОтпечатку(Отпечаток, СпрСертификаты)
    
    СпрСертификаты.ВыбратьЭлементы();
    Пока СпрСертификаты.ПолучитьЭлемент() = 1 Цикл
        Если Врег(СокрЛП(СпрСертификаты.Отпечаток)) = Врег(СокрЛП(Отпечаток)) Тогда
            Возврат 1;
        КонецЕсли;
    КонецЦикла;
    Возврат 0;
    
КонецФункции // НайтиПоОтпечатку()

//******************************************************************************
// ДанныеИзПодстроки(Подстрока, ВозврСЗ)
//
// Параметры:
//  Подстрока, ВозврСЗ
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  
//
Процедура ДанныеИзПодстроки(Подстрока, ВозврСЗ)
    Перем Ид,Данные;
    Если Найти(Подстрока,"=") > 0 Тогда
        Ид = Лев(Подстрока,Найти(Подстрока,"=")-1);
        Данные = Сред(Подстрока,Найти(Подстрока,"=")+1);
        //убираем кавычки
        Если Лев(Данные,1) = """" Тогда
            Данные = Сред(Данные,2);
        КонецЕсли;
        Если Прав(Данные,1) = """" Тогда
            Данные = Лев(Данные,СтрДлина(Данные)-1);
        КонецЕсли;
        Данные = СтрЗаменить(Данные,"""""","""");
    КонецЕсли;
    Если (ПустоеЗначение(Ид) = 0) И (ПустоеЗначение(Данные) = 0) Тогда
        ВозврСЗ.Установить(СокрЛП(Ид),СокрЛП(Данные));
    КонецЕсли;
КонецПроцедуры // ДанныеИзПодстроки()

//******************************************************************************
// ДанныеИзСтроки(СтрокаСОписанием)
//
// Параметры:
//  СтрокаСОписанием
//
// Возвращаемое значение:
//  Список значений
//
// Описание:
//  
//
Функция ДанныеИзСтроки(СтрокаСОписанием)
    Перем ВозврСЗ,Данные;
    ВозврСЗ = СоздатьОбъект("СписокЗначений");
    Данные = "";
    БылиОткрывающиеКавычки = 0;
    Для СчС = 1 По СтрДлина(СтрокаСОписанием) Цикл
        
        ТекСимв = Сред(СтрокаСОписанием,СчС,1);
        
        Если (ТекСимв = """") И (БылиОткрывающиеКавычки = 0) Тогда
            Данные = Данные + ТекСимв;
            БылиОткрывающиеКавычки = 1;
            Продолжить;
        КонецЕсли;
        Если (ТекСимв = """") И (БылиОткрывающиеКавычки = 1) Тогда
            Данные = Данные + ТекСимв;
            БылиОткрывающиеКавычки = 0;
            Продолжить;
        КонецЕсли;
        Если (ТекСимв = ",") И (БылиОткрывающиеКавычки = 0) Тогда
            ДанныеИзПодстроки(Данные,ВозврСЗ);
            Данные = "";
            Продолжить;
        КонецЕсли;
        Данные = Данные + ТекСимв;
    КонецЦикла;
    ДанныеИзПодстроки(Данные,ВозврСЗ);
    
    Возврат ВозврСЗ;
    
КонецФункции // ДанныеИзСтроки()

//******************************************************************************
// Прочитать()
//
// Параметры:
//  
//
// Возвращаемое значение:
//  ТблДанные
//
// Описание:
//  
//
Функция Прочитать()
    
    //чтение
    ТблДанные = СоздатьОбъект("ТаблицаЗначений");
    ТблДанные.НоваяКолонка("Отпечаток");
    ТблДанные.НоваяКолонка("СерийныйНомер");
    ТблДанные.НоваяКолонка("Субъект");
    ТблДанные.НоваяКолонка("Издатель");
    ТблДанные.НоваяКолонка("ДействителенС");
    ТблДанные.НоваяКолонка("ДействителенПо");
    ТблДанные.НоваяКолонка("ДанныеСертификата");
    CAPICOM_CURRENT_USER_STORE = 2; // 2 - Искать сертификат в ветке "Личное" хранилища.
    CAPICOM_MY_STORE = "My"; // Указываем, что ветку "Личное" берем из хранилища текущего пользователя
    CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение
    
//    CAPICOM_CERTIFICATE_FIND_TIME_EXPIRED = 11;
    
    //oStore = СоздатьОбъект("CAdESCOM.Store"); // Объект описывает хранилище сертификатов
//    oStore = СоздатьОбъект("CAPICOM.Store"); // Объект описывает хранилище сертификатов
    oStore = СоздатьОбъект("CAdESCOM.Store"); // Объект описывает хранилище сертификатов
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов
    Certs = oStore.Certificates;
    Для СчСер = 1 По Certs.Count Цикл
        ТекСертификат  = Certs.Item(СчСер);
        Отпечаток      = ТекСертификат.Thumbprint;
        Субъект        = ТекСертификат.SubjectName;
        Издатель       = ТекСертификат.IssuerName;
        ДействителенС  = ТекСертификат.ValidFromDate;
        ДействителенПо = ТекСертификат.ValidToDate;
        Если ДействителенПо < ТекущаяДата() Тогда
            Продолжить;
        КонецЕсли;
        СерийныйНомер  = ТекСертификат.SerialNumber;
        //Версия         = ТекСертификат.Version;
        //Archived       = ТекСертификат.Archived;
        //Если Archived = 1 Тогда
        //    Продолжить;
        //КонецЕсли;
        //PrivateKey    = ТекСертификат.PrivateKey;
        ДанныеСертификатаBase64 = ТекСертификат.Export();
        //PublicKey      = ТекСертификат.PublicKey();
        //EncodedKey     = PublicKey.EncodedKey;
        
        ТблДанные.НоваяСтрока();
        ТблДанные.Отпечаток         = Отпечаток;
        ТблДанные.СерийныйНомер     = СерийныйНомер;
        ТблДанные.Субъект           = Субъект;
        ТблДанные.Издатель          = Издатель;
        ТблДанные.ДействителенС     = ДействителенС;
        ТблДанные.ДействителенПо    = ДействителенПо;
        ТблДанные.ДанныеСертификата = ДанныеСертификатаBase64;
        
    КонецЦикла;
    
    oStore.Close(); // Закрыть хранилище сертификатов и освободить объект
    
    Возврат ТблДанные;
    
КонецФункции // Прочитать()

//******************************************************************************
// ТекстКомуВыдан(сзСубъект)
//
// Параметры:
//  сзСубъект
//
// Возвращаемое значение:
//  Строка
//
// Описание:
//  
//
Функция ТекстКомуВыдан(сзСубъект)
    Перем СчЦ,Ид,ВремЗнач,СтрКомуВыдан;
    
    Если сзСубъект.РазмерСписка() = 0 Тогда
        Возврат "";
    КонецЕсли;
    Для СчЦ = 1 По сзСубъект.РазмерСписка() Цикл
        Ид = "";
        ВремЗнач = сзСубъект.ПолучитьЗначение(СчЦ,Ид);
        Если Ид = "CN" Тогда
            Если СчЦ > 1 Тогда
                сзСубъект.СдвинутьЗначение(-СчЦ+1,СчЦ);
            КонецЕсли;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    СтрКомуВыдан = сзСубъект.ВСтрокуСРазделителями();
    
    //убираем кавычки
    Если Лев(СтрКомуВыдан,1) = """" Тогда
        СтрКомуВыдан = Сред(СтрКомуВыдан,2);
    КонецЕсли;
    Если Прав(СтрКомуВыдан,1) = """" Тогда
        СтрКомуВыдан = Лев(СтрКомуВыдан,СтрДлина(СтрКомуВыдан)-1);
    КонецЕсли;
    СтрКомуВыдан = СтрЗаменить(СтрКомуВыдан,""",""",",");
    СтрКомуВыдан = СтрЗаменить(СтрКомуВыдан,"""""","""");
    Возврат СтрКомуВыдан;
    
КонецФункции // ТекстКомуВыдан()


//******************************************************************************
// ЗаполнитьРеквизиты()
//
// Параметры:
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  Заполняет элемент справочника
//
Процедура ЗаполнитьРеквизиты(ЭлСертификаты,ТблДанные)
    
    СпрСертификаты2 = СоздатьОбъект("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования");
    Если СпрСертификаты2.НайтиЭлемент(ЭлСертификаты) = 0 Тогда
        Возврат;
    КонецЕсли;
    СпрСертификаты2.ДействителенС  = ТблДанные.ДействителенС;
    СпрСертификаты2.ДействителенПо = ТблДанные.ДействителенПо;
    СпрСертификаты2.СерийныйНомер  = ТблДанные.СерийныйНомер;
    
    Если Найти(ТблДанные.ДанныеСертификата,РазделительСтрок) = 0 Тогда
        //порежем для наглядности
        ДанныеСертификатаBase64 = ТблДанные.ДанныеСертификата;
        ДанныеСертификатаBase64ре = "";
        Для СчСтрок = 1 По Цел(СтрДлина(ДанныеСертификатаBase64)/48) Цикл
            Если СчСтрок > 1 Тогда
                ДанныеСертификатаBase64ре = ДанныеСертификатаBase64ре + РазделительСтрок;
            КонецЕсли;
            ДанныеСертификатаBase64ре = ДанныеСертификатаBase64ре + Сред(ДанныеСертификатаBase64,1+(СчСтрок-1)*48,48);
        КонецЦикла;
        СпрСертификаты2.ДанныеСертификата = ДанныеСертификатаBase64ре;
    Иначе
        СпрСертификаты2.ДанныеСертификата = ТблДанные.ДанныеСертификата;
    КонецЕсли;
    
    
    
    сзСубъект  = ДанныеИзСтроки(ТблДанные.Субъект);
    
    СпрСертификаты2.КомуВыдан      = ТекстКомуВыдан(сзСубъект);
    СпрСертификаты2.Наименование   = сзСубъект.Получить("CN");
    СпрСертификаты2.Фамилия        = сзСубъект.Получить("SN");
    СпрСертификаты2.Имя            = сзСубъект.Получить("G");
    СпрСертификаты2.ЭлАдрес        = сзСубъект.Получить("E");
    ВремЗнач = Найти(СокрЛП(СпрСертификаты2.Имя)," ");//Отчество за именем
    Если ВремЗнач > 0 Тогда
        СпрСертификаты2.Отчество   = Сред(СпрСертификаты2.Имя,ВремЗнач+1);
        СпрСертификаты2.Имя        = Лев(СпрСертификаты2.Имя,ВремЗнач-1);
    КонецЕсли;
    СпрСертификаты2.Должность      = сзСубъект.Получить("T");
    ИННизСертификата               = сзСубъект.Получить("ИНН");
    Если ПустоеЗначение(ИННизСертификата) = 0 Тогда
        //СпрСертификаты2.ЮрЛицо     = глНайтиЮрЛицоПоИНН(ИННизСертификата);
    КонецЕсли;
    сзИздатель = ДанныеИзСтроки(ТблДанные.Издатель);
    СпрСертификаты2.КемВыдан       = сзИздатель.Получить("CN");
    СпрСертификаты2.Записать();
    
    
КонецПроцедуры // ЗаполнитьРеквизиты()


//******************************************************************************
// Обновить()
//
// Параметры:
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  
//
Процедура Обновить()
    
    тблДанные = Прочитать();
    СчОбн = 0;
    //обновление справочника
    СпрСертификаты = СоздатьОбъект("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования");//для выборки
    ТблДанные.ВыбратьСтроки();
    Пока ТблДанные.ПолучитьСтроку() = 1 Цикл
        флЭлементЕсть = НайтиПоОтпечатку(ТблДанные.Отпечаток,СпрСертификаты);
        Если флЭлементЕсть = 0 Тогда
            Продолжить;
        КонецЕсли;
        СчОбн=СчОбн+1;
        ЗаполнитьРеквизиты(СпрСертификаты.ТекущийЭлемент(),тблДанные);
    КонецЦикла;
    Сообщить("Обновлена информация о "+СчОбн+" сертификатов");
    
КонецПроцедуры // Обновить()

//******************************************************************************
// Добавить()
//
// Параметры:
//  
//
// Возвращаемое значение:
//  Нет
//
// Описание:
//  
//
Процедура Добавить()
    
    тблДанные = Прочитать();
    СпрСертификаты = СоздатьОбъект("Справочник.СертификатыКлючейЭлектроннойПодписиИШифрования");//для выборки
    сзВыбор = СоздатьОбъект("СписокЗначений");
    ТблДанные.ВыбратьСтроки();
    Пока ТблДанные.ПолучитьСтроку() = 1 Цикл
        флЭлементЕсть = НайтиПоОтпечатку(ТблДанные.Отпечаток,СпрСертификаты);
        Если флЭлементЕсть = 0 Тогда
            сзСубъект  = ДанныеИзСтроки(ТблДанные.Субъект);
            сзВыбор.ДобавитьЗначение(тблДанные.Отпечаток,ТекстКомуВыдан(сзСубъект));
            сзВыбор.Пометка(сзВыбор.РазмерСписка(),1);
        КонецЕсли;
        
    КонецЦикла;
    
    Если сзВыбор.РазмерСписка() = 0 Тогда
        Сообщить("Новых сертификатов не найдено");
    Иначе
        Если сзВыбор.ОтметитьЗначения(,"Укажите сертификаты для добавления") = 1 Тогда
            Для СчЦ = 1 По сзВыбор.РазмерСписка() Цикл
                Если сзВыбор.Пометка(СчЦ) = 1 Тогда
                    ТекОтпечаток = сзВыбор.ПолучитьЗначение(СчЦ);
                    ТблДанные.ВыбратьСтроки();
                    Пока ТблДанные.ПолучитьСтроку() = 1 Цикл
                        Если тблДанные.Отпечаток = ТекОтпечаток Тогда
                            СпрСертификаты.Новый();
                            СпрСертификаты.Отпечаток = ТекОтпечаток;
                            СпрСертификаты.Записать();
                            ЗаполнитьРеквизиты(СпрСертификаты.ТекущийЭлемент(),тблДанные);
                            Прервать;
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры // Добавить()
77 MWWRuza
 
гуру
25.05.20
16:23
Подписать текст:

// sThumbprint - отпечаток сертификата, используемого для подписи; строка, представляющая отпечаток в шестандцатеричном виде
Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint,БезBOM=1)
    
    infile = КаталогВременныхФайлов()+"infile.txt";
    Если ФС.СуществуетФайл(infile) = 1 Тогда
        Попытка
            ФС.УдалитьФайл(infile);
        Исключение
            infile = КаталогВременныхФайлов() + "infile" + ГенераторGIUD() + ".txt";
        КонецПопытки;
    КонецЕсли;
    outfile = КаталогВременныхФайлов()+"outfile.txt";
    Если ФС.СуществуетФайл(outfile) = 1 Тогда
        Попытка
            ФС.УдалитьФайл(outfile);
        Исключение
            outfile = КаталогВременныхФайлов() + "outfile" + ГенераторGIUD() + ".txt";
        КонецПопытки;
    КонецЕсли;
    Если Прав(ТекстДляПодписи,4) = ".xml" Тогда
        infile = ТекстДляПодписи;
        ПодписатьФайл(infile,ПолучитьСертификатПоОтпечатку(sThumbprint),outfile);
        Если ФС.СуществуетФайл(outfile) = 1 Тогда
            Возврат outfile;
        Иначе
            Возврат "";
        КонецЕсли;
    Иначе
        Если БезBOM = 1 Тогда
            ВремТекст = СоздатьОбъект("Текст");
            ВремТекст.ДобавитьСтроку(ТекстДляПодписи);
            ВремТекст.Записать(infile);
        Иначе
            АдоДБСтрим = СоздатьОбъект("ADODB.Stream");
            АдоДБСтрим.Mode = 3;
            АдоДБСтрим.Type = 2;//текст
            АдоДБСтрим.charset="utf-8";
            АдоДБСтрим.Open();
            АдоДБСтрим.WriteText(ТекстДляПодписи);
            АдоДБСтрим.Position=0;
            АдоДБСтрим.SaveToFile(infile,2);
            АдоДБСтрим.Close();
        КонецЕсли;
        ПодписатьФайл(infile,ПолучитьСертификатПоОтпечатку(sThumbprint),outfile);
        Если ФС.СуществуетФайл(outfile) = 1 Тогда
            Возврат outfile;
        Иначе
            Возврат "";
        КонецЕсли;
        
        
    КонецЕсли;

КонецФункции
78 MWWRuza
 
гуру
25.05.20
16:26
Вообще, это все с ИнфоСтарта, вроде по лекарствам там была уже давно публикация, я просто адаптировал под свое...
79 ChMikle
 
26.05.20
12:21
ГенераторGIUD() Выложите ?
80 ChMikle
 
26.05.20
12:25
и ЗначениеВJson() тоже не нашел
81 ChMikle
 
26.05.20
12:39
ПолучитьСертификатПоОтпечатку(sThumbprint)
82 big
 
26.05.20
12:59
(79) можно взять в FormEx-е или в v7plus, а можно самому придумать. Он же используется только для имени временного файла.

(80) там структура простейшая, функция пишется на раз-два

(81)

Функция ComОбъектСертификатаПоОтпечатку(Отпечаток)
    
    CAPICOM_CURRENT_USER_STORE         = 2;        // 2 - Искать сертификат в ветке "Личное" хранилища.
    CAPICOM_MY_STORE                   = "My";    // Указываем, что ветку "Личное" берем из хранилища текущего пользователя
    CAPICOM_STORE_OPEN_READ_ONLY       = 0;        // Открыть хранилище только на чтение
    CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
    
    oStore = СоздатьОбъект("CAdESCOM.Store");    // Объект описывает хранилище сертификатов
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY);// Открыть хранилище сертификатов
    
    Certificates    = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, Отпечаток);
    ComОбъект        = Certificates.Item(1);// Найденный сертификат (Com-объект)
    
    oStore.Close();    // Закрыть хранилище сертификатов и освободить объект
    
    Возврат ComОбъект;
    
КонецФункции
83 MWWRuza
 
гуру
26.05.20
14:07
(79)
// ГенераторGIUD()
//
// Параметры:
//  
// Возвращаемое значение:
//  GIUD
//
// Описание:
//  
Функция ГенераторGIUD()
    ОбъектGUID = СоздатьОбъект("GUID");//1С++
    ОбъектGUID.Новый();
    Возврат ОбъектGUID.ВСтроку();
КонецФункции // ГенераторGIUD()
84 MWWRuza
 
гуру
26.05.20
14:08
//******************************************************************************
// ЗначениеВJSON(Объект)
//
// Параметры:
//  Объект
//
// Возвращаемое значение:
//  json
//
// Описание:
//  https://pastebin.com/HFaEaETX
//  https://wiki.rtzra.ru/software/1c/1c-json
//  Запись/чтение JSON под 1С7.7
//  http://catalog.mista.ru/public/59535/
//  
//
Функция ЗначениеВJSON(Объект,Форматированный="") Экспорт
    
    Тип = ТипЗначенияСтр(Объект);
    Если Тип = "СписокЗначений" Тогда
        //то определим с ключами или без
        Если Объект.РазмерСписка() = 0 Тогда
            Тип = "СписокЗначенийбезКлючей";
        Иначе
            Ключ = "";
            Значение = Объект.ПолучитьЗначение(1,Ключ);
            Если ПустоеЗначение(Ключ) = 1 Тогда
                Тип = "СписокЗначенийбезКлючей";
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
    
    Если Тип = "ТаблицаЗначений" Тогда
        сзКолонки = СоздатьОбъект("СписокЗначений");
        Для СчЦ = 1 По Объект.КоличествоКолонок() Цикл
            ИмяКолонки = Объект.ПолучитьПараметрыКолонки(СчЦ);
            сзКолонки.ДобавитьЗначение(ИмяКолонки);
        КонецЦикла;
        КоличКолонок = сзКолонки.РазмерСписка();
        Результат = "["+РазделительСтрок;
        КоличСтрок = Объект.КоличествоСтрок();
        Для СчСтрок = 1 По КоличСтрок Цикл
            Результат = Результат + " {";
            Для СчК = 1 По сзКолонки.РазмерСписка() Цикл
                Ключ = сзКолонки.ПолучитьЗначение(СчК);
                Значение = Объект.ПолучитьЗначение(СчСтрок,Ключ);
                Результат = Результат + "  " + ЗначениеВJSON(Ключ) + ": " + ЗначениеВJSON(Значение) + ?(СчК < КоличКолонок, ","+РазделительСтрок, "");
            КонецЦикла;
            Результат = Результат + РазделительСтрок + " }";
            Если СчСтрок < КоличСтрок Тогда
                Результат = Результат + ","+РазделительСтрок;
            КонецЕсли;
            Состояние("Обработка таблицы значений "+Окр(СчСтрок/КоличСтрок*100,2)+"%");
        КонецЦикла;
        Результат = Результат + РазделительСтрок + "]";
        Возврат Результат;
    ИначеЕсли Тип = "СписокЗначенийбезКлючей" Тогда //без ключей
        
        Количество = Объект.РазмерСписка();
        Результат = "[";
        
        Для н = 1 ПО Количество Цикл
            Результат = Результат + ЗначениеВJSON(Объект.ПолучитьЗначение(н)) + ?(н < Количество, ", ", "");
        КонецЦикла;
        
        Результат = Результат + "]";
        Возврат Результат;
        
    ИначеЕсли Тип = "СписокЗначений" Тогда //с ключами
        н = 0;
        Количество = Объект.РазмерСписка();
        Результат = "{";
        
        Для СчЦ = 1 По Количество Цикл
            Ключ = "";
            Значение = Объект.ПолучитьЗначение(СчЦ,Ключ);
            Результат = Результат + ЗначениеВJSON(Ключ) + ": " + ЗначениеВJSON(Значение) + ?(СчЦ < Количество, ", ", "");
        КонецЦикла;
        Результат = Результат + "}";
        Возврат Результат;
    ИначеЕсли Тип = "Строка" Тогда
        Результат = СокрЛП(Объект);
        Результат = СтрЗаменить(Результат, "\",            "\\");
        Результат = СтрЗаменить(Результат, "/",            "\/");
        Результат = СтрЗаменить(Результат, """",           "\""");
        Результат = СтрЗаменить(Результат, "'",            "\'");
        Результат = СтрЗаменить(Результат, Симв(13),       "\r");
        Результат = СтрЗаменить(Результат, СимволТабуляции,"\t");
        Результат = СтрЗаменить(Результат, Симв(10),       "\n");
        Возврат """" + Результат + """";
    ИначеЕсли Тип = "Число" Тогда
        Возврат Формат(Объект, "Ч");
    ИначеЕсли Тип = "Дата" Тогда
        Возврат ЗначениеВJSON(""+ДатаГод(Объект)+"-"+ДатаМесяц(Объект)+"-"+ДатаЧисло(Объект));
    ИначеЕсли Тип = "НеизвестныйОбъект" Тогда
            Возврат "null";
    Иначе
        Возврат ЗначениеВJSON(Строка(Объект));
    КонецЕсли;    
    
КонецФункции // ЗначениеВJSON()
85 ChMikle
 
26.05.20
14:18
(84) У меня все сильнее растет надежда что вы все-таки на ИС выложите готовую внешнюю обработку с входом QR блока и выходом спула QR-кодов пачек и мы ее приобретем :))
86 victuan1
 
26.05.20
15:00
(77) Не работает для открепленной подписи.
87 MWWRuza
 
гуру
26.05.20
16:28
(85) Надежда еще не померла? Сегодня вечером выложу :-)...
88 MWWRuza
 
гуру
26.05.20
17:30
+(87) Выложил. Публикация № 1241751
Пока, наверное на модерации.
89 ChMikle
 
26.05.20
18:00
(88)Вы вернули мне веру в человечество :)))
90 MWWRuza
 
гуру
27.05.20
09:07
+(88) Пока, наверное на модерации.

Завернули... Не поняли, что такое "разогрегация"... Слово не понравилось, согласен, как-то "не по русски", но, как по другому? Люди "в теме" - поймут... Остальным, это просто не нужно... Но, тем не менее - исправил, теперь заголовок такой: "Разогрегация(получение кодов маркировки, товаров, входящих в "агрегатированные" производителем/поставщиком упаковки) для табачной продукции"... Ну, уж даже и не знаю... Думаю, прокатит...
91 MWWRuza
 
гуру
27.05.20
10:40
Проскочило... Вот: http://catalog.mista.ru/public/1241751/
Проверьте, все-ли работает...
92 Arbuz
 
27.05.20
12:13
(90) дезАгрегация, же! хотя могли бы использовать "сегментация", например.
93 ChMikle
 
27.05.20
12:31
(92) Хоть как называй, только в печь не клади :)))
94 Arbuz
 
27.05.20
13:03
(93) так то, безусловно, Влад делает нужную и полезную вещь, просто "разОгрегация" - это какое-то кафкианство  https://yandex.ru/images/search?text=грегор%20замза
хотя, о чём это я... 〳 ͡° Ĺ̯ ͡° 〵
95 victuan1
 
28.05.20
04:49
(90) теперь заголовок такой: "Разогрегация(получение кодов маркировки, товаров, входящих в "агрегатированные" производителем/поставщиком упаковки) для табачной продукции".

Всё равно не правильно. Замени "о" на "а" чтобы было "Разагрегация", слово образовано от приставки "раз" и существительного "агрегат".
Слова "огрегат" не существует.
96 MWWRuza
 
гуру
28.05.20
09:15
(95) Исправил.
97 MWWRuza
 
гуру
28.05.20
10:02
+(96) Нормально так... Все хотели, всем надо было... Бросил все, выдрал из конфы, создал самостоятнльную внешнюю обработку, опубликовал... В итоге, за два дня - 161 просмотр, и ни одного скачивания....
Неужели так "безграмотный" заголовок отпугнул-? Или, действительно никому не нужно - ?
98 victuan1
 
28.05.20
10:12
(97) На самом деле, никому не нужен "полуфабрикат". Нужно готовое решение из коробки.
:-(
99 ChMikle
 
28.05.20
16:23
(97) Нужно , я точно куплю, просто на ИС у меня нет стартмани пока , но если позволите переводом на карту оплатить, а по факту получения в почту кините , то будет быстрее . Если нет то на следующей неделе точно :))
100 MWWRuza
 
гуру
28.05.20
21:36
(99) На почту написал.

(98) Ну, Виктор, это спорный вопрос... Все-таки эти наши форумы, больше не для конечных пользователей, а для программистов, внедренцев, и т.п. специалистов... И этому контингенту, чаще всего нужны "идеи", какие-то небольшие наработки, и т.п., которые они смогут использовать в своих проектах. Лично я, например, за все время не купил ни одного "готового решения из коробки", но очень активно собирал по крупицам всякие мелкие наработки, которые активно использую в своих решениях...
Другое дело - какие-нибудь бухгалтерские форумы, где тусуются "тетеньки бухгалтера" и "дяденьки владельцы бизнесов", которые в конфигуратор, максимум для сохранения резервной копии заходят, а то и того боятся... Вот там, точно такие обработки даже даром не нужны, там, как раз нужны "готовые решения из коробки", да еще и желательно с включенными часами на внедрение...
101 victuan1
 
29.05.20
04:44
(100) Мало осталось спецов по 1С 77, к сожалению. Вот их малое кол-во и определит малое кол-во скачиваний.
Остальные пользователи дадут только статистику на просмотр ;)
Но на самом деле, мои суждения - не абсолютная истина.
На самом деле всё сложнее и многограннее. Со временем мое мнение изменится ;)
102 ChMikle
 
29.05.20
11:21
Две копейки вставлю свои по поводу (91). Обработка имеет законченный вид, удобный и простой интерфейс, работает быстро и верно :))
Аффтару респект и уважуха за ветку, терпение, подсказки и конечный КОРОБОЧНЫЙ продукт :)))
103 ChMikle
 
29.05.20
11:28
(101) >>Мало осталось спецов по 1С 77, к сожалению
Скорее всего 1С 7.7 все меньше соответствует современным трендам и техническим веяниям в отрасли IT, отсюда и вымывание большой востребованности  в дополнительных приблудах по 1С 7.7 , так как многие вещи реализованные в рамках типовых продуктов 1С 8.3 и перспективы развития 1С 7.7 не предвидится :)
104 victuan1
 
29.05.20
15:23
(103) Это верно. Тотальная маркировка всех групп товаров окончательно добьет семерку :)
105 ChMikle
 
29.05.20
16:23
(104) не факт , тут все зависит от степени сложности внедрения. ЕГАИС на ТИС 7.7 многие пережили
106 victuan1
 
29.05.20
17:04
(105) ЕГАИС и Меркурий проще, причем в разы в реализации на 1С 7.7 (имею опыт).
107 Djelf
 
29.05.20
17:51
(103) Согласен! Неповоротливость Снеговика в Клюшках не реализована.
Но это можно исправить с помощью таймера FormEx и Система.Уснуть из 1с++ xD
108 ChMikle
 
29.05.20
17:53
(106) ЕГАИС тоже разобрался и поддерживаю  актуально  на 7.7, Меркурий - начал в 2017 летом, но тогда это вообще было все настолько сыро и убого , что плюнул не стал развивать, хотя все с точки зрения программирования было не сложно , чз по табачке в принципе тоже . Но вот все что касается интеграции с интернетом, WEB-клиент - реализация в 7.7 конечно в разы уступает :)
109 ChMikle
 
29.05.20
17:54
я выше писал, кому нужен код постановки на 3ий регистр  - за ради бога :)
110 MWWRuza
 
гуру
29.05.20
19:13
(107) Класс!!! Возьму себе в цитаты! :-)
111 monsterZE
 
13.06.20
12:06
Хз, актуально или уже нет - но доки выдаются по: https://ismp.crpt.ru/api/v3/facade/doc/listV2
112 monsterZE
 
13.06.20
14:19
получает содержимое документа
https://ismp.crpt.ru/api/v3/facade/doc/"+СокрЛП(ВыбДок)+"/body?limit=1000
но что-то я не понял.. если лимит не указывать - возвращает 50 первых объектов и реквизит content возвращает постоянно, а в нем полный первичный документ.. со всеми позициями.
113 MWWRuza
 
гуру
14.06.20
08:43
(111) Странно конечно, но у меня почему-то по этому адресу не работает... Зато работает по: https://ismotp.crptech.ru/api/v3/facade/doc/listV2 ... т.е, не crpt, а crpttech...
При этом сразу, без запроса ИДСписка и получения его статуса выдает ответ списком документов(естественно, в ДжейСон)... При этом каждый документ(в моем случае, значение "total"=24, значит, их, как я понимаю - 24), тоже в виде списка значений, на скриншоте: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/h-317.jpg
При этом: "number" имя файла XML, ну и все остальные реквизиты шапки тоже в списке, но ссылки на сам документ, я что-то не вижу... В "number" только имя, без пути... Как Вы содержимое получали? Я так понимаю, в "ВыбДок" нужно ссылку передавать, или я ошибаюсь?
114 monsterZE
 
15.06.20
10:01
(113) в ВыбДок передаю ИД документа
зашел в ЛК ЧЗ, посмотрел что есть из документов, потом попробовал их получить.. сначала список (добавил со статусом ожидают_приемки)
https://ismp.crpt.ru/api/v3/facade/doc/listV2?documentStatus=WAIT_ACCEPTANCE
В total, наверное, не количество доков.. т.к. у меня 2а документа ожидают приемки и выглядит это вот так:
results : СписокЗначений    
   0 : СписокЗначений    
      number : 63655d89-fa12-4d2b-b377-e3f337267616    
      docDate : 2020-06-01T09:52:51.690Z    
      receivedAt : 2020-06-01T09:52:51.690Z    
      type : LP_SHIP_GOODS_CSV    
      status : WAIT_ACCEPTANCE    
      senderName : ООО ЧЧЧ
      receiverName : ИП ЧЧЧ
      downloadStatus : WAIT_ACCEPTANCE    
      downloadDesc :    
      input : -1    
      pdfFile :    
      docErrors : СписокЗначений    
   1 : СписокЗначений    
      number : 88f9fd22-b809-49d2-a466-532e5b07cf05    
      docDate : 2020-06-11T13:33:30.954Z    
      receivedAt : 2020-06-11T13:33:30.954Z    
      type : LP_SHIP_GOODS_CSV    
      status : WAIT_ACCEPTANCE    
      senderName : ООО ЧЧЧ
      receiverName : ИП ЧЧЧ
      downloadStatus : WAIT_ACCEPTANCE    
      downloadDesc :    
      input : -1    
      pdfFile :    
      docErrors : СписокЗначений    
      documentDataDto : СписокЗначений    
         trn : 1    
         k_offset : 292873    
         k_partition : 21    
total : 678    

В мануале total - "Количество вернувшихся ответов" что это за ответы, хз ))
115 monsterZE
 
15.06.20
10:08
Затем подсталяю в ВыбДок занчение number из предыдущего запроса:
https://ismp.crpt.ru/api/v3/facade/doc/"+СокрЛП(ВыбДок)+"/body?limit=1000

number : 63655d89-fa12-4d2b-b377-e3f337267616    
docDate : 2020-06-01T09:52:51.690Z    
receivedAt : 2020-06-01T09:52:51.690Z    
type : LP_SHIP_GOODS_CSV    
status : WAIT_ACCEPTANCE    
senderName : ООО ЧЧЧ
receiverName : ИП ЧЧЧ
downloadStatus : WAIT_ACCEPTANCE    
downloadDesc :    
body : СписокЗначений    
   sale : -1    
   turnover_type : SELLING    
   sender_inn : 77_ИНН
   document_num : 927    
   document_date : 2020-05-27T00:00:00Z    
   withdrawal_from_turnover : 0    
   transfer_date : 2020-05-27T00:00:00Z    
   receiver_inn : 58_ИНН
   to_not_participant : 0    
   owner_inn : 77_ИНН
   products : СписокЗначений    
      0 : СписокЗначений    
         uit_code : 010463008506247921EQB'dQ24V6b=R    
         product_cost : 19100    
         product_tax : 3183    
         product_description : Обувь пляжная мужская (пантолеты), 3383M-PE, р.44    
      1 : СписокЗначений    
         uit_code : 010463008506245521*Z9jj=X+mWGkZ    
         product_cost : 19100    
         product_tax : 3183    
         product_description : Обувь пляжная мужская (пантолеты), 3383M-PE, р.42    
      2 : СписокЗначений    
         uit_code : 010463008506249321IgWnJUp5>_6M*    
         product_cost : 19100    
         product_tax : 3183    
         product_description : Обувь пляжная мужская (пантолеты), 3383M-PE, р.46    
[..]
   sender : ООО ЧЧЧ
   receiver : ИП ЧЧЧ
   owner : ООО ЧЧЧ
content : ИНН отправителя,ИНН получателя,ИНН собственника,Дата передачи товара,Номер первичного документа,Дата первичного документа,Вид оборота товаров,Причина вывода из оборота,Дата вывода из оборота    
Далее полный csv файлик, который, как я понимаю, загружал поставщик.
[..]
input : -1    
pdfFile :    
docErrors : СписокЗначений
116 MWWRuza
 
гуру
15.06.20
15:04
(113) но у меня почему-то по этому адресу не работает... Зато работает по:

А... Так, судя по следующим сообщениям, у Вас "тапочки"... У меня то табачка, поэтому и адреса разные, тогда все понятно...
117 monsterZE
 
15.06.20
17:43
(116) ага. я, правда, не думал, что для разных групп товаров будут разные адреса.. )
118 victuan1
 
26.06.20
07:48
Обмен с ЭДО через ХМЛ файлы для табака на базе 1С 7.7
https://youtu.be/t48Fo_dDyX4
Будем дальше развивать решение. Благодарность всем, кто принимал участие и делился советами и наработками: Djelf, MWW, Сергей Че, Garycom, RMNK, Brenli  и остальным.
Будем дальше развивать данное направление, рано еще 1С 7.7 снимать с поддержки ;)
119 monsterZE
 
30.06.20
15:18
Остался вопрос о необходимости использовать ЭДО. Если есть возможность общаться с ЧЗ напрямую.
И как проверять клиентов на "зарегистрированность"? )
Есть на ЧЗ проверка по ИНН например?
120 monsterZE
 
30.06.20
18:33
По первому вопросу - пока точно можно работать напрямую.
121 ChMikle
 
13.08.20
10:54
Перестал работать запрос по QR УПАКОВКИ получать список QRкодов пачек. 503 Service Temporarily Unavailable. Никто не сталкивался ?
122 MWWRuza
 
гуру
13.08.20
14:22
Ну, да... В то время - не работало, судя по ошибке - у них проблемы были... Я уж думал, адреса серверов или параметры запроса изменили :-(
Сейчас попробовал - все работает. Только токен довольно долго получало, как мне показалось - секунд 30(при первом запросе - у меня идет получение токена и сохранение его для последующих запросов в течении часа), а последующие запросы отрабатывали мгновенно.
123 MWWRuza
 
гуру
13.08.20
14:25
+(122) Можно конечно было логирование времени отправки/получения результата в обработку встроить(да хоть просто в табло выводить), но, как-то и не к чему было :-)
124 ChMikle
 
13.08.20
15:00
Нормально все, проблема была на стороне ЧЗ , после 10 утра заработало как часики :)
125 kupec
 
14.09.20
11:31
Может кто поделиться обработкой из (91), стартмани нет (((
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс