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

Как программно подписать данные УКЭП

08.08.2020 12:30


20.02.2020 12:08
MWWRuza
 
Ну, тут надо понимать, что читать надо "с конца" - вот эта функция "ПолучитьТокенЦРП" первая, а из нее уже вызываются те, что выше...
20.02.2020 12:10
George
 
Спасибо! Пойду разбираться
20.02.2020 12:11
MWWRuza
 
Т.е. мы сначала вот этой: "ВернутьПаруЗапрТокена" получаем пару ИД и к ней случ. данные, подписываем, и используя их, получаем уже токен...
20.02.2020 12:12
jokerpnz
 
на чём пишете? язык программирования
20.02.2020 12:15
MWWRuza
 
Но, сразу к сабжу, сообщ. №1 - эта вся моя "лабуда" работает только с КриптоПрошными(ну, или VipNet) ЭЦП. С ЕГАИСовскими аппаратными ключами, я пока работать не научился. На их сайте, работают и эти ключи, через соответствующий плагин.
20.02.2020 12:18
George
 
Вот бы еще исходники для ПодписатьФайл() и/или ПодписатьТекст()...
20.02.2020 12:19
MWWRuza
 
А... Еще одну обязательную функцию пропустил:

//https://infostart.ru/public/156973/
Функция ПодписатьФайл(ИмяФайла,ВыбСертификат,ИмяВыхФайла)

Попытка
JS=СоздатьОбъект("MSScriptControl.ScriptControl");
JS.Language="jscript";
JS.Timeout=-1;
Исключение
ТекстОшибки=ОписаниеОшибки();
Сообщить("Не удалось создать объект MSScriptControl.ScriptControl","!");
Сообщить("Описание ошибки: "+ТекстОшибки,"!");
Возврат 0;
КонецПопытки;

Попытка

СтрКода="function SignFile(FileName,Cert,OutFileName)
|{
| InStream=new ActiveXObject(""ADODB.Stream"");
| InStream.Type=1; // binary data
| InStream.Mode=3; // read/write
| InStream.Open();
| InStream.LoadFromFile(FileName);
| InData=InStream.Read(-1);
|
| Signer=new ActiveXObject(""CAPICOM.Signer"");
| Signer.Certificate=Cert;
| Signer.Options=2; // CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
| SignedData=new ActiveXObject(""CAPICOM.SignedData"");
| SignedData.Content=InData;
| OutSignedData=SignedData.Sign(Signer,0,0);
|
| OutStream=new ActiveXObject(""ADODB.Stream"");
| OutStream.CharSet=""utf-8"";
| OutStream.Type=2; // text data
| OutStream.Mode=3; // read/write
| OutStream.Open();
| OutStream.WriteText(OutSignedData);
| OutStream.SaveToFile(OutFileName,2);
| OutStream.Close();
|
| return(0);
|}
|";

JS.AddCode(СтрКода);
Рез=JS.Modules("Global").CodeObject.SignFile(ИмяФайла,ВыбСертификат,ИмяВыхФайла);
Исключение
ТекстОшибки=ОписаниеОшибки();
Сообщить("Произошла ошибка при подписи файла!","!");
Сообщить("Описание ошибки: "+ТекстОшибки,"!");
Возврат 0;
КонецПопытки;
Возврат 1;
КонецФункции
20.02.2020 12:21
George
 
Цитата:
jokerpnz на чём пишете? язык программирования
С/Harbour/PHP
20.02.2020 12:21
MWWRuza
 
Подписать текст выше смотрите, там вроде все есть.
20.02.2020 12:24
MWWRuza
 
Цитата:
George С/Harbour/PHP
Ну, тогда, Вам 90% того, что у меня в 1С наворочено, скорее всего не нужно. Многие вещи, которые у меня по 50 строк, там одним оператором должны делаться... Когда свое делал, под Ваше кучу примеров в сети находил.

Главное, сам принцип понять...

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