Пытаюсь получить токен в 1С для отправки запросов, для получения статусов КИЗ в ЧЗ.
Валится на выполнении вот этой функции в строке:
Вводные:
1. Работает на файловой БД.
2. Ошибка появляется при тестировании на серверной БД.
Первый опыт работы с подписанием из 1С, может есть опытные ребята, которые сталкивались с подобной задачей.
Текст Ошибки:
&НаСервере
Процедура ПолучитьТокенНаСервере()
Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
HTTPЗапрос = Новый HTTPЗапрос("/api/v1/auth",Заголовки);
ЗаписьJOIN = Новый ЗаписьJSON;
ЗаписьJOIN.УстановитьСтроку();
ДанныеДляЗапроса = Новый Структура;
ДанныеДляЗапроса.Вставить("client_id",client_id);
ДанныеДляЗапроса.Вставить("client_secret",client_secret);
ДанныеДляЗапроса.Вставить("user_id",user_id);
ДанныеДляЗапроса.Вставить("auth_type",auth_type);
ЗаписатьJSON(ЗаписьJOIN,ДанныеДляЗапроса);
СтрокаДляЗапроса = ЗаписьJOIN.Закрыть();
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ВызватьHTTPМетод("POST",HTTPЗапрос);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Структура = ПрочитатьJSON(ЧтениеJSON, Ложь);
УИД = Структура.code;
// Подписание данных для получения токена
ДанныеДляПолученияТокена = ПодписатьТекст(ЗашифроватьBase64(УИД,"UTF-8"),СертификатДляОбмена,Истина);
//ДанныеДляПолученияТокена = СтрЗаменить(ДанныеДляПолученияТокена,,"");
ЗаписатьВЖурнал("Подписано сертификатом " + СертификатДляОбмена + Символы.ПС + ДанныеДляПолученияТокена);
// Получение токена с использованием подписанных данных
Соединение = Новый HTTPСоединение(Сервер,443,,,,,Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
HTTPЗапрос = Новый HTTPЗапрос("api/v1/token",Заголовки);
ЗаписьJOIN = Новый ЗаписьJSON;
ЗаписьJOIN.УстановитьСтроку();
ДанныеДляЗапроса = Новый Структура;
ДанныеДляЗапроса.Вставить("code",УИД);
ДанныеДляЗапроса.Вставить("signature",ДанныеДляПолученияТокена);
ЗаписатьJSON(ЗаписьJOIN,ДанныеДляЗапроса);
СтрокаДляЗапроса = ЗаписьJOIN.Закрыть();
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
Токен = ПрочитатьJSON(ЧтениеJSON, Ложь).token;
КонецПроцедуры
ПоказатьВалится на выполнении вот этой функции в строке:
oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");
Функция ПодписатьТекст(ТекстДляПодписи, sThumbprint, bDetached)
CADESCOM_BASE64_TO_BINARY = 1; // Входные данные пришли в Base64
CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0; // Атрибут штампа времени подписи
oSigner = Новый COMОбъект("CAdESCOM.CPSigner");
// Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.
oSigner.Certificate = ПолучитьСертификатПоОтпечатку(sThumbprint);
oSigningTimeAttr = Новый COMОбъект("CAdESCOM.CPAttribute");
oSigningTimeAttr.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
oSigningTimeAttr.Value = ТекущаяДата();
oSigner.AuthenticatedAttributes2.Add(oSigningTimeAttr);
ТекстДляПодписи = СокрЛП(ТекстДляПодписи);
oSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");
// Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = СокрЛП(ТекстДляПодписи);
EncodingType = 0;
sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE,
bDetached, EncodingType);
// Метод добавляет к сообщению усовершенствованную подпись.
Возврат sSignedMessage; // Подпись в формате Base64
КонецФункции
ПоказатьВводные:
1. Работает на файловой БД.
2. Ошибка появляется при тестировании на серверной БД.
Первый опыт работы с подписанием из 1С, может есть опытные ребята, которые сталкивались с подобной задачей.
Текст Ошибки:
Произошла исключительная ситуация (CAdESCOM.CadesSignedData.1): Недопустимый дескриптор окна.
{ВнешняяОбработка.ГИСМТ.Форма.Форма.Форма(130)}: sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE,
{ВнешняяОбработка.ГИСМТ.Форма.Форма.Форма(64)}: ДанныеДляПолученияТокена = ПодписатьТекст(ЗашифроватьBase64(УИД,"UTF-8"),СертификатДляОбмена,Истина);
{ВнешняяОбработка.ГИСМТ.Форма.Форма.Форма(35)}: ПолучитьТокенНаСервере();
по причине:
Произошла исключительная ситуация (CAdESCOM.CadesSignedData.1): Недопустимый дескриптор окна.
{ВнешняяОбработка.ГИСМТ.Форма.Форма.Форма(130)}: sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE,
{ВнешняяОбработка.ГИСМТ.Форма.Форма.Форма(64)}: ДанныеДляПолученияТокена = ПодписатьТекст(ЗашифроватьBase64(УИД,"UTF-8"),СертификатДляОбмена,Истина);
{ВнешняяОбработка.ГИСМТ.Форма.Форма.Форма(35)}: ПолучитьТокенНаСервере();
по причине:
Произошла исключительная ситуация (CAdESCOM.CadesSignedData.1): Недопустимый дескриптор окна.
По теме из базы знаний
- Маркировка обуви. Получение информации о документах и товаре в Честном знаке
- Взаимодействие с api Честный знак (Молочная продукция)
- Честный знак - Загрузка всех КИ участника. Все виды продукции. Для управляемых форм
- Обмен 1С с Честным Знаком для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3)
Это косвенно подтверждается тем, что "Работает на файловой БД" - то есть, код правильный, но при этом он исполняется от имени "обычного" пользователя.
все подписи там
Набор подписей (сертификатов) у каждого пользователя свой, в данном случае необходимо, чтобы подпись была установлена для пользователя USR1CV8 (или как он там у вас называется), от имени которого запускается служба сервера 1С.
Это косвенно подтверждается тем, что "Работает на файловой БД" - то есть, код правильный, но при этом он исполняется от имени "обычного" пользователя.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот