Предопределенный титул получателя
Схема обмена двухтитульными документами подразумевает, что
отправитель готовит первый титул документа, подписывает его и отправляет вместе с подписью получателю,
получатель готовит ответный титул, подписывает и отправляет его вместе с подписью отправителю.
Но существует схема, позволяющая отправтелю приложить сразу оба титула — схема через предопределенный титул. Получателю останется только проверить свой титул и подписать его или отказать в подписи.
Не все версии документов поддерживают такую схему работы. Узнать, доступен ли предопределенный титул получателя для выбранного типа документа, функции и версии можно из ответа метода GetDocumentTypes (V2): информация хранится в поле DocumentTypeDescriptionV2.Functions[].Versions[].SupportsPredefinedRecipientTitle
. Инструкция о получении данных из метода GetDocumentTypes
приведена на странице Получение информации о типе документа.
Отправить документ с двумя титулами можно через шаблон.
Пример использования C# SDK
Ниже приведен пример кода на C# с использованием SDK для работы с предопределенным титулом получателя.
Отправитель создает шаблон
var senderTitle = File.ReadAllBytes("C:\\path\\to\\sender\\title.xml"); var recipientTitle = File.ReadAllBytes ("C:\\path\\to\\recipient\\title.xml"); var documentAttachmentWithTwoTitles = new TemplateDocumentAttachment { // Укажите тип, для версии которого разрешен предопределенный титул покупателя // Саму версию явно можно не указывать, т.к. она должна быть указана под узлом ВерсФорм в XML. TypeNamedId = "typenamedid", UnsignedContent = new UnsignedContent { Content = senderTitle }, PredefinedRecipientTitle = new PredefinedRecipientTitle { UnsignedContent = new UnsignedContent { Content = recipientTitle } } }; var templateToPost = new TemplateToPost { FromBoxId = fromBoxId, ToBoxId = toBoxId, MessageFromBoxId = messageFromBoxId, MessageToBoxId = messageToBoxId, DocumentAttachments = {documentAttachmentWithTwoTitles} }; var template = api.PostTemplate(authToken, templateToPost);
Отправитель создает документ из шаблона
var templateDocumentToTransform = template .Entities .FirstOrDefault(e => e.DocumentInfo.TypeNamedId == "typenamedid"); var transformationToPost = new TemplateTransformationToPost { BoxId = toBoxId, TemplateId = template.MessageId, DocumentTransformations = { new DocumentTransformation { DocumentId = templateDocumentToTransform.EntityId } } }; api.TransformTemplateToMessage(authToken, transformationToPost);
Отправитель генерирует подпись и прикрепляет ее к своему титулу.
var senderTitleContent = message .Entities .FirstOrDefault(e => e.EntityId == documentId) .Content; var signatureForSenderTitlePatch = new MessagePatchToPost { Signatures = { new DocumentSignature { ParentEntityId = documentId; Signature = crypt.Sign(senderTitleContent.Data, senderCertificateContent) } } };
Идентификаторы сущностей титулов отправителя и получателя
entityId
можно получить с помощью метода GetMessage (V5) или GetMessage (V6).Получатель документа получит подписанный титул отправителя и неподписанный предопределенный титул получателя. С его стороны нужно сгенерировать и отправить подпись к предопределенному титулу.
Получатель генерирует подпись и прикрепляет ее к своему титулу.
var recipientTitleContent = message .Entities .FirstOrDefault(e => e.EntityId == recipientTitleEntityId) .Content; var signatureForRecipientTitlePatch = new MessagePatchToPost { Signatures = { new DocumentSignature { ParentEntityId = documentId; Signature = crypt.Sign(recipientTitleContent.Data, recipientCertificateContent) } } }; api.PostMessagePatch(authToken, signatureForRecipientTitlePatch);