Работа с отказом в подписи и отказом от предложения об аннулировании

Генерация отказа от подписи и отказа от предложения об аннулировании

Сгенерировать отказ в подписи можно с помощью метода GenerateSignatureRejectionXml (V2). Данные подписанта нужно передать в универсальном формате в виде XML-файла, сконвертированного в Base64-строку.

Пример HTTP-запроса метода GenerateSignatureRejectionXml:

POST V2/GenerateSignatureRejectionXml?boxid={{boxId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/json charset=utf-8

Пример тела запроса метода GenerateSignatureRejectionXml:

{
    "ErrorMessage": "Текстовый комментарий",
    "MessageId": "bbcedb0d-ce34-4e0d-b321-3f600c920935",
    "AttachmentId": "30cf2c07-7297-4d48-bc6f-ca7a80e2cf95",
    "SignerContent": "PD94bWwgdmVyc2l...LDQudC7Pg=="        // содержимое XML-файла с данными подписанта в кодировке Base-64
}

Пример тела ответа метода GenerateSignatureRejectionXml:

<?xml version="1.0" encoding="windows-1251"?>
<Файл ИдФайл="DP_UVUTOCH_2BM-9017770974-757645784-202407101104400484330_2BM-5242989368-732644841-202407101103418496883_20250416_6a0d86e6-f052-455d-a62b-7e684a3906ad" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
    <Документ КНД="1115113">
        <УчастЭДО ИдУчастЭДО="2BM-5242989368-732644841-202407101103418496883">
            <ЮЛ НаимОрг="Продавец" ИННЮЛ="5242989368" КПП="732644841"/>
        </УчастЭДО>
        <СвУведУточ ДатаПол="16.04.2025" ВремяПол="10.05.46">
            <СведПолФайл ИмяПолФайла="Group12">
                <ЭППолФайл>MIIMiQYJKoZIhv...UNp8A
</ЭППолФайл>
            </СведПолФайл>
            <ТекстУведУточ>Текстовый комментарий
</ТекстУведУточ>
        </СвУведУточ>
        <ОтпрДок ИдУчастЭДО="2BM-9017770974-757645784-202407101104400484330">
            <ЮЛ НаимОрг="Покупатель" ИННЮЛ="9017770974" КПП="757645784"/>
        </ОтпрДок>
        <Подписант ТипПодпис="1" СтатПодп="2" Должн="Не указана">
            <ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович"/>
            <СвДоверЭл СпособПредставл="1" НомДовер="4a743152-e772-4249-9a47-e2e290258e79" ДатаВыдДовер="17.09.2018" ВнНомДовер="123" ДатаВнРегДовер="18.09.2018" СвСистХран="СвДоверЭл-ИдСистХран"/>
        </Подписант>
    </Документ>
</Файл>

В ответе метод вернет сгенерированный XML-файл отказа. Полученный XML-файл можно подписать электронной подписью и отправить с помощью метода PostMessagePatch (V4), передав его в поле XmlSignatureRejections структуры MessagePatchToPostV2. Инструкция об отправке документа приведена в разделе Отправка предложения об аннулировании.

Получение отказа в подписи

Получатель может сформировать отказ в подписи и отправить его отправителю. Получить отказ в подписи можно с помощью метода GetMessage (V6).

В запросе нужно передать:

  • boxId — идентификатор ящика отправителя,

  • messageId — идентификатор отправленного сообщения с документом,

  • entityId — идентификатор документа или предложения об аннулировании, для которого сформирован отказ.

Эти значения можно получить из структуры Message.

В ответе метод вернет структуру Message с вложенной структурой Entity. Отказ в подписи будет представлен структурой Entity со следующими полями:

  • EntityType = Attachment,

  • AttachmentType = XmlSignatureRejection.

Пример HTTP-запроса метода GetMessage:

GET /V5/GetMessage?boxId={{boxId}}&messageId={{messageId}}&entityId={{entityId}} HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Accept: application/json
Content-Type: application/json charset=utf-8

Пример тела ответа метода GetMessage:

{
    "EntityType": "Attachment",
    "EntityId": "33ba16c68-cc54-4b25-b81c-0e79134e219d",
    "ParentEntityId": "30cf2c07-7297-4d48-bc6f-ca7a80e2cf95",
    "Content": "lores ipsum",
    "AttachmentType": "XmlSignatureRejection",
    "FileName": "DP_UVUTOCH_2BM-5242989368-732644841-202407101103418496883_2BM-9147414342-757645784-202407101104400484330_20250416_c31a643c-8384-4e90-bef0-a8cd65c9ee90.xml",
    "NeedRecipientSignature": false,
    "SignerBoxId": "",
    "NotDeliveredEventId": "",
    "RawCreationDate": 638932613721445085,
    "SignerDepartmentId": "",
    "NeedReceipt": false,
    "IsApprovementSignature": false,
    "IsEncryptedContent": false
}

Парсинг отказа в подписи

Распарсить XML-файл отказа в подписи можно с помощью метода ParseSignatureRejectionXml. В теле запроса нужно передать XML-файл отказа в подписи, соответствующий XSD-схеме.

Пример HTTP-запроса метода ParseSignatureRejectionXml:

POST /ParseSignatureRejectionXml HTTP/1.1
Host: diadoc-api.kontur.ru
Authorization: Bearer {{access_token}}
Content-Type: application/xml; charset=utf-8

Пример тела запроса метода ParseSignatureRejectionXml:

<Файл ИдФайл="DP_UVUTOCH_2BM-1828306960-2012052807192968181080000000000_2BM-3990015462-927043935-201407110304450252964_20260122_9fe6c957-110a-47ea-9547-f04aed04456f" ВерсПрог="Diadoc 1.0" ВерсФорм="1.03">
  <Документ КНД="1115113">
    <УчастЭДО ИдУчастЭДО="2BM-3990015462-927043935-201407110304450252964">
      <ЮЛ НаимОрг="Организация-отправитель" ИННЮЛ="3990015462" КПП="927043935"/>
    </УчастЭДО>
    <СвУведУточ ДатаПол="22.01.2026" ВремяПол="08.00.50">
      <СведПолФайл ИмяПолФайла="ON_NSCHFDOPPR_2BM-3990015462-927043935-201407110304450252964_2BM-1828306960-2012052807192968181080000000000_20260122_36e8755d-83a8-4674-925f-2e0f45300beb_0_0_0_0_0_00">
        <ЭППолФайл>MIIVmwYJKoZIhvcNAQc...W1etE7sMjjzlXj2aRVTQ8Br9MsAxk+I2/92vW9urxm2df2A8sCVK6SQkAyj</ЭППолФайл>
      </СведПолФайл>
      <ТекстУведУточ>Отказываю в подписи. В дате ошибка </ТекстУведУточ>
    </СвУведУточ>
    <ОтпрДок ИдУчастЭДО="2BM-1828306960-2012052807192968181080000000000">
      <ЮЛ НаимОрг="Организация-получатель" ИННЮЛ="1828306960" КПП="861201692"/>
    </ОтпрДок>
    <Подписант Должн="Сотрудник">
      <ФИО Фамилия="Иванов" Имя="Иван" Отчество="Иванович" />
    </Подписант>
  </Документ>
</Файл>

Пример тела ответа метода ParseSignatureRejectionXml:

{
    "ErrorMessage": "Отказываю в подписи. В дате ошибка",
    "Signer": {
        "SignerDetails": {
            "Surname": "Иванов",
            "FirstName": "Иван",
            "Patronymic": "Иванович",
            "JobTitle": "Сотрудник",
            "Inn": "",
            "SoleProprietorRegistrationCertificate": ""
        },
        "SignerCertificateThumbprint": ""
    }
}

В ответе метод вернет информацию об отказе в подписи в виде структуры SignatureRejectionInfo.