API Честный знак + 1С 7.7
Добрый день!
Пытаюсь из 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
Документ в ЧЗ появляется но с ошибкой: "33: Проверка электронной подписи не пройдена.".
Что я делаю не так?
Пытаюсь из 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 на сайте
Убираю переводы строк.
Подписываю незакодированное тело запроса. (пробовал и закодированное).
Отправляю закодированное и подписанное на
URL =
из 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: Проверка электронной подписи не пройдена.".
Что я делаю не так?
По теме из базы знаний
- Онлайн-кассы для 1С 7.7 и Обмен 7.7 c Честный ЗНАК (ГИСМТ, ЦРПТ, ЭДО)
- Маркировка обуви, печать штрихового кода DataMatrix с помощью Ocvita Barcode, FormEx или Zint. 1С 7.7
- HTTP сервер, HTTP асинхронный клиент, клиент ГИС МТ "Честный знак" внешние компоненты для 1С 7.7
- Онлайн проверка марок Честный знак при разрешительном порядке в розничной торговле для v.8 и 7.7
- 1С 7.7. Разрешительный режим на кассах. Честный знак. Онлайн проверка с 01.04.2024. Три варианта отправки API запросов, два из них работают на старых Windows
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(7)В общем победил я ее.
Кроме открепленной подписи.
этот код с bDetached = 0 отрабатывает для получения токена,
А с bDetached =1 не подписывает ТелоДокумента нормально.
Сделал
так работает и отправляет из 7.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 нормально.
Если у кого есть мысли по этому поводу - буду рад.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот