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