Ошибки api честный знак

Интеграция с Честным Знаком

Я

  

1СникСоСтажем

14.05.22 — 18:23

Всем привет! Делаю интеграцию 1с с честным знаком. Задача получать входящие документы и их подписывать.

1. Ключ сессии (/api/v1/session) получаю вполне корректно, Честный знак принимает подпись

2. Входящие документы получаю корректно, но при попытке подписи документов (api/v1/incoming-documents/xml/upd/title) ошибка «Подпись не прошла проверку в crypto» (хотя при получении ключа сессии все нормально)

Ниже пример использования:

ПодписатьТекст(ЗашифроватьBase64(ФайлXML, «windows-1251»),Отпечаток,Истина);

// sThumbprint — отпечаток сертификата, используемого для подписи; строка,

// представляющая отпечаток в шестнадцатеричном виде

// пример 195934d72dcdf69149901d6632aca4562d8806d8

// ТекстДляПодписи должен быть в Base64

// bDetached — Истина/Ложь — откреплённая(для подписания документов)/прикреплённая(для получения токена авторизации) подпись

Функция ПодписатьТекст(ТекстДляПодписи, 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.propset_ContentEncoding = CADESCOM_BASE64_TO_BINARY;

    oSignedData.Content = СокрЛП(ТекстДляПодписи);

    EncodingType = 0;

    sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE,

    bDetached, EncodingType);

    // Метод добавляет к сообщению усовершенствованную подпись.

    sSignedMessage = СтрЗаменить(sSignedMessage,Символы.ПС,»»);

    sSignedMessage = СтрЗаменить(sSignedMessage,Символы.ВК,»»);

    
    Возврат sSignedMessage; // Подпись в формате Base64

    
КонецФункции

//Отпечаток — строка HEX

Функция ПолучитьСертификатПоОтпечатку(ОтпечатокСтр)

    

    Рез = Неопределено; // Найденный сертификат (Com-объект)

    CAPICOM_CURRENT_USER_STORE = 2;

    //2 — Искать сертификат в ветке «Личное» хранилища.

    CAPICOM_MY_STORE = «My»;

    // Указываем, что ветку «Личное» берем из хранилища текущего пользователя

    CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение

    oStore = Новый COMОбъект(«CAdESCOM.Store»); // Объект описывает хранилище сертификатов

    

    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,

    CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов

    // 1 вариант: поиск сертификата по отпечатку

    //CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;

    //Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, ОтпечатокСтр);

    //Рез = Certificates.Item(1);

    

    //2 вариант: обходом по коллекции и сравнение с отпечатком

    Для Каждого ТекСертификат Из oStore.Certificates Цикл

        ТекОтпечаток = ТекСертификат.Thumbprint; // возвращается отпечаток в шестнадцатеричном виде

        Если ВРЕГ(ТекОтпечаток) = ВРЕГ(ОтпечатокСтр) Тогда Рез = ТекСертификат;

            Прервать;

        КонецЕсли;

    КонецЦикла;

    oStore.Close(); // Закрыть хранилище сертификатов и освободить объект 61

    Возврат Рез;

    
КонецФункции

ТекстДляПодписи — содержание XML файла

У клиента менялся сертификат, может быть в этом причина? Хотя при «ручном» подписании ошибок нет.

Кто сталкивался? Отзовитесь плиз…..

  

NorthWind

1 — 14.05.22 — 18:29

А штамп времени там реально нужен?

  

NorthWind

2 — 14.05.22 — 18:33

у меня есть образец рабочего кода такой фигни, но там простая подпись CADES_BES, без штампа времени. Здесь используется штамп времени, но я что-то не уверен, что он применяется у Честного знака, во всяком случае, упоминаний об этом я не нашел. Он там применяется или нет?

  

1СникСоСтажем

3 — 14.05.22 — 19:04

(2) добрый день! Хороший вопрос! Кол не мой. Предлагаете штамм времени опустить? У Вас что — то аналогичное используется в реализации?

  

NorthWind

4 — 14.05.22 — 19:27

(3) а ключ сессии вы этим же методом подписываете?

  

1СникСоСтажем

5 — 14.05.22 — 20:00

(4) ну да.bDetached Ложь только.  Там в описании функции указано.

  

timurhv

6 — 14.05.22 — 20:10

Куда сейчас документацию API выкладывают? Раньше в телеге выкладывали, сейчас — фиг разберешься.

Исходный xml отправляете ведь с подписанным? Через base64Строка прогнать и отправить?

  

1СникСоСтажем

7 — 14.05.22 — 21:27

(6) у нах сайт лёг кстати. Успел вытащить описание до санкций.

Да, файл покупателя уже с подписанным файлом от продавца. Вначале в base64, а потом уже подписываем.

Плюс в тело post запроса подпись самого файла от покупателя.

Попробую без CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME. Отпишусь. Думаю,  что всем полезно знать решение

  

1СникСоСтажем

8 — 14.05.22 — 23:02

(2)

Решил отказаться от штамма времени в алгоритме при подписании документов:

Функция ПодписатьТекст(ТекстДляПодписи, 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);

    

    // при подписании документов не используем штамп времени

    Если Не bDetached Тогда

        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.propset_ContentEncoding = CADESCOM_BASE64_TO_BINARY;

    oSignedData.Content = СокрЛП(ТекстДляПодписи);

    EncodingType = 0;

    sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE,

    bDetached, EncodingType);

    // Метод добавляет к сообщению усовершенствованную подпись.

    sSignedMessage = СтрЗаменить(sSignedMessage,Символы.ПС,»»);

    sSignedMessage = СтрЗаменить(sSignedMessage,Символы.ВК,»»);

    
    Возврат sSignedMessage; // Подпись в формате Base64

    
КонецФункции

Но ничего не изменилось. А Вы говорили, что у Вас есть рабочий код для подписи? Можете поделиться? Спасибо

  

H A D G E H O G s

9 — 14.05.22 — 23:08

Каждый раз читаю это и каждый раз благодарю судьбу, что мы отказались поддерживать ЧЗ.

  

H A D G E H O G s

10 — 14.05.22 — 23:11

Создателям этой жлыги можно пожелать встретить голландскую шхуну..

  

timurhv

11 — 14.05.22 — 23:16

(9) В БСП 1 функция вызывается. Но у автора, видимо, свой велосипед

  

H A D G E H O G s

12 — 14.05.22 — 23:20

(11) Да понятно, что в БСП одна функция, но что-то иногда идет не так. И это не отменяет ебаклакизм ЧЗ, которые забили на запилить приложуху на стороне клиента или хотя бы dll.

  

1СникСоСтажем

13 — 14.05.22 — 23:58

(11)

Не всегда БСПшные функции работают корректно. Велосипед, да. Но нужно в нем разобраться.

  

1СникСоСтажем

14 — 14.05.22 — 23:58

(12)

Тут согласен полностью. Но имеем то, что имеем.

  

NorthWind

15 — 15.05.22 — 09:22

(8)

    def find_cert(self, hash_str):

        «»»

        ищет сертификат в хранилище сертификатов по его sha1-отпечатку

        «»»

        current_user_store = 2

        my_store = «my»

        store_open_read_only = 0

        capicom_certificate_find_sha1_hash = 0

        store = win32com.client.Dispatch(«CADESCOM.store»)

        store.Open(current_user_store, my_store, store_open_read_only)

        certs = store.Certificates.Find(capicom_certificate_find_sha1_hash, hash_str)

        if certs.Count > 0:

            self.cert = certs.Item(1)

    # —————————————————————————————————————

    def sign(self, filename: str, prefix: str):

        «»»

        подписывает файл с переданным именем

        «»»

        cades_bes = 1

        capicom_encode_base64 = 0

        capicom_certificate_include_end_entity_only = 2

        sign_filename = self.get_bin_filename(filename, prefix)

        signer = win32com.client.Dispatch(«CADESCOM.CpSigner»)

        signer.Certificate = self.cert

        signer.Options = capicom_certificate_include_end_entity_only

        signed_data = win32com.client.Dispatch(«CADESCOM.CadesSignedData»)

        f_in = open(filename, ‘rb’)

        signed_data.Content = f_in.read()

        out_data = signed_data.SignCades(signer, cades_bes, True, capicom_encode_base64)

        f_out = open(sign_filename, ‘wt’)

        f_out.write(out_data)

        f_in.close()

        f_out.close()

  

1СникСоСтажем

16 — 15.05.22 — 10:40

(15)

Доброе утро! Что это за язык программирования? Думал пример на 1с :)

1. Поиск сертификата по sha-1 обязательно искать? У меня просто идёт поиск по коллекции сертификатов.

2.

А self, win32com и prefix что означают?

  

NorthWind

17 — 15.05.22 — 11:08

(16) это python.

Поиск сертификата есть и у вас, реализован практически точно так же как и в моем случае.

win32com.client это механизм для работы с COM-объектами на python, то же самое что Новый COMОбъект () в 1С.

prefix это строчка, которая добавляется слева к имени файла подписи, для ваших целей это вряд ли нужно.

Вообще у вас вполне нормальный код, только он сильно замусорен непонятно зачем нужными опциями: сертификат ищется двумя способами, к подписи добавляются какие-то атрибуты и штамп времени… Возможно, все это нужно ЧЗ. Или нет? У меня на этот счет сомнения.

  

1СникСоСтажем

18 — 15.05.22 — 11:38

(17)

Смотрю да. Надо короче пробовать. Но мы же текстовое содержимое файлов xml файлов подписываем? Пробовал уйти от времени — результат тот же. Подумаем короче…

  

1СникСоСтажем

19 — 15.05.22 — 11:39

(17)

Сам алгоритм то рабочий,  сессию же я получаю без проблем. Проблемы с подписью документов.

  

timurhv

20 — 15.05.22 — 13:11

(19) Для токена:

ПараметрыCMS = ЭлектроннаяПодписьКлиент.ПараметрыCMS();

ПараметрыCMS.Открепленная = Ложь;

Для Национальный каталог, True Api, ГИС МТ:

ПараметрыCMS.Открепленная = Истина;

  

1СникСоСтажем

21 — 15.05.22 — 13:45

(20)

Добрый день! А  подробнее можно? Куда этот параметр CMS вставить?

  

1СникСоСтажем

22 — 15.05.22 — 18:04

Причем сверил сам отпечаток. Полностью совпадает  с тем, как тут получают. Так что проблем серфикатом быть не должно

ДанныеСертификата = Сертификат.ДанныеСертификата.Получить();

ск = Новый СертификатКриптографии(ДанныеСертификата);

Отпечаток = ПолучитьHexСтрокуИзДвоичныхДанных(ск.Отпечаток);

Ниже код, как я заполняю справочников сертификатов (отдельный сделал, БСПшный не стал использовать):

ОбъектСертификат.Наименование        = ВладелецСертификата;

ОбъектСертификат.ВладелецСертификата = ВладелецСертификата;

ОбъектСертификат.ДатаНачала          = ТекСертификат.ValidFromDate;

ОбъектСертификат.ДатаОкончания       = ТекСертификат.ValidToDate;

ОбъектСертификат.Контейнер           = ТекСертификат.PrivateKey.UniqueContainerName;

ОбъектСертификат.Отпечаток           = ТекСертификат.Thumbprint;

        
ОбъектСертификат.Записать();

Отказался от CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME. результат тот же…

  

1СникСоСтажем

23 — 16.05.22 — 00:40

Народ, тут до меня дошло, что нужно использовать «Новый МенеджерКриптографии» (мне же открепленная подпись нужна). Тут вопрос по параметрам? Где их взять? У кого — нибудь есть рабочий пример?

  

1СникСоСтажем

24 — 16.05.22 — 00:54

Вот код:

Функция ПодписатьТекстОтсоединеннаяПодпись(ТекстДляПодписи,Отпечаток)

    
    ФайлСПодписями = ПолучитьИмяВременногоФайла(«txt»);

    

    МенеджерКриптографии = Новый МенеджерКриптографии(«Microsoft Enhanced Cryptographic Provider v1.0″,»»,1);

    Хранилище  = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);

    Сертификат = Хранилище.НайтиПоОтпечатку(ПолучитьДвоичныеДанныеИзHexСтроки(Отпечаток));

        
    ДД_Подпись =  МенеджерКриптографии.Подписать(ТекстДляПодписи,ФайлСПодписями,Сертификат);

    
    Возврат ПолучитьСтрокуИзДвоичныхДанных(ДД_Подпись,»windows-1251″);

КонецФункции // ПодписатьТекстОтсоединеннаяПодпись()

Но получаю ошибку:

ОбщийМодуль.vvoИнтеграция.Модуль(986)}: Ошибка при вызове метода контекста (Подписать)

    ДД_Подпись =  МенеджерКриптографии.Подписать(ТекстДляПодписи,ФайлСПодписями,Сертификат);

по причине:

Ошибка операции с файлом.

по причине:

Каталог не обнаружен ‘PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIiAPg0KPNTg6esgwuXw8cw7uM9ItHB6NEzIiDC5fDx1O7w7D0iNS4wMSIgyOTU4OnrPSJPTl9OU…. Там очень длинный текст.

Как заставить его работать?

  

Тихий омут

25 — 16.05.22 — 03:37

Использую для ГИИС, но может, найдёшь что полезное.

Стр — ссылка на эл. справочника СертификатыКлючейЭлектроннойПодписиИШифрования

Код на базе БСП 3.1.5.385

КриптоСертификат=Новый СертификатКриптографии(Стр.ДанныеСертификата.Получить()); //двоичные данные сертификата

МенеджерКриптографии=Новый МенеджерКриптографии(Стр.СертификатИмяПрограммы,»»,Стр.СертификатТипПрограммы); //из того же справочника

ПараметрыXMLDSig=ЭлектроннаяПодписьСлужебныйКлиентСервер.ПараметрыXMLDSig();

МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу=»****»;

ПодписанныйПакет=ЭлектроннаяПодписьСлужебный.Подписать(ТелоПакета,ПараметрыXMLDSig,КриптоСертификат,МенеджерКриптографии);

  

NorthWind

26 — 16.05.22 — 08:24

(24) судя по строке ошибки, вы задаете само содержимое подписи в виде строки base64 в качестве имени файла, и пытаетесь такой файл сохранить.

  

1СникСоСтажем

27 — 16.05.22 — 22:42

(26)

Добрый день! Именно так и есть, хотя бы подпись получил. Ниже код, как я это делаю.

Причем ФайлXML_ДД — двоичные данные XML файла. Если отправлять содержимое XML файла — то будет ошибка, описанная выше.

То есть вначале подпись, а потом уже ее в Base64/ На что еще обратить внимание? Подписываю файл продавца и титул покупателя одинаково

ПодписатьТекстОтсоединеннаяПодпись(ФайлXML_ДД,Отпечаток)

Функция ПодписатьТекстОтсоединеннаяПодпись(Файл_ДД,Отпечаток)

    

    МенеджерКриптографии = Новый МенеджерКриптографии(«Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider»,»»,80);

    Хранилище            = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);

    Сертификат           = Хранилище.НайтиПоОтпечатку(ПолучитьДвоичныеДанныеИзHexСтроки(Отпечаток));

        
    ДД_Подпись = МенеджерКриптографии.Подписать(Файл_ДД,Сертификат);

        
    Результат = Base64Строка(ДД_Подпись);

    

    Если Лев(Результат, 4) = «77u/» Тогда

        Результат = Сред(Результат, 5);

    КонецЕсли;

    

    Результат = СтрЗаменить(Результат, Символы.ПС, «»);

    Результат = СтрЗаменить(Результат, Символы.ВК, «»);

    Возврат Результат;

КонецФункции // ПодписатьТекстОтсоединеннаяПодпись()

Ошибки маркировки товаров в «Честном ЗНАКе»

Ошибки маркировки товаров в «Честном ЗНАКе»


Максим Демеш


10 июля 2022


1063

Пользователи, работающие в «Честном ЗНАКе», могут сталкиваться с ошибками маркировки. Чтобы их устранить, нужно выяснить причины ― почему возник сбой. Рассмотрим самые распространенные ошибки и способы их исправления.

Оглавление

  • УКЭП не найдена или не настроено ПО для работы в системе
  • Недостаточное описание товара в документе «Ввод в оборот»
  • Не приходит подтверждение (накладная находится в статусе ожидания)
  • КиЗ принадлежит другому участнику
  • Действие было отменено пользователем
  • Внутренняя ошибка сервера
  • Недопустимый статус кода маркировки
  • Недопустимый переход в товаропроводящей цепочке
  • Набор ключей не существует
  • Ошибка исполнения функции
  • Указан неверный алгоритм
  • Ошибка 5090 при выбытии товара через РВ
  • Ошибка неверного запроса
  • Сервер недоступен
  • Ошибки при обработке документов «Честным ЗНАКом»
  • Ошибки кодов маркировки при приемке товаров
  • Ошибки при работе с ЭДО
  • Вопрос-ответ

УКЭП не найдена или не настроено ПО для работы в системе

Для регистрации и дальнейшей работы в системе мониторинга участники оборота маркированных товаров должны получить усиленную квалифицированную электронную подпись и настроить ПО. Если «Честный ЗНАК» их не определяет, то выдает ошибку. Причины сбоя и способы его устранения:>

  • USB-носитель с ключами и сертификатом электронной подписи не установлен в порт ПК. Если флеш-накопитель отсутствует, система не определяет КЭП. Соответственно, выдает ошибку. Обратите внимание, что подпись может храниться на жестком диске ПК (то есть, уже стоять на компьютере).
  • СКЗИ не установлена. Чтобы войти в личный кабинет системы маркировки, должна стоять программа для криптографии (VipNet либо КриптоПро). Она позволяет работать с электронной подписью. Даже если флешка с КЭП установлена в порт USB, но программа СКЗИ отсутствует, «Честный ЗНАК» выдает ошибку. Скачайте и установите программу криптографии.
  • Плагин и расширение для браузера не установлены. Это одно из требований для успешного входа в систему маркировки. Если выскакивает сообщение с ошибкой «Плагин недоступен», нужно его поставить. Подойдет Рутокен Плагин либо КриптоПро ЭЦП Browser plug-in. Дополнительно в браузере следует установить расширение «Адаптер Рутокен Плагин» и «CryptoPro Extension for CAdES Browser Plug-in».
  • Сертификаты не установлены. Для успешной работы в системе мониторинга нужно установить корневые и личные сертификаты в криптографическую программу.

УКЭП не найдена или не настроено ПО для работы в системе

Остановимся подробнее на процессе установки сертификатов. Сначала про личный. Ход действий зависит от используемого СКЗИ:

  • VipNet. Переходим в программу и находим свою КЭП в списке. Отправляемся в раздел «Свойства» и в контейнере ключей нажимаем на кнопку «Открыть». Устанавливаем сертификат. Не забываем, что нужно указать, для какого пользователя, и выбрать хранилище «Личный».
  • КриптоПро CSP. Переходим на вкладку «Сервис» и нажимаем «Установить личный сертификат» → «Обзор». Указываем расположение файлов на ПК и создаем связку с контейнером закрытого ключа. Выбираем требуемый файл личного сертификата и подтверждаем действие кнопкой «ОК».

Для установки корневых сертификатов нужен соответствующий файл, который можно скачать на сайте УЦ, выдавшего подпись. Также он находится на официальном портале ведомства. Скачайте и откройте файл. Кликните по кнопке «Установить сертификат», следуйте указанием мастера установки. Обязательно укажите хранилище «Промежуточные центры сертификации».

Недостаточное описание товара в документе «Ввод в оборот»

В данном случае «Честный ЗНАК» выдает ошибку с кодом 41. Проблема возникает в случае, когда пользователь пытается ввести в оборот товар, карточка которого не опубликована и находится в статусе «Черновик». Операцию можно выполнить после публикации карточки.

Карточка с описанием товара, созданная в 2019 году, может не позволять вводить продукцию в оборот. Это связано с изменениями в законодательстве: требований для публикации. Чтобы исправить ситуацию, достаточно указать недостающие данные и отправить карточку на модерацию.

Не приходит подтверждение (накладная находится в статусе ожидания)

Прежде всего, отметим, что проблема возникает преимущественно со стороны поставщика, то есть получатель не всегда может ее решишь. Зачастую ошибка появляется при сотрудничестве с крупными поставщиками ― время обработки их документов часто увеличено (из-за большого объема данных). У мелких контрагентов причина сбоев заключается в том, что они подтверждают информацию вручную (в данном случае играет роль человеческий фактор).

Что делаем? Звоним контрагенту и рассказываем о проблеме. Он может попробовать отправить данные повторно (нажать на кнопку для отправки сведений в ЧЗ, а потом кликнуть «Отправить отказ»). После подтверждения отказа повторно отправить документы в систему маркировки.

В результате: происходит отмена предыдущей операции (при которой не дошло подтверждение) и выполняется повторная. Если ничего не помогает, нужно обратиться в техподдержку операторам «Честного ЗНАКа».

КиЗ принадлежит другому участнику

Система маркировки товаров выдает ошибку 22, если контрагент по ошибке отправил данные другой организации. Либо же поставщик неправильно указал код места деятельности. Такая проблема возникает во время приемки товара, когда получатель считывает КиЗ на упаковках.

Выход из ситуации: обращаемся к поставщику. Просим, чтобы он проверил информацию. Вероятно, понадобится отправить ему квитанцию. После устранения ошибки нужно повторно выполнить операцию.

Действие было отменено пользователем

Ошибка с кодом 0x8010006E указывает на отмену действия во время входа в систему. Например, пользователь нажал на кнопку «нет» в окне предупреждения о безопасности либо в момент ввода пароля. То есть, действие не было подтверждено (и по факту отменено). Чтобы избавиться от ошибки, попробуйте выполнить операцию заново, подтверждая действия на всех ее этапах.

Внутренняя ошибка сервера

Ошибка 500 «Честного ЗНАКа» ― распространенная проблема, которая не связана с действиями пользователя. Обычно она возникает при авторизации в системе. Причина ее появления ― технические сбои на сервере. Такое часто случается, когда на него оказывается большая нагрузка. Способы решения:

  • очистить кэш страниц в браузере, который используется для входа в систему мониторинга;
  • попробовать зайти в «Честный ЗНАК» с другого браузера.

Если ни один из способов не помог решить проблему, нужно написать в техподдержку. Вполне возможно, сбой устранят без участия пользователя.

Обращение в техническую поддержку не нужно игнорировать. Если придется разбираться с контролирующими органами, будет на что ссылаться: есть подтверждение, что ошибка в работе произошла не по вине участника оборота маркированных товаров.

Иногда ошибка 500 указывает на неправильные действия пользователя. Например, если при заполнении профиля на первом этапе он не нажал на кнопку «проверить» после фактического адреса регистрации. В таком случае проблему можно устранить самостоятельно путем исправления данных.

Недопустимый статус кода маркировки

«Честный ЗНАК» выдает ошибку 14 при вводе остатков или регистрации любого другого документа. Расшифровывается, как недопустимый статус маркировочного кода. Причины ее появления:

  • средство идентификации товара или транспортной упаковки пребывает в одном из статусов: «Перемаркирован», «Ожидает подтверждения приемки», «Ожидает передачу собственнику», «Ожидает перемаркировку»;
  • статус маркировочного кода товара, выпущенного зарубежным производителем, отличается от «Эмитирован. Получен»;
  • агрегат вышестоящего уровня для маркировочного кода пребывает в статусе «Расформирована».

Сделайте следующее:

  • проверьте статус отчета о нанесении, если указано, что он обработан с ошибками, проблема в нем;
  • убедитесь, что денег на счету достаточно для регистрации документа (в зависимости от количества заказанных кодов, из расчета, что он стоит 50 копеек без НДС), если средств не хватает, пополните баланс;
  • проверьте статус маркировочных кодов (в отчет попадают только отсканированные марки, имеющие статус «Верифицирован»);
  • если код в статусе «Эмитирован. Получен», это означает, что он пока не нанесен.

Нужно скопировать отчет о нанесении и отправить повторно на регистрацию.

Недопустимый переход в товаропроводящей цепочке

Ошибка 11 маркировки означает, что товар, подготовленный для отгрузки, находится в неподходящем статусе. Например, не принят, поэтому не числится на балансе торгового предприятия, или выведен из оборота. В любом из этих случаев оформить отгрузку невозможно ― документально товар отсутствует и не принадлежит пользователю.

Проверьте статус продукции. Выполните операцию, чтобы товар перешел на баланс предприятия: перемаркировать и ввести в оборот (если выведен из него) или подтвердить приемку (если не принят).

Набор ключей не существует

Ошибка с кодом 0x80090016 возникает при попытке входа в «Честный ЗНАК». Вероятная причина ― система ПК определяет сайт ЦРПТ ЧЗ как опасный объект, представляющий угрозу для компьютера.

Пути решения:

  • добавьте в браузере сайт ЧЗ в надежные узлы;
  • деактивируйте антивирус;
  • отключите блокировку рекламы.

Если ничего не помогло и ошибка сохранилась, переустановите плагин и сертификаты КЭП.

Ошибка исполнения функции

Ошибка с кодом 0x8007065B появляется тогда, когда отсутствует лицензия на ПО КриптоПро СSP. Для проверки ее статуса зайдите в программу. Перейдите во вкладку «Общие» и на строке «Срок действия» посмотрите текущий статус лицензии. Например, если «Истекла», срок закончился и нужно его продлевать. Приобрести новую лицензию можно у разработчика, а затем активировать ее.

Если с лицензией все в порядке, а система выдает ошибку, попробуйте переустановить плагин и сертификаты КЭП.

Указан неверный алгоритм

Если используется устаревшая версия КриптоПро CSP, при попытке входа в систему появляется ошибка с кодом 0х80090008. Для ее устранения проверьте, программа какой версии используется. При необходимости обновите ее до последней.

Если версия криптопровайдера актуальна, попробуйте переустановить плагин. Если и это не помогает, переустановите сертификаты подписи.

Ошибка 5090 при выбытии товара через РВ

При выводе лекарственного препарата из оборота через регистратор выбытия «Честный ЗНАК» иногда отправляет ошибку 5090. При ее появлении нужно проверить статус синхронизации устройства со спутниками ГЛОНАСС. Следует перейти из главного меню в раздел «Информация» и посмотреть, какое значение стоит в пункте «До блок-ки». Если «Блокировка», потребуется повторно связаться со спутником навигации и выполнить операцию заново.

Ошибка неверного запроса

Ошибка 400 «Честного ЗНАКа» указывает на то, что сервер не может корректно распознать и обработать запрос. Такое возникает, когда тот искажен, неправильно введен или поврежден. Или же (что наиболее вероятно) пользователь указал в поисковой строке несуществующий адрес сайта. Как результат, он не может попасть в личный кабинет.

Способы решения:

  • обновите страницу, нажав F5;
  • проверьте, правильно ли указан URL-адрес;
  • попробуйте войти на сайт, вбив первые буквы названия в поисковую строку (система сама направит в нужном направлении);

  • очистите кэш и cookie используемого браузера.

Как правило, пользователю удается устранить проблему самостоятельно.

Сервер недоступен

Ошибка 503 свидетельствует о временной недоступности сервиса, в том числе системы маркировки. Наиболее распространенная причина ― перегруженность внешними запросами. В данном случае не остается ничего другого, как просто подождать. Ускорить решение проблемы можно путем обновления страницы.

Ошибки при обработке документов Честным ЗНАКом

УПД подписывают оба контрагента — продавец и покупатель продукции. Данные проходят обработку в системе маркировки, после чего документ получает определенный статус. В зависимости от результатов проверки:

  • «Обработан успешно» ― выполнен переход прав собственника на маркированные товары;
  • «Обработан с ошибками» ― товар не перешел к другому владельцу.

Чтобы просмотреть статус документа, сделайте следующее:

  • 1. Авторизоваться в личном кабинете ГИС МТ.
  • 2. Выбрать группу товаров, с которой работаете.
  • 3. В разделе с документами представлен список файлов и отражены статусы. Если какой-то обработан с ошибкой, можно войти в него и посмотреть: «Сформировать список ошибок».

Файл можно скачать и открыть в текстовом редакторе (например, Блокноте). Это позволит прочитать описания ошибок «Честного ЗНАКа».

Ошибки кодов маркировки при приемке товаров

Рассмотрим несколько основных ошибок, с которыми сталкиваются пользователи во время приемки товаров. Речь пойдет о проблемах в кодами маркировки. Представим данные в виде таблицы.

Ошибки

Причины

Решение

Штрихкод не считывается сканером

Сканер не настроен

Настроить сканер штрихкодов для работы с маркировкой

Код не соответствует формату маркировки

В документе содержится некорректный код маркировки

Не подтверждать приемку. Отклонить ее и запросить накладную с верными данными 

Операция с кодом не выполняется

Товар, который маркирован с помощью этого штрихкода, уже продан либо вообще не введен в оборот

Аннулировать поступление и запросить корректные документы

Штрих-код числится на товарных остатках в организации

Товар с кодом не принадлежит поставщику

Связаться с поставщиком, чтобы он подтвердил документ. Получить новую накладную

Ошибки при работе с ЭДО

Ошибки

Причины

Решение

Документ не отображается в системе

Документ находится на этапе обработки

Дождаться завершения обработки

Документ некорректный

Проверить статус документа. Должен быть «отправлено в ГИС МТ»

Пользователь не зарегистрирован в системе маркировки

Аннулировать операцию. Зарегистрироваться в «Честном ЗНАКе» и выполнить ее повторно

Документ уже зарегистрирован>

В прошлом документ уже регистрировали в системе

Откорректировать данные (исправить дату, номер документа)

Вопрос-ответ

Loader image

Чтобы устранить ошибку настройки обмена с СУЗ в 1С:Розница, нужно изменить адрес отправки запроса. Его можно скопировать, перейдя в станцию управления заказами из личного кабинета «Честного ЗНАКа». 

Проблема, скорее всего, заключается в сканере штрихкодов. Нужно проверить его работоспособность: отсканировать другой двумерный код (например, QR) и посмотреть, что отобразится на экране. Или считать этот же код Data Matrix, но другим сканером.


Макс Демеш

Эксперт

Директор по развитию компании «Мультикас». Более 7 лет опыта в области внедрения онлайн-касс, учетных систем ЕГАИС и Маркировки товаров для розничных организаций и заведений питания.

Максим Демеш

md@kassaofd.ru

Нужна помощь с устранением ошибок маркировки?

Не теряйте время, мы окажем бесплатную консультацию и поможем исправить ошибки в системе Честный Знак в кратчайшие сроки.

Подготовьтесь к маркировке с Мультикас

Мы поможем подготовиться к маркировке, у нас есть все, что нужно!

Понравилась статья? Поделись ею в соцсетях.

Также читают:

Маркировка товаров в 2022 году: какие товары подлежат обязательной маркировке

Маркировка товаров в 2022 году в системе Честный Знак продолжается. Список дополнен новыми позициями. К товарам, подлежащим обязательной маркировке, присоединяются велосипеды, бутилированная вода, антисептики и прочая продукция. В данной статье…


433
Узнать больше

Маркировка товаров: проверки и штрафы

За отсутствие маркировки товаров предусмотрены штрафы. Их размеры определяются ст. 15.12 КоАП РФ. На сегодняшний день без средств идентификации не продаются табак, обувь, лекарственные препараты и другие товары. С первого…


704
Узнать больше

Правила перемаркировки продукции в системе «Честный ЗНАК»

Рассмотрим правила перемаркировки продукции в системе «Честный ЗНАК». Может возникнуть ряд ситуаций, когда эти правила требуют изучения. Например, покупатель вернул товар без этикетки с кодом Data Matrix. Ее отсутствие не…


911
Узнать больше

Все о маркировке товаров Честный Знак

Маркировка товаров Честный Знак продолжает внедряться в 2020 году. Введение новой системы контроля началось еще в 2019 году. К 2024 планируется повсеместно внедрить маркировку на все группы товаров. В 2020…


493
Узнать больше

Здравствуйте!
Кто-нибудь, в теме, что сейчас происходит с API «Честного знака» — ?
Как я понял, их прошло «миллион» версий, одна другой круче…

Короче, вопрос — закрывается магазинчик, и хочется обнулить остатки марок(ТАБАЧКА!) в ЧЗ в «0»…
Когда только появилась маркировка, я успешно разобрался с имеющимся на тот момент API в части получения доступа(генерация токена), и запросом на «дезагрегацию» упаковок(блоков, так, как поставщики в мелкие розничные магазины отгружают именно блоками, и их ШК указывают в УПД) сигарет, длв использования их GTIN пачек в учетной системе в качестве ЕАН пачек для продажи через кассы.
На тот момент, этого мне вполне хватало, и все это функционирует в нескольких торговых точках по сей день.

Но, вчера сунулся дописать запрос остатков марок в ЧЗ — и «сел в лужу»…
Запросы остатков марок по тому API, через который делал получение токена и дезагрегацию, оказывается не работают — что-бы не отправлял, везде 404… Хотя, эти функции продолжают работать.

Кто-то делал нечто подобное сейчас? Какие там «правильные» параметры запроса, URL, и т.п. — ?
Если у кого-то есть пример рабочего на текущий момент запроса — поделитесь плиз, буду безмерно признателен…

PS В принципе, мне для моей задачи, достаточно получить список марок со статусом «в обороте», далее их можно сохранить в Эксель, и в ЛК скормить документу списание. Делать это по API, я не собираюсь, задача разовая, «игра не стоит свеч». Но, получить этот список без API — не реально, их довольно много, в ручную, на несколько дней работа… А в ЛК я не нашел способа выгрузить их в файл.

Сообщение по документу Отгрузка товаров ИС МП 0000-000106 от 01.06.2023 15:33:57 не принято ИС МП:
Текст ошибки: При выполнении запроса api/v3/true-api/lk/documents/create?pg=tires возникла ошибка.
Код состояния HTTP: 422.
Текст ошибки: {

  «error_message»: «54: Создание документа »Отгрузка с выводом« недоступно для товарной группы »Шины и покрышки пневматические резиновые новые«.»}.

Что не так? Марки в обороте, почему не выводятся. 30.05.23 обновили 1С,  01.06.23 не выводятся марки из оборота через отгрузку товаров ИС МП Продажа для собственных нужд покупателя.

   Mafiozaa

15.02.21 — 05:24

Приветствую, получаю от Честного знака токен методом GET {«uuid»:»d12b8e68-a2f8-48a2-sdcb-a3b632cbb270″,»data»:»JLZTXJTMFXCXUUAFYQKHZOIQSAUXKC»}

    Соеденение = СоздатьОбъект(«WinHttp.WinHttpRequest.5.1»);

    Соеденение.Option(2,»utf-8″);

    Соеденение.SetTimeouts(0,0,0,0);

    URL = «https://ismp.crpt.ru/api/v3/auth/cert/key»;;

    Соеденение.Open(«GET», URL, 0);

    Соеденение.SetRequestHeader(«Content-Type», «application/json»);

    Соеденение.SetRequestHeader(«Accept-Charset», «utf-8»);

    Соеденение.Send();

(Вот так получаю)

Мне для дальнейших действий я так понял, нужно его подписать и отправить методом POST

        Соеденение = СоздатьОбъект(«WinHttp.WinHttpRequest.5.1»);

    Соеденение.Option(2,»utf-8″);

    Соеденение.SetTimeouts(0,0,0,0);

    URL = «https://ismp.crpt.ru/api/v3/auth/cert»;;

    Соеденение.Open(«POST», URL, 0);

    Соеденение.SetRequestHeader(«Content-Type», «application/json»);

    Соеденение.SetRequestHeader(«Accept-Charset», «utf-8»);

        Соеденение.Send();

    RequestTimeout = 40;

(Вот так отправляю, ошибка <UnauthorizedException><error>unauthorized</error><error_description>Full authentication is required to access this resource</error_description></UnauthorizedException>)

Я полагаю что я не авторизовался

   Mafiozaa

1 — 15.02.21 — 05:26

Я не совсем понял, но мне нужно полученные uuid и data отправить обратно подписаными?

   ДенисЧ

2 — 15.02.21 — 05:32

А где у тебя в отправке вообще токен?

   Mafiozaa

3 — 15.02.21 — 05:36

(2) Вот, собственно куда мне его толкнуть?

   big

4 — 15.02.21 — 06:16

ДанныеЗапроса = Подписанные вашим ЭЦП данные;

ТекстЗапроса = «{«»uuid»»:»»»+СокрЛП(СессияUuid)+»»»,»»data»»:»»» + ДанныеЗапроса + «»»}»;

Соеденение.Send(ТекстЗапроса);

Примерно так. Но я давно с этим разбирался, вроде работало.

   big

5 — 15.02.21 — 06:17

(4) СессияUuid — это из запроса key полученной пары uuid/data

   lenkavovka

6 — 15.02.21 — 06:33

Приведу вымученный код для восьмёрки, чтобы было понимание, как разговаривать с ЧЗ. Предполагается, что сертификат ЭЦП, которым подписываем запросы, установлен на сервере и прописан в 1С, плюс прописан в настройках обмена с ИС МП:

&НаСервере

Функция ПолучитьТокен(Организация) Экспорт

    
    СертификатДляОбмена = ПолучитьСертификатОрганизацииИзНастроек(Организация);

    
    Если НЕ СертификатДляОбмена.Отпечаток = Неопределено Тогда

        
        Сертификат = НайтиСертификатПоОтпечаткуСтр(СертификатДляОбмена.Отпечаток);

        
        // Получение данных для получения токена

        HTTPСоединение =    Новый HTTPСоединение(ДанныеПодключенияЧестныйЗнак().АдресСервера, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);

        HTTPЗапрос = новый HTTPЗапрос(«/api/v3/auth/cert/key»);

        HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод(«GET», HTTPЗапрос);

        ОтветСтрока = HTTPОтвет.ПолучитьТелоКакСтроку(«UTF-8»);

        ЧтениеJSON = Новый ЧтениеJSON;

        ЧтениеJSON.УстановитьСтроку(ОтветСтрока);

        ДанныеJSON = ПрочитатьJSON(ЧтениеJSON);

        ЧтениеJSON.Закрыть();

        УИД = ДанныеJSON.uuid;

        ДанныеДляПолученияТокена = ДанныеJSON.data;

        
        // Подписание данных для получения токена

        ДанныеДляПолученияТокена = ПодписатьТекст(ЗашифроватьBase64(ДанныеДляПолученияТокена, КодировкаТекста.UTF8), Сертификат, Ложь);

        
        // Получение токена с использованием подписанных данных

        Соединение = Новый HTTPСоединение(ДанныеПодключенияЧестныйЗнак().АдресСервера, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL);

        Заголовки = Новый Соответствие;

        Заголовки.Вставить(«Content-Type», «application/json; charset=UTF-8»);

        Заголовки.Вставить(«Accept», «application/json»);

        HTTPЗапрос = Новый HTTPЗапрос(«/api/v3/auth/cert/»,Заголовки);

        ЗаписьJOIN = Новый ЗаписьJSON;

        ЗаписьJOIN.УстановитьСтроку();

        ДанныеДляЗапроса = Новый Структура;

        ДанныеДляЗапроса.Вставить(«uuid»,УИД);

        ДанныеДляЗапроса.Вставить(«data»,ДанныеДляПолученияТокена);    

        ЗаписатьJSON(ЗаписьJOIN,ДанныеДляЗапроса);

        СтрокаДляЗапроса = ЗаписьJOIN.Закрыть();

        
        HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаДляЗапроса,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

        Ответ = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

        Если Ответ.КодСостояния = 200 Тогда

            
            ЧтениеJSON = Новый ЧтениеJSON;

            ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

            
            Токен = ПрочитатьJSON(ЧтениеJSON, Ложь).token;

            
            Возврат Новый Структура(«Токен, ТекстОшибки», Токен, «»);

            
        Иначе

            
            Возврат Новый Структура(«Токен, ТекстОшибки», Неопределено, «Ошибка получения токена. Код ответа: » + Ответ.КодСостояния + «.»);    

        
        КонецЕсли;

        
    Иначе

        
        Возврат Новый Структура(«Токен, ТекстОшибки», Неопределено, СертификатДляОбмена.ТекстОшибки);

        
    КонецЕсли;

    
КонецФункции

&НаСервере

Функция ПолучитьСертификатОрганизацииИзНастроек(Организация) Экспорт

    
    ХранилищеЗначения = Константы.НастройкиОбменаГосИС.Получить();

    СохраненныеНастройки = ХранилищеЗначения.Получить();

    
    НайденнаяСтрока = СохраненныеНастройки.Найти(Организация, «Организация»);

    
    Если НайденнаяСтрока = Неопределено Тогда

        
        Отпечаток = Неопределено;

        ТекстОшибки = «Сертифкат для » + Организация + » не найден в настройках сертификатов для автоматического обмена с ИС МП»;

                
    Иначе

        
        Отпечаток = НайденнаяСтрока.Сертификат.Отпечаток;

        ТекстОшибки = «»;

        
    КонецЕсли;

    
    Возврат Новый Структура(«Отпечаток, ТекстОшибки», Отпечаток, ТекстОшибки);

    
    
КонецФункции

&НаСервере

Функция НайтиСертификатПоОтпечаткуСтр(ОтпечатокСтр) Экспорт

    //Поиск доступных сертификатов

    CAPICOM_CURRENT_USER_STORE = 2;

    //2 — Искать сертификат в ветке «Личное» хранилища.

    CAPICOM_MY_STORE = «My»;

    // Указываем, что ветку «Личное» берем из хранилища текущего пользователя

    CAPICOM_STORE_OPEN_READ_ONLY = 0; // Открыть хранилище только на чтение

    oStore = Новый COMОбъект(«CAdESCOM.Store»); // Объект описывает хранилище сертификатов

    
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,

    CAPICOM_STORE_OPEN_READ_ONLY); // Открыть хранилище сертификатов

    CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;

    Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, СтрЗаменить(Строка(Base64Значение(ОтпечатокСтр)), » «, «»));

    Возврат Certificates.Item(1);

КонецФункции

&НаСервере

// ТекстДляПодписи должен быть в Base64

// bDetached — Истина/Ложь — откреплённая(для подписания документов)/прикреплённая(для получения токена авторизации) подпись

Функция ПодписатьТекст(ТекстДляПодписи, Certificate, bDetached) Экспорт

    CADESCOM_BASE64_TO_BINARY = 1; // Входные данные пришли в Base64

    CADESCOM_CADES_TYPE = 1; // Тип усовершенствованной подписи

    CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0; // Атрибут штампа времени подписи

    oSigner = Новый COMОбъект(«CAdESCOM.CPSigner»);

    // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.

    oSigner.Certificate = Certificate;

    oSigner.KeyPin = «123»; //пароль, с которым сертификат установлен на сервер. если пароля нет — комментируем строку

    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

КонецФункции

&НаСервере

Функция ЗашифроватьBase64(Строка, Кодировка) Экспорт

    ИмяВременногоФайла = ПолучитьИмяВременногоФайла();

    ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, Кодировка);

    ЗаписьТекста.Записать(Строка);

    ЗаписьТекста.Закрыть();

    Двоичные = Новый ДвоичныеДанные(ИмяВременногоФайла);

    Результат = Base64Строка(Двоичные);

    Если Лев(Результат, 4) = «77u/» Тогда

        Результат = Сред(Результат, 5);

    КонецЕсли;

    Результат = СтрЗаменить(Результат, Символы.ПС, «»);

    УдалитьФайлы(ИмяВременногоФайла);

    Возврат Результат;

КонецФункции

   Mafiozaa

7 — 15.02.21 — 06:36

(6) Ну да, в 8ки я его загружаю в базу, а в 7ке надо ручками его цеплять, я так понял)

   lenkavovka

8 — 15.02.21 — 06:43

(7) здесь ключевая идея — сначала получаем от ЧЗ некий uuid, потом включаем его в запрос токена, запрос подписываем своим сертификатом, запрашиваем токен. Посмотри внимательно на функцию ПодписатьТекст() во втором слайдере.

   Mafiozaa

9 — 15.02.21 — 06:45

(8) Без руководства не разберусь, полез искать, спасибо)

   big

10 — 15.02.21 — 06:55

(9) Получается ты вообще не в теме что-ли??

Воюшмать! (с)

   big

11 — 15.02.21 — 06:57

(10) Теперь понятно, что ответ на (2) был для него и не ответ в принципе ))))

   Mafiozaa

12 — 15.02.21 — 06:59

(11) Ответ то ответ, я знаю что мне нужно полученное подписать и отправить далее, отправить отправлю, подписать нужно, буду искать вк на крипто

   big

13 — 15.02.21 — 07:19

(12) В (6) уже всё есть, для подписывания в 7.7 не нужна ВК, хватает доступа к уже имеющимся объектам. В (3) вопрос был — куда токен воткнуть, вот и я показал )))

   Mafiozaa

14 — 15.02.21 — 07:30

(13) Прогнал, увидел вот это, я так полагаю это объекты моих сертификатов

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

OLE.ICertificate2

   big

15 — 15.02.21 — 07:41

Функция ПолучитьСписокСертификатов()

    РезСписок    = СоздатьОбъект(«СписокЗначений»);

    comStore        = СоздатьОбъект(«CAdESCOM.Store»);

    comStore.Open(

        2,        // StoreLocation — CAPICOM_CURRENT_USER_STORE.

        «MY»,    // StoreName

        );        // OpenMode — CAPICOM_STORE_OPEN_READ_ONLY.

    comCertificates = comStore.Certificates;

    comStore.Close();

    comStore = «»;

    КоличествоСертификатов = comCertificates.Count;

    
    ТекДата    = ТекущаяДата();

    
    фл = 0;

    Для a=1 По КоличествоСертификатов Цикл

        Объект    = comCertificates.Item(a);

        
        Субъект        = Объект.SubjectName;

        ДатаНачало    = Объект.ValidFromDate;

        ДатаКонец    = Объект.ValidToDate;

        
        Если ДатаКонец < ТекДата Тогда

            Продолжить;

        КонецЕсли;

        Список    = РазложитьСубъекта(Субъект);

        ИНН        = Список.Получить(«ИНН»);

        Если ПустаяСтрока(ИНН) = 1 Тогда

            Продолжить;

        КонецЕсли;

        
        СерийныйНомер    = Объект.SerialNumber;

        Отпечаток        = Объект.Thumbprint;

        Наименование    = Список.Получить(«CN»);

        РезСписок.ДобавитьЗначение(Отпечаток,Наименование+»: «+ДатаКонец);

    КонецЦикла;

    Возврат РезСписок;

КонецФункции

   Mafiozaa

16 — 15.02.21 — 07:52

(15) С CADESCOM почему то не идет, а CAPICOM показывает то же самое)

   big

17 — 15.02.21 — 07:53

(16) КриптоПро ессно должен быть установлен.

   Mafiozaa

18 — 15.02.21 — 07:53

(17) Все есть, все работает)

   Mafiozaa

19 — 15.02.21 — 07:54

(17) С CADESCOM ругается на метод Open, якобы Поле агрегатного не обнаружено

   big

20 — 15.02.21 — 07:54

(19) Хмм.. оччень странно.

   big

21 — 15.02.21 — 07:59

(20) Прикол, но у меня тоже перестало работать (((

   Mafiozaa

22 — 15.02.21 — 07:59

(20) CADESCOM = comStore.Open(

{C:USERSDMITRIYDESKTOPSQL-БАЗАEXTFORMSHTTP_ЗАПРОС.ERT(69)}: Поле агрегатного объекта не обнаружено (Open)

CAPICOM = в цикле пробегаюсь получаю OLE.ICertificate2 я так думаю = колву моих сертификатов

   big

23 — 15.02.21 — 08:02

   big

24 — 15.02.21 — 08:20

с CAPICOM работает.

   Mafiozaa

25 — 15.02.21 — 08:52

(24) Вроде подразобрался малость, как мне выбрать сертификат которым подписывать?

   Mafiozaa

26 — 15.02.21 — 08:52

(24) Из общей кучи, выбрать нужный

   big

27 — 15.02.21 — 09:06

(25) А какой объект заработал? Cadescom или CAPICOM?

(26) Там же список, значение списка — отпечаток ключа, строка в списке — владелец + дата окончания. Выбирая из списка, получаешь отпечаток ключа, его подставляешь при подписывании.

   Mafiozaa

28 — 15.02.21 — 09:09

(24) РезСписок вижу, а просто список не вижу, такая же сз?

   Mafiozaa

29 — 15.02.21 — 09:09

(27) И что за функция разложить субьъекта?

   big

30 — 15.02.21 — 09:23

(25) А какой объект заработал? Cadescom или CAPICOM?

(26) Там же список, значение списка — отпечаток ключа, строка в списке — владелец + дата окончания. Выбирая из списка, получаешь отпечаток ключа, его подставляешь при подписывании.

(29) Там просто из строки наименования берем названия, инн и т.п.

Функция РазложитьСубъекта(Субъект)

    Результат    = СоздатьОбъект(«СписокЗначений»);

    Результат.ДобавитьЗначение(Субъект,»субъект»);

    
    ВремСтрока    = СтрЗаменить(Субъект,»,»,РазделительСтрок);

    Для а=1 По СтрКоличествоСтрок(ВремСтрока) Цикл

        ТекСтр    = СокрЛП(СтрПолучитьСтроку(ВремСтрока,а));

        ТекСтр    = СтрЗаменить(ТекСтр,»=»,РазделительСтрок);

        Результат.ДобавитьЗначение(СокрЛП(СтрПолучитьСтроку(ТекСтр,2)),СокрЛП(СтрПолучитьСтроку(ТекСтр,1)));

    КонецЦикла;

    Возврат Результат;

КонецФункции // гл

   big

31 — 15.02.21 — 09:23

(28) Да, просто выпадающий список на форме

   Mafiozaa

32 — 15.02.21 — 09:25

(30) CAPICOM, но и то не все объекты подгружаются, щас буду смотреть

   Mafiozaa

33 — 15.02.21 — 09:29

(31) Странно, ничего не попадает в список на форме

   Mafiozaa

34 — 15.02.21 — 09:41

(31) Все попало, но нет наименования, а идет сразу D63489529FSDklsdfh23458sdklg

   big

35 — 15.02.21 — 09:49

(34) скорее всего «разложение субъекта» некорректно работает

   Mafiozaa

36 — 15.02.21 — 10:00

(35) Все, список эцп получаю корректно, мне как выбрать? обработку списка делать?

   big

37 — 15.02.21 — 10:04

(36) Да как удобнее. Я при подписи просто беру текущий:

Отпечаток    = СпсСертификатов.ПолучитьЗначение(СпсСертификатов.ТекущаяСтрока());

   Mafiozaa

38 — 15.02.21 — 10:08

(37) А если не затруднит, покажешь как ты подписываешь текст?

   Mafiozaa

39 — 15.02.21 — 10:19

(37) oSigner.Certificate = Отпечаток;

{C:USERSDMITRIYDESKTOPSQL-БАЗАEXTFORMSHTTP_ЗАПРОС.ERT(157)}: Типы не совпадают

   Санта Клаус

40 — 15.02.21 — 11:34

отмечусь, чтобы не потерять

   MWWRuza

41 — 15.02.21 — 13:01

Я выкладывал обработку, которая из блока получает список пачек, под 7.7. Там все это есть.  Ищите по слову «разагрегация»… А… Вот она кстати: http://catalog.mista.ru/public/1241751/

   DGorgoN

42 — 15.02.21 — 13:04

(41) Тем паче помоги автору раз сталкивался.

   MWWRuza

43 — 15.02.21 — 13:11

У меня там рабочий пример. Скачать, проверить, если заработает — то все нормально, можно «ковырять» и переносить в свою поделку фрагменты… Код открыт. А если не заработает — тогда нужно с КриптоПро, капикомом, сертификатами разбираться.

Будут конкретные вопросы, отвечу… Многие запустили, и работает, судя по комментариям. А уж как перенести из моей обработки в свою задачу, готовые, работающие алгоритмы, это только автору этой задачи ведомо…

   Mafiozaa

44 — 18.02.21 — 08:42

Поднимаю, ошибка та же

(37) oSigner.Certificate = Отпечаток;

{C:USERSDMITRIYDESKTOPSQL-БАЗАEXTFORMSHTTP_ЗАПРОС.ERT(157)}: Типы не совпадают

   oskarsan

45 — 06.06.21 — 07:23

(44) тут нужен сертификат а не отпечаток

Функция ПолучитьСертификатПоОтпечатку(ОтпечатокСтр)
    Рез = "";// Найденный сертификат (Com-объект)

    CAPICOM_CURRENT_USER_STORE = 2;    //2 - Искать сертификат в ветке "Личное" хранилища.

    CAPICOM_MY_STORE = "My"// Указываем, что ветку "Личное" берем из хранилища текущего пользователя

    CAPICOM_STORE_OPEN_READ_ONLY = 0;// Открыть хранилище только на чтение

    //oStore = СоздатьОбъект("CAdESCOM.Store"); // иногда не работает

    oStore = СоздатьОбъект("CAPICOM.Store");// Объект описывает хранилище сертификатов

    
    oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,CAPICOM_STORE_OPEN_READ_ONLY);// Открыть хранилище сертификатов

    // 1 вариант: поиск сертификата по отпечатку

    CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
    Certificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, ОтпечатокСтр);
    Рез = Certificates.Item(1);
    
    //2 вариант: обходом по коллекции и сравнение с отпечатком

    //Для Каждого ТекСертификат Из oStore.Certificates Цикл //цикл на 1с8

    //    ТекОтпечаток = ТекСертификат.Thumbprint; // возвращается отпечаток в шестнадцатеричном виде

    //    Если ВРЕГ(ТекОтпечаток) = ВРЕГ(ОтпечатокСтр) Тогда Рез = ТекСертификат;

    //        Прервать;

    //    КонецЕсли;

    //КонецЦикла;

    oStore.Close();// Закрыть хранилище сертификатов и освободить объект 61

    Возврат Рез;
КонецФункции

oSigner.Certificate = ПолучитьСертификатПоОтпечатку(Отпечаток);

  

Caesar

46 — 27.10.21 — 17:23

Прошу прощения за подъем достаточно давней темы.

При попытке подписания токена получаю сообщение:

sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);

{E:BASESV7КОВАЛЕВА СВЕРТКАОБМЕН_С_ЧЕСТНЫЙЗНАК.ERT(134)}: Поле агрегатного объекта не обнаружено (SignCades)

Текст функции подписания —

// bDetached — Истина/Ложь — откреплённая(для подписания документов)/прикреплённая(для получения токена авторизации) подпись

Функция ПодписатьТекст(ТекстДляПодписи, СертификатДляПодписи, bDetached)    

    //ТекстДляПодписи — токен в формате Base64

    //СертификатДляПодписи — сертификат, полученный по отпечатку

    
    CADESCOM_BASE64_TO_BINARY = 1;// Входные данные пришли в Base64

    CADESCOM_CADES_TYPE = 1;// Тип усовершенствованной подписи

    CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;// Атрибут штампа времени подписи

    oSigner = СоздатьОбъект(«CAdESCOM.CPSigner»);

    // Объект, задающий параметры создания и содержащий информацию об усовершенствованной подписи.

    oSigner.Certificate = СертификатДляПодписи;

    //oSigner.KeyPin = «12345678»;//пароль, с которым сертификат установлен на сервер. если пароля нет — комментируем строку

    oSigningTimeAttr = СоздатьОбъект(«CAdESCOM.CPAttribute»);

    oSigningTimeAttr.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;

    oSigningTimeAttr.Value = ТекущаяДата();

    oSigner.AuthenticatedAttributes2.Add(oSigningTimeAttr);

    ТекстДляПодписи = СокрЛП(ТекстДляПодписи);

    oSignedData = СоздатьОбъект(«CAdESCOM.CadesSignedData»);

    // Объект CadesSignedData предоставляет свойства и методы для работы с усовершенствованной подписью.

    oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;

    oSignedData.Content = СокрЛП(ТекстДляПодписи);

    EncodingType = 0;

    sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_TYPE, bDetached, EncodingType);   // ВОТ ТУТ ОШИБКА

    // Метод добавляет к сообщению усовершенствованную подпись.

    Возврат sSignedMessage;// Подпись в формате Base64

КонецФункции        

Цепочка сертификатов до доверенного КЦ выстроена.

Очень прошу помочь.

Заранее благодарен.

  • Ошибки anr что это
  • Ошибки ebs ивеко стралис на табло
  • Ошибки activex com как исправить windows 10 ccleaner
  • Ошибки eberspacher easystart select
  • Ошибки activex com localserver32 что это