Данные электронной подписи не соответствуют текущему участнику.

Авторизация и аутентификация успешно проходят. 

1. Формирование данных для подписания:
   - Сначала генерируется документ в формате JSON, содержащий информацию о выводе товара из оборота.
   - Документ сериализуется в строку JSON и затем кодируется в Base64 для передачи.
2. Подписание данных:
   - Используется открепленная электронная подпись, которая создается на основе части документа поля products. Для этого применяется сертификат, найденный в хранилище по отпечатку (thumbprint).
   - Подписываемая строка сначала кодируется в Base64, а затем подписывается с помощью криптографической библиотеки через объект CAdESCOM.CadesSignedData.
3. Формирование документа для отправки:
   - Полный документ (в формате JSON) 
   - Подписанная часть документа прикрепляется отдельно в виде открепленной подписи.

   - Тело документа в формате Base64
   - На сервер отправляется JSON-объект, содержащий закодированный документ и открепленную подпись, а также токен для аутентификации.

# Этап 5: Подписание части документа (products) откреплённой подписью
def sign_document_part(products_json, thumbprint):
    return sign_data(products_json, thumbprint) # Подписание необработанного JSON
# Этап 6: Отправка данных о выводе товара из оборота (БАДов) с открепленной подписью
def send_withdrawal_request(token, document_json, signed_data_base64):
    url = «https://markirovka.crpt.ru/api/v3/true-api/lk/documents/create?pg=bio»
    headers = {
        'accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {token}'
    }
    # Подписание уже выполнено до этого шага, поэтому только преобразование документа в Base64
    document_base64 = base64.b64encode(document_json.encode('utf-8')).decode('utf-8')
    data = {
       «document_format»: «MANUAL»,
       «product_document»: document_base64,
       «type»: «LK_RECEIPT»,
       «signature»: signed_data_base64 # Открепленная подпись части документа
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        print(«Response:», response.json())
    else:
        raise Exception(f«Error: {response.status_code}, {response.text}»)
    url = «https://markirovka.crpt.ru/api/v3/true-api/lk/documents/create?pg=bio»
    headers = {
        'accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {token}'
    }
    # Преобразование документа в Base64
    document_base64 = base64.b64encode(document_json.encode('utf-8')).decode('utf-8')
    data = {
       «document_format»: «MANUAL»,
       «product_document»: document_base64,
       «type»: «LK_RECEIPT»,
       «signature»: signed_data_base64 # Открепленная подпись части документа
    }
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        print(«Response:», response.json())
    else:
        raise Exception(f«Error: {response.status_code}, {response.text}»)


# Этап 2: Подписание строки (для авторизации или документа)
def sign_data(data_to_sign, thumbprint):
    oStore = win32com.client.Dispatch(«CAdESCOM.Store»)
    oStore.Open(2, 'My', 0) # Открытие хранилища сертификатов
    # Найти сертификат по отпечатку
    for cert in oStore.Certificates:
        if cert.Thumbprint.lower() == thumbprint.lower():
            oCert = cert
            break
    else:
        raise Exception(«Сертификат не найден»)
    oStore.Close()
    # Создание подписчика
    oSigner = win32com.client.Dispatch(«CAdESCOM.CPSigner»)
    oSigner.Certificate = oCert
    # Подписание строки
    oSignedData = win32com.client.Dispatch(«CAdESCOM.CadesSignedData»)
    oSignedData.ContentEncoding = 1 # Base64
    oSignedData.Content = base64.b64encode(data_to_sign.encode('utf-8')).decode('utf-8')
    signed_data = oSignedData.SignCades(oSigner, 1, False, 0) # Открепленная подпись
    # Удаление переносов строк из открепленной подписи
    signed_data = signed_data.replace(«\r», «»).replace(«\n», «»)
    return signed_data

или  в систему, чтобы получать уведомления с ответами на ваши вопросы

Жирный текст
Прикрепить файл
Используется открепленная электронная подпись, которая создается на основе части документа поля products.
Если написано верно, то тут скорее всего ошибка. Подписывать надо именно ту строку, которую передаете в POST запросе, т.е. эту:
data = {
       «document_format»: «MANUAL»,
       «product_document»: document_base64,
       «type»: «LK_RECEIPT»,
       «signature»: signed_data_base64 # Открепленная подпись части документа}
25.09.2024 17:14
Задайте вопрос команде Сообщества

Если у вас есть вопросы, связанные с работой Честного Сообщества или предложения по развитию нашей платформы, то напишите нам!

Если у вас вопросы, связанные с маркировкой, то задайте вопрос тут.

Ваше сообщение отправлено

Ожидайте ответ на электронную почту, указанную в обращении

Наверх
Войти в Cообщество
Впервые в сообществе? Зарегистрироваться
Войти через:
Регистрация в Сообществе
Регистрация участника оборота
Уже зарегистрированы?
или
Войти через GoogleВойти через Vk

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Регистрация Партнера/Интегратора
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация Партнера/Интегратора
Уже зарегистрированы?
Уже зарегистрированы?

Нажимая кнопку «Зарегистрироваться»,
Вы принимаете условия Пользовательского соглашения.

Регистрация в Сообществе

Редактировать изображение партнера/интегратора
Восстановление пароля
Проверьте почту

На почту отправлено письмо со ссылкой восстановления пароля

Восстановление пароля