|
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), стартмани нет (((
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |