API Честный знак + 1С 7.7

1. d.baranov 10.11.22 15:48 Сейчас в теме
Добрый день!

Пытаюсь из 1С 7.7 отправить документ "Вывод из оборота (ОСУ)"

Получил токен.

Сформировал тело документа:

{"inn":"123456789","action":"OWN_USE","action_date":"2022-11-09","document_type":"OTHER","document_number":"12","document_date":"2022-11-09","primary_document_custom_name":"р/н","products":[{"gtin":"04610017252642","gtin_quantity":1,"product_cost":10.15}]}

для чистоты эксперимента кодирую в UTF-8 на сайте https://www.base64encode.org,

Убираю переводы строк.

Подписываю незакодированное тело запроса. (пробовал и закодированное).

Отправляю закодированное и подписанное на

URL = https://markirovka.crpt.ru/api/v3/true-api/lk/documents/create?pg=water

из 1С 7.7
    WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.Option(2,"utf-8");
    WinHttp.SetTimeouts(0, 0, 0, 0);
    WinHttp.Open("POST", Url, 0);
    WinHttp.SetRequestHeader("Content-Type", "application/json; charset=UTF-8");
    WinHttp.SetRequestHeader("Accept", "application/json;"); 
    WinHttp.SetRequestHeader("Authorization", "Bearer "+Токен);  
    WinHttp.Send(ТелоЗапроса);
    RequestTimeout = 40;
    Попытка
        Рез = WinHttp.WaitForResponse(RequestTimeout);
    Исключение
        Рез = 0;
        Ответ = ОписаниеОшибки();
    КонецПопытки;
    Ответ = "";
    Если Рез = -1 Тогда
        Статус = WinHttp.status();
        Ответ = СокрЛП(WinHttp.ResponseText());
    КонецЕсли; 
Показать


Документ в ЧЗ появляется но с ошибкой: "33: Проверка электронной подписи не пройдена.".

Что я делаю не так?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. mrisha 10.11.22 16:44 Сейчас в теме
Здравствуйте, в Личном кабинете обновлен/добавлен сертификат?
4. d.baranov 11.11.22 09:28 Сейчас в теме
(2) Не вижу как?
Он вроде бы есть. По нему заходит из браузера.
В ЛК его вижу. Но ни кнопки обновить или заменить не наблюдаю.
5. mrisha 11.11.22 09:51 Сейчас в теме
(4)У меня была похожая ошибка, но при установке эдо в 1с. ЭЦП не проходила проверку. Помогла переустановка КриптоПро, делала через сервис сбис. Возможно, у вас такая же беда.
3. CheBurator 3119 10.11.22 19:44 Сейчас в теме
Возможно имеет смысл взять готовое решение
https://infostart.ru/public/603118/
6. Иваныч 23 11.11.22 18:18 Сейчас в теме
7. d.baranov 16.11.22 13:48 Сейчас в теме
(3) Мне только один тип документа надо передавать.
Хотелось бы самому разобраться.
8. d.baranov 17.11.22 17:06 Сейчас в теме
(7)В общем победил я ее.
Кроме открепленной подписи.

		CADESCOM_BASE64_TO_BINARY = 1; // Входные данные пришли в Base64
		CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи
		CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0; // Атрибут штампа времени подписи		
		СтрКода="function SignFile(FileName,Cert,OutFileName,TDate,bDetached,CADESCOM_BASE64_TO_BINARY,CADESCOM_CADES_TYPE,CADESCOM_CADES_TYPE)
		|{
		| InStream=new ActiveXObject(""ADODB.Stream"");
		| InStream.Type=1; // binary data
		| InStream.Mode=3; // read/write
		| InStream.Open();
		| InStream.LoadFromFile(FileName);
		| InData=InStream.Read(-1);
		| 
		|oSigner = new ActiveXObject(""CAdESCOM.CPSigner"");
		|oSigner.Certificate = Cert;
		|oSigningTimeAttr = new ActiveXObject(""CAdESCOM.CPAttribute"");
		|oSigningTimeAttr.Name = CADESCOM_CADES_TYPE;
		|oSigningTimeAttr.Value = TDate;
		|oSigner.AuthenticatedAttributes2.Add(oSigningTimeAttr);		
		|oSignedData = new ActiveXObject(""CAdESCOM.CadesSignedData"");
		|// Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.
//		|oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
		|oSignedData.Content = InData;
		|EncodingType = 0;		
		|OutSignedData = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);
		|
		| 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(ИмяФайла,ВыбСертификат,ИмяВыхФайла,ТекущаяДата(),bDetached,CADESCOM_BASE64_TO_BINARY,CADESCOM_CADES_TYPE,CADESCOM_CADES_TYPE);
Показать

этот код с bDetached = 0 отрабатывает для получения токена,
А с bDetached =1 не подписывает ТелоДокумента нормально.

Сделал

"c:\Program Files\Crypto Pro\CSP\csptest.exe" -sfsign -sign -detached -in C:\Temp\TeloDoc.txt -out C:\Temp\Sign_Telo.txt -my "456465456465546546546464" -base64 -add


так работает и отправляет из 7.7 нормально.
Если у кого есть мысли по этому поводу - буду рад.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот