|
1c Проверка сертификата на закрытый ключ в коде | ☑ | ||
|---|---|---|---|---|
|
0
Ravil45
28.04.26
✎
08:42
|
Здравствуйте, в 1с реализую автоматическую отправку через директ банк платёжные поручения. Поставил код для проверки сертификата на контейнер, подписывая его предварительно(проверка перед отправкой). Но оно работает долго, иногда быстро, но это редко(несмотря на количество документов). Может у кого есть код на проверку побыстрее. Ключи хранятся в криптоПро.
Свой код прилагаю: Процедура АвтоПодписаниеБанка() Экспорт ОтключитьОбработчикОжидания("АвтоПодписаниеБанка"); Если ПолучитьЗначениеКонстантыИспользоватьАвтоподписаниеБанкаНаСервере() Тогда Попытка СписокДокументов = ДО_СерверДиректБанк.ПолучитьСписокДокументовДляОтправкиВБанкПоДиректБанку(); //СписокДокументов = Новый Массив();//Временно СписокДокументовНаОтправку = Новый Массив(); Для Каждого ДокументПлатежки Из СписокДокументов Цикл Если ПроверкаСертификатаНаДоступность(ДокументПлатежки) Тогда //Если Ждать ПроверкаСертификатаНаДоступность(ДокументПлатежки) Тогда СписокДокументовНаОтправку.Добавить(ДокументПлатежки); КонецЕсли; КонецЦикла; Для Каждого ДокПлатежа Из СписокДокументовНаОтправку Цикл МассивОдногоДока = Новый Массив; МассивОдногоДока.Добавить(ДокПлатежа); итс_ОбщийМодульСервер.СогласоватьДокумент(МассивОдногоДока); ОбменСБанкамиКлиент.СформироватьПодписатьОтправитьЭД(МассивОдногоДока); КонецЦикла; Исключение итс_ОбщийМодульСервер.ИТСЗаписатьОшибкуВЖурнал(ОписаниеОшибки()); КонецПопытки; //На каждые 120 секунд ПодключитьОбработчикОжидания("АвтоПодписаниеБанка", 30); КонецЕсли; КонецПроцедуры &НаКлиенте //Асинх Функция ПроверкаСертификатаНаДоступность(ДокументПлатежки) Экспорт Функция ПроверкаСертификатаНаДоступность(ДокументПлатежки) Экспорт ДанныеСертификата = итс_ОбщийМодульСервер.ПолучениеДанныхСертификатаИзОбменаСБанком(ДокументПлатежки); Если ЗначениеЗаполнено(ДанныеСертификата) Тогда Сертификат = итс_ОбщийМодульСервер.ПолучениеСертификатаИзОбменаСБанком(ДокументПлатежки); КриптоСертификат = Новый СертификатКриптографии(ДанныеСертификата); //Доступен = Ждать ПроверитьНаличиеТокенаФизически(КриптоСертификат,Сертификат); Доступен = ПроверитьНаличиеТокенаФизически(КриптоСертификат,Сертификат); Возврат Доступен; Иначе Возврат Ложь; КонецЕсли; //Возврат Истина; КонецФункции Функция ПроверитьНаличиеТокенаФизически(КриптоСертификат,Сертификат) Менеджер = Новый МенеджерКриптографии("", "", 80); // Параметры по умолчанию ТекстДляПроверки = ПолучитьДвоичныеДанныеИзСтроки("Тест"); Менеджер.ПарольДоступаКЗакрытомуКлючу = ПроверкаСертификатаНаПарольНаСервере(Сертификат); //Менеджер.ИспользованиеИнтерактивногоРежима = ИспользованиеИнтерактивногоРежимаКриптографии.Использовать; Попытка // Пытаемся подписать данные. Если токена нет — упадет в Исключение Результат = Менеджер.Подписать(ТекстДляПроверки, КриптоСертификат,""); Текст = "Токен на месте " + "по сертификату " + Сертификат; Сообщить(Текст); Возврат Истина; Исключение Текст = "Токен недоступен " + "по сертификату " + Сертификат; Сообщить(Текст); Возврат Ложь; КонецПопытки; КонецФункции |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |