Coder Social home page Coder Social logo

Comments (24)

GrachevEA avatar GrachevEA commented on August 22, 2024 1

Так что, issue писать бесполезно?

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@atytsky @foobarbazmeow @asvyazin @ak3n eсть кто живой? Прошу прощение, если кого-то отвлёк - Вас предложил at(@)

from diadocsdk-java.

atytsky avatar atytsky commented on August 22, 2024

@GrachevEA привет! Боюсь никто из вышеупомянутых уже не работает в Диадоке. Попробую найти тех, кто поможет.

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@atytsky спасибо

from diadocsdk-java.

ilzag avatar ilzag commented on August 22, 2024

Подскажите, должно же быть какое-либо видимое изменение? Я ожидал переход в статус "Аннулирован" или что-то в этом духе. Хочется понять, что я делаю не так

Добрый день!
Судя по состоянию документа, подписание соглашения об аннулировании со стороны получателя не было выполнено корректно. Проверка валидности подписи происходит асинхронно, поэтому постинг выполняется успешно.

Если выполните GetDocflowsV3, то в структуре ответа будет "Documents.Docflow.Revocation.RevocationResponse.RecipientSignature.IsValid" = "false".

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

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

from diadocsdk-java.

ilzag avatar ilzag commented on August 22, 2024

На вебе(в лк) при успешном подписании соглашения об аннулировании, как сменится статус?

Статус изменится с "Требуется аннулирование" на "Аннулирован".
Вы скорее всего некорретно формируете подпись к соглашению, или постите подпись от другого документа. Сервер даёт запостить её, но после проверки считает её невалидной, и статус документа не меняется.

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@ilzag подпись формируем следующим образом, мне казалось этого достаточно. Не подскажете, что тут не так или быть может, есть метод аналогичный методу addXmlSignatureRejections, используемому при отказе.

            for (DiadocMessage_GetApiProtos.Entity entity : diadocMessage.getEntitiesList()) {
                if (entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Attachment)
                        && entity.getAttachmentType().equals(DiadocMessage_GetApiProtos.AttachmentType.**RevocationRequest**)) {

                    byte[] bcms = CertificateHelper.sign(cert, entity.getContent().getData().toByteArray());
                    msgBuilder.**addSignatures**(DiadocMessage_PostApiProtos.DocumentSignature.newBuilder()
                            .setParentEntityId(entity.getEntityId())
                            .setSignature(ByteString.copyFrom(bcms))
                    );
                }
            }
            if (msgBuilder.getSignaturesList().size() > 0) {
                DiadocMessage_GetApiProtos.MessagePatch **messagePosted** = diadocApi.PostMessagePatch(msgBuilder.build());
                logger.info("приняли предложение об аннулировании для пакета " + packageId);
            }

Может быть нам стоит использовать заполнение структуры RequestedSignatureRejection, если да - у вас нет примера или быть может подскажете, как правильно это сделать?

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

Пробую еще один вариант:

logger.info("Пробуем принять предложение об аннулировании для пакета " + packageId);
            for (DiadocMessage_GetApiProtos.Entity entity : diadocMessage.getEntitiesList()) {
                if (entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Attachment)
                        && entity.getAttachmentType().equals(DiadocMessage_GetApiProtos.AttachmentType.RevocationRequest)) {

                    byte[] bcms = CertificateHelper.sign(cert, entity.getContent().getData().toByteArray());

                    DiadocMessage_PostApiProtos.RequestedSignatureRejection.Builder requestedSignaturesInfo
                            = DiadocMessage_PostApiProtos.RequestedSignatureRejection.newBuilder();
                    requestedSignaturesInfo.setParentEntityId(entity.getEntityId());
                    requestedSignaturesInfo.setSignedContent(DiadocMessage_PostApiProtos.SignedContent.newBuilder()
                            .setContent(ByteString.copyFrom(bcms))
                            .setSignature(ByteString.copyFrom(cert.getEncoded())));

                    msgBuilder.addRequestedSignatureRejections(requestedSignaturesInfo);
                }
            }
            if (msgBuilder.getRequestedSignatureRejectionsList().size() > 0) {
                DiadocMessage_GetApiProtos.MessagePatch messagePosted = diadocApi.PostMessagePatch(msgBuilder.build());
                logger.info("приняли предложение об аннулировании для пакета " + packageId);
            }

получаю "Text revocation request rejection is not supported" для пакета УПД+ПСЦ, где ПСЦ Аннулирован, а УПД Требуется аннулирование

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

Еще вариант, который возвращает "MessagePatchToPost.Signatures[0]: participant title content was not specified" - не с ориентируете, быть может этот вариант рабочий, осталось только пофиксить ошибку?

for (DiadocMessage_GetApiProtos.Entity entity : diadocMessage.getEntitiesList()) {
if (entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Attachment)
&& entity.getDocumentInfo().getRevocationStatus().equals(RequestsMyRevocation)) {

                byte[] bcms = CertificateHelper.sign(cert, entity.getContent().getData().toByteArray());

                msgBuilder.addSignatures(DiadocMessage_PostApiProtos.DocumentSignature.newBuilder()
                        .setSignature(ByteString.copyFrom(bcms))
                        .setParentEntityId(entity.getEntityId()));
            }
        }
        if (msgBuilder.getSignaturesList().size() > 0) {
            DiadocMessage_GetApiProtos.MessagePatch messagePosted = diadocApi.PostMessagePatch(msgBuilder.build());
            logger.info("приняли предложение об аннулировании для пакета " + packageId);
        }

Аналогично тут:

                byte[] b;
                if (entity.getContent().getData() != null && entity.getContent().getData().toByteArray().length != 0) {
                    b = entity.getContent().getData().toByteArray();
                } else {
                    b = diadocApi.GetEntityContent(protekBoxId, packageId, entity.getEntityId());
                }
                byte[] bcms = CertificateHelper.CMSSign(b, key, cert, true);

                msgBuilder.addSignatures(DiadocMessage_PostApiProtos.DocumentSignature.newBuilder()
                        .setSignature(ByteString.copyFrom(bcms))
                        .setParentEntityId(entity.getEntityId()));

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

А такой вариант, возвращает "status code: 400, reason phrase: MessagePatchToPost.RequestedSignatureRejections[0]: { Location = , Message = Content must be valid UTF8 string }"

` for (DiadocMessage_GetApiProtos.Entity entity : diadocMessage.getEntitiesList()) {
if (entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Attachment)
//&& entity.getAttachmentType().equals(DiadocMessage_GetApiProtos.AttachmentType.RevocationRequest)
&& entity.getDocumentInfo().getRevocationStatus().equals(RequestsMyRevocation)) {

                byte[] b;
                if (entity.getContent().getData() != null && entity.getContent().getData().toByteArray().length != 0) {
                    b = entity.getContent().getData().toByteArray();
                } else {
                    b = diadocApi.GetEntityContent(protekBoxId, packageId, entity.getEntityId());
                }
                byte[] bcms = CertificateHelper.CMSSign(b, key, cert, true);

                DiadocMessage_PostApiProtos.RequestedSignatureRejection.Builder requestedSignaturesInfo
                        = DiadocMessage_PostApiProtos.RequestedSignatureRejection.newBuilder();
                requestedSignaturesInfo.setParentEntityId(entity.getEntityId());
                requestedSignaturesInfo.setSignedContent(DiadocMessage_PostApiProtos.SignedContent.newBuilder()
                        .setContent(ByteString.copyFrom(bcms))
                        .setSignature(ByteString.copyFrom(cert.getEncoded())));

                msgBuilder.addRequestedSignatureRejections(requestedSignaturesInfo);
            }
        }
        if (msgBuilder.getRequestedSignatureRejectionsList().size() > 0) {
            DiadocMessage_GetApiProtos.MessagePatch messagePosted = diadocApi.PostMessagePatch(msgBuilder.build());
        }`

from diadocsdk-java.

atytsky avatar atytsky commented on August 22, 2024

Text revocation request rejection is not supported - вообще это вроде человекочетаемое сообщение, вероятно если отправитель также работает через API, то он мог создать аннулирования не в том формате, для УПД нужно формализованное аннулирование. В API даже есть отдельный метод.

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

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@atytsky отправитель работает через ЛК, в любом случае, спасибо за ваш ответ

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@atytsky хорошо бы понять, как правильно подтвердить запрошенное отправителем аннулирование))

from diadocsdk-java.

ilzag avatar ilzag commented on August 22, 2024

Еще вариант, который возвращает "MessagePatchToPost.Signatures[0]: participant title content was not specified" - не с ориентируете, быть может этот вариант рабочий, осталось только пофиксить ошибку?

Здравствуйте!
Да, это рабочий вариант.
Структура тела запроса получится следующей:

{
	"BoxId": "{{Ид вашего ящика}}",
	"MessageId": "{{Ид сообщения, к которому относится аннулируемый документ}}",
	"Signatures": [
		{
			"ParentEntityId": "{{Ид соглашения об аннулировании}}",
			"Signature": "{{Base64-представление файла подписи к файлу соглашения}}"
		}
	]
}

SignatureRejections - это отказы в подписи документа или отказы в подписи соглашения об аннулировании, поэтому в вашем сценарии это не подходит.

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@ilzag, если вариант рабочий, не подскажете, что я сделал не так? Почему могло дать о себе знать сообщение "MessagePatchToPost.Signatures[0]: participant title content was not specified"?

from diadocsdk-java.

ilzag avatar ilzag commented on August 22, 2024

@ilzag, если вариант рабочий, не подскажете, что я сделал не так? Почему могло дать о себе знать сообщение "MessagePatchToPost.Signatures[0]: participant title content was not specified"?

Можете залогировать http-запрос с параметрами и телом? Без ключа разработчика и токена авторизации.

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@ilzag для взаимодействия используются фреймворки/библиотеки, я могу из отладчика выудить информацию, но также важно понимать какого рода/формата Вы от меня ждете, а сам текст сообщения вам ни о чем не говорит?

from diadocsdk-java.

ilzag avatar ilzag commented on August 22, 2024

@ilzag для взаимодействия используются фреймворки/библиотеки, я могу из отладчика выудить информацию, но также важно понимать какого рода/формата Вы от меня ждете, а сам текст сообщения вам ни о чем не говорит?

В теле HTTP-запроса уходит структура MessagePatchToPost, содержащая список дополнений к сообщению в Диадоке. Какое поведение ожидается, ясно, но стоит отталкиваться от того, что по факту уходит в запросе. Сообщение от сервера пока не говорит, что конкретно нужно исправить.

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

Структура DiadocMessage_PostApiProtos.MessagePatchToPost.Builder msgBuilder в момент отправки PostMessage

BoxId: "83145f91-c091-41f0-9d7b-19ae2ccfe8a4"
MessageId: "a029130a-799e-4080-9577-9b5eb689b3e5"
Signatures {
ParentEntityId: "435aaab9-e32f-4443-9c9e-c962d2cb88c3"
Signature: "0\202\vQ\006\t*\206H\206\367\r\001\a\002\240\202\vB0\202\v>\002\001\0011\0160\f\006\b*\205\003\a\001\001\002\002\005\0000\017\006\t*\206H\206\367\r\001\a\001\240\002\004\000\240\202\t\2100\202\t\2040\202\t1\240\003\002\001\002\002\021\001M\356\222\000x\256\351\231J~\356\316j\022\264\2370\n\006\b*\205\003\a\001\001\003\0020\202\001\n1\0360\034\006\t*\206H\206\367\r\001\t\001\026\[email protected]\0300\026\006\005*\205\003d\001\022\r00000000000001\0320\030\006\b*\205\003\003\201\003\001\001\022\f0000000000001\v0\t\006\003U\004\006\023\002RU1301\006\003U\004\b\f66 \320\241\320\262\320\265\321\200\320\264\320\273\320\276\320\262\321\201\320\272\320\260\321\217 \320\276\320\261\320\273\320\260\321\201\321\202\321\2141!0\037\006\003U\004\a\f\030\320\225\320\272\320\260\321\202\320\265\321\200\320\270\320\275\320\261\321\203\321\200\320\2631"0 \006\003U\004\t\f\031\320\234\320\260\320\273\320\276\320\277\321\200\321\203\320\264\320\275\320\260\321\217, 51\0210\017\006\003U\004\n\f\bEasyCert1\0260\024\006\003U\004\003\f\r\320\243\320\246 EasyCert0\036\027\r220415084458Z\027\r230715085429Z0\202\002,1\0250\023\006\005\205\003d\004\022\n9612437724100.\006\t*\206H\206\367\r\001\t\002\f!9612437724-961201000-0000000000001\0320\030\006\b*\205\003\003\201\003\001\001\022\f6664536645411\0260\024\006\005*\205\003d\003\022\v000000000001\0300\026\006\005*\205\003d\001\022\r12345678901231z0x\006\003U\004\f\fq\320\241\320\277\320\265\321\206\320\270\320\260\320\273\320\270\321\201\321\202 \320\277\320\276 \321\200\320\260\320\267\320\262\320\270\321\202\320\270\321\216 \320\272\320\276\321\200\320\277\320\276\321\200\320\260\321\202\320\270\320\262\320\275\320\276\320\271 \320\270\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271 \321\201\320\270\321\201\321\202\320\265\320\274\321\2131A0?\006\003U\004\n\f8\320\276\321\200\320\263\320\260\320\275\320\270\320\267\320\260\321\206\320\270\321\217 \320\237\321\200\320\276\321\202\320\265\320\272 (\320\270\321\201\321\205\320\276\320\264\321\217\321\211\320\260\321\217)1\n0\b\006\003U\004\t\f\00111\0250\023\006\003U\004\a\f\f\320\234\320\276\321\201\320\272\320\262\320\2601\0300\026\006\003U\004\b\f\01777 \320\234\320\276\321\201\320\272\320\262\320\2601\v0\t\006\003U\004\006\023\002RU10(\006\003U\004\f!\320\241\320\265\321\200\320\263\320\265\320\271 \320\222\320\270\320\272\321\202\320\276\321\200\320\276\320\262\320\270\321\2071\0330\031\006\003U\004\004\f\022\320\227\320\260\320\272\320\273\320\260\320\264\320\275\320\276\320\2711A0?\006\003U\004\003\f8\320\276\321\200\320\263\320\260\320\275\320\270\320\267\320\260\321\206\320\270\321\217 \320\237\321\200\320\276\321\202\320\265\320\272 (\320\270\321\201\321\205\320\276\320\264\321\217\321\211\320\260\321\217)0f0\037\006\b*\205\003\a\001\001\001\0010\023\006\a*\205\003\002\002$\000\006\b*\205\003\a\001\001\002\002\003C\000\004@#\317\200q\201T'=9\346\261\230\223\277l\232\363\020\017\023\f\200\254xK\343U\255\023{CK4\024\201"_\224Xo\2371\264u\354S\031\023\030\340q\325!\264\b\000\221i\213#p\203+\346\243\202\005C0\202\005?0\f\006\005*\205\003dr\004\003\002\001\0000\016\006\003U\035\017\001\001\377\004\004\003\002\004\3600\023\006\003U\035 \004\f0\n0\b\006\006*\205\003dq\00107\006\003U\035%\00400.\006\b+\006\001\005\005\a\003\002\006\a*\205\003\002\002"\006\006\a*\205\003\003\a\b\001\006\b*\205\003\003\a\001\001\001\006\006*\205\003\003\a\0010\201\277\006\b+\006\001\005\005\a\001\001\004\201\2620\201\2570\\006\b+\006\001\005\005\a0\002\206Phttp://extern-api.testkontur.ru/aia/5d4579afb54e18c3f91ce78a0f524504ca287118.crt0O\006\b+\006\001\005\005\a0\002\206Chttp://uc-easycert/aia/5d4579afb54e18c3f91ce78a0f524504ca287118.crt0+\006\003U\035\020\004$0"\200\01720220415084457Z\201\01720230715085429Z0\202\0013\006\005*\205\003dp\004\202\001(0\202\001$\f+"\320\232\321\200\320\270\320\277\321\202\320\276\320\237\321\200\320\276 CSP" (\320\262\320\265\321\200\321\201\320\270\321\217 4.0)\fS"\320\243\320\264\320\276\321\201\321\202\320\276\320\262\320\265\321\200\321\217\321\216\321\211\320\270\320\271 \321\206\320\265\320\275\321\202\321\200 "\320\232\321\200\320\270\320\277\321\202\320\276\320\237\321\200\320\276 \320\243\320\246" \320\262\320\265\321\200\321\201\320\270\320\270 2.0\fO\320\241\320\265\321\200\321\202\320\270\321\204\320\270\320\272\320\260\321\202 \321\201\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217 \342\204\226 \320\241\320\244/124-3570 \320\276\321\202 14.12.2018\fO\320\241\320\265\321\200\321\202\320\270\321\204\320\270\320\272\320\260\321\202 \321\201\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\321\217 \342\204\226 \320\241\320\244/128-3592 \320\276\321\202 17.10.201806\006\005*\205\003do\004-\f+"\320\232\321\200\320\270\320\277\321\202\320\276\320\237\321\200\320\276 CSP" (\320\262\320\265\321\200\321\201\320\270\321\217 4.0)0\201\256\006\003U\035\037\004\201\2460\201\2430V\240T\240R\206Phttp://extern-api.testkontur.ru/cdp/5d4579afb54e18c3f91ce78a0f524504ca287118.crl0I\240G\240E\206Chttp://uc-easycert/cdp/5d4579afb54e18c3f91ce78a0f524504ca287118.crl0S\006\a*\205\003\002\0021\002\004H0F06\026\017http://test.uri\f\037\320\242\320\265\321\201\321\202\320\276\320\262\320\260\321\217 \321\201\320\270\321\201\321\202\320\265\320\274\320\260\003\002\005\340\004\f \016\341\263\203\302\213\rU\t\376\2530\202\001L\006\003U\035#\004\202\001C0\202\001?\200\024]Ey\257\265N\030\303\371\034\347\212\017RE\004\312(q\030\241\202\001\022\244\202\001\0160\202\001\n1\0360\034\006\t*\206H\206\367\r\001\t\001\026\[email protected]\0300\026\006\005*\205\003d\001\022\r00000000000001\0320\030\006\b*\205\003\003\201\003\001\001\022\f0000000000001\v0\t\006\003U\004\006\023\002RU1301\006\003U\004\b\f66 \320\241\320\262\320\265\321\200\320\264\320\273\320\276\320\262\321\201\320\272\320\260\321\217 \320\276\320\261\320\273\320\260\321\201\321\202\321\2141!0\037\006\003U\004\a\f\030\320\225\320\272\320\260\321\202\320\265\321\200\320\270\320\275\320\261\321\203\321\200\320\2631"0 \006\003U\004\t\f\031\320\234\320\260\320\273\320\276\320\277\321\200\321\203\320\264\320\275\320\260\321\217, 51\0210\017\006\003U\004\n\f\bEasyCert1\0260\024\006\003U\004\003\f\r\320\243\320\246 EasyCert\202\021\001\250\371\231\000D\255\223\226K\366i\246\322\342\003r0\035\006\003U\035\016\004\026\004\024\017!f\377\224\017\217\215\237\276\200\240\257\323\353\315\310\v\362\3240\n\006\b\205\003\a\001\001\003\002\003A\000\200!\r\372\302\204aP\0300N"\315\253\027\252\036\244\333X\241K\232\264\302<f\305\275IL\027V U\375\213\037\020\032\375\3021\305/\311\255\310\301\261\265\274\344z\352t\035%5\367\ \n\3711\202\001\2120\202\001\206\002\001\0010\202\001!0\202\001\n1\0360\034\006\t*\206H\206\367\r\001\t\001\026\[email protected]\0300\026\006\005*\205\003d\001\022\r00000000000001\0320\030\006\b*\205\003\003\201\003\001\001\022\f0000000000001\v0\t\006\003U\004\006\023\002RU1301\006\003U\004\b\f66 \320\241\320\262\320\265\321\200\320\264\320\273\320\276\320\262\321\201\320\272\320\260\321\217 \320\276\320\261\320\273\320\260\321\201\321\202\321\2141!0\037\006\003U\004\a\f\030\320\225\320\272\320\260\321\202\320\265\321\200\320\270\320\275\320\261\321\203\321\200\320\2631"0 \006\003U\004\t\f\031\320\234\320\260\320\273\320\276\320\277\321\200\321\203\320\264\320\275\320\260\321\217, 51\0210\017\006\003U\004\n\f\bEasyCert1\0260\024\006\003U\004\003\f\r\320\243\320\246 EasyCert\002\021\001M\356\222\000x\256\351\231J~\356\316j\022\264\2370\f\006\b\205\003\a\001\001\002\002\005\0000\f\006\b*\205\003\a\001\001\001\001\005\000\004@6\310\377w9< \267\346$]N\303 \342|\231\271\205\301\241B\347\037;\215!sQc9\272a \024-\364\003s\240\224\333\001h\337\215\357'\310\213i\273\a\256\354f\300\373\215\334\314C8\334"
}

URI: https://diadoc-api.kontur.ru/V3/PostMessagePatch
RequestBody представлен массивом байт

Response: HTTP/1.1 400 Bad Request [Date: Tue, 04 Apr 2023 08:21:25 GMT, Content-Type: text/plain; charset=utf-8, Content-Length: 77, Connection: keep-alive, X-Kontur-Trace-Id: 73333d56ff55404e33d0ab15ed05e230, Context-Globals: FgAAAHZvc3Rvay50cmFjaW5nLmNvbnRleHRJAAAANzMzMzNkNTYtZmY1NS00MDRlLTMzZDAtYWIxNWVkMDVlMjMwOzZiMTNjNWZmLThmYjktMTJkMi05OTRhLWVlMmVjOGRhZmU2ZBcAAAB2b3N0b2sucmVxdWVzdC5wcmlvcml0eQgAAABPcmRpbmFyeQ==, X-Diadoc-ErrorCode: Http.BadRequest, X-Diadoc-LogLevel: Info, X-Kontur-Dont-Retry: True, Dont-Retry: True] org.apache.http.conn.BasicManagedEntity@359961f8

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

UTD:

EntityType: Attachment
EntityId: "435aaab9-e32f-4443-9c9e-c962d2cb88c3"
Content {
Size: 6608
}
AttachmentType: UniversalTransferDocument
FileName: "ON_NSCHFDOPPR_2BM-9679387467-967901000-201509141254127128738_2BM-9612437724-961201000-201509141253018309040_20230320_003cad53-8611-428d-98d8-62994d664201.xml"
DocumentInfo {
MessageId: "a029130a-799e-4080-9577-9b5eb689b3e5"
EntityId: "435aaab9-e32f-4443-9c9e-c962d2cb88c3"
CreationTimestampTicks: 638149708957890053
CounteragentBoxId: "[email protected]"
DocumentType: UniversalTransferDocument
SubordinateDocumentIds {
MessageId: "a029130a-799e-4080-9577-9b5eb689b3e5"
EntityId: "13744249-f1ae-4273-8376-87986da56b04"
}
Content {
Size: 6608
}
FileName: "ON_NSCHFDOPPR_2BM-9679387467-967901000-201509141254127128738_2BM-9612437724-961201000-201509141253018309040_20230320_003cad53-8611-428d-98d8-62994d664201.xml"
DocumentDate: "16.03.2023"
DocumentNumber: "1X2084733m"
DepartmentId: "1412e153-1c2b-4f98-8353-44d3b6fb790d"
IsTest: true
FromDepartmentId: "00000000-0000-0000-0000-000000000000"
ToDepartmentId: "1412e153-1c2b-4f98-8353-44d3b6fb790d"
RevocationStatus: RequestsMyRevocation
SendTimestampTicks: 638149708957890053
DeliveryTimestampTicks: 638149708961883565
RoamingNotificationStatus: RoamingNotificationStatusNone
PacketId: "77f022fe-f0b6-466c-8389-086ef178f02a"
DocumentDirection: Inbound
LastModificationTimestampTicks: 638155161064137071
SenderSignatureStatus: SenderSignatureCheckedAndValid
IsRead: true
UniversalTransferDocumentMetadata {
DocumentStatus: InboundNotFinished
Total: "535248.94"
Vat: "40040.46"
Grounds: "601\320\220 \320\276\321\202 23.07.2021"
DocumentFunction: "\320\241\320\247\320\244\320\224\320\236\320\237"
Currency: 643
ConfirmationDateTimeTicks: 638149816961883565
InvoiceAmendmentFlags: 0
}
ProxySignatureStatus: ProxySignatureStatusNone
TypeNamedId: "UniversalTransferDocument"
Function: "\320\241\320\247\320\244\320\224\320\236\320\237"
WorkflowId: 18
Title: "\320\243\320\237\320\224 \342\204\2261X2084733m \320\276\321\202 16.03.23"
Metadata {
Key: "FileName"
Value: "ON_NSCHFDOPPR_2BM-9679387467-967901000-201509141254127128738_2BM-9612437724-961201000-201509141253018309040_20230320_003cad53-8611-428d-98d8-62994d664201.xml"
}
Metadata {
Key: "DocumentNumber"
Value: "1X2084733m"
}
Metadata {
Key: "DocumentDate"
Value: "16.03.2023"
}
Metadata {
Key: "TotalSum"
Value: "535248.94"
}
Metadata {
Key: "TotalVat"
Value: "40040.46"
}
Metadata {
Key: "CurrencyCode"
Value: "643"
}
Metadata {
Key: "Grounds"
Value: "601\320\220 \320\276\321\202 23.07.2021"
}
Metadata {
Key: "TotalVat10"
Value: "40040.46"
}
Metadata {
Key: "TotalVat18"
Value: "0"
}
Metadata {
Key: "TotalVat20"
Value: "0"
}
RecipientReceiptMetadata {
ReceiptStatus: Finished
ConfirmationMetadata {
ReceiptStatus: GeneralReceiptStatusNotAcceptable
DateTimeTicks: 638149988178784588
}
}
ConfirmationMetadata {
ReceiptStatus: GeneralReceiptStatusNotAcceptable
DateTimeTicks: 638149708961883565
}
RecipientResponseStatus: RecipientResponseStatusNotAcceptable
AmendmentRequestMetadata {
AmendmentFlags: 0
ReceiptStatus: GeneralReceiptStatusNotAcceptable
}
LockMode: None
SenderReceiptMetadata {
ReceiptStatus: GeneralReceiptStatusNotAcceptable
}
Version: "utd820_05_01_02_hyphen"
80: "\n8\n\aWarning\022-\320\242\321\200\320\265\320\261\321\203\320\265\321\202\321\201\321\217 \320\260\320\275\320\275\321\203\320\273\320\270\321\200\320\276\320\262\320\260\320\275\320\270\320\265"
}
RawCreationDate: 638149708957890053
PacketId: "77f022fe-f0b6-466c-8389-086ef178f02a"
Version: "utd820_05_01_02_hyphen"
31: "utd820_schfdop_orig_t1_05_01_02_hyphen"

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@ilzag все, что возможно выудил - выручайте)

from diadocsdk-java.

ilzag avatar ilzag commented on August 22, 2024

ParentEntityId: "435aaab9-e32f-4443-9c9e-c962d2cb88c3"

Тут вы ссылаетесь на исходный документ. При аннулировании вы подписываете иную сущность - "Соглашение об аннулировании" (дочерняя по отношению к исходному документу, "AttachmentType": "RevocationRequest")
Попробуйте выполнить GetMessage или GetDocflows. В структуре ответа по типу сущности найдёте её идентификатор. C помощью GetEntityContent получите содержимое Соглашения об аннулировании - именно оно должно быть подписано. В теле патча ParentEntityId: укажите идентификатор соглашения, когда будете отправлять подпись.

from diadocsdk-java.

GrachevEA avatar GrachevEA commented on August 22, 2024

@ilzag предварительно есть результат. Буду проверять. Резюмирую с этого:

for (DiadocMessage_GetApiProtos.Entity entity : diadocMessage.getEntitiesList()) {
    if (entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Attachment)
    && entity.getDocumentInfo().getRevocationStatus().equals(RequestsMyRevocation)) {

                byte[] bcms = CertificateHelper.sign(cert, entity.getContent().getData().toByteArray());

                msgBuilder.addSignatures(DiadocMessage_PostApiProtos.DocumentSignature.newBuilder()
                        .setSignature(ByteString.copyFrom(bcms))
                        .setParentEntityId(entity.getEntityId()));
            }
}
if (msgBuilder.getSignaturesList().size() > 0) {
            DiadocMessage_GetApiProtos.MessagePatch messagePosted = diadocApi.PostMessagePatch(msgBuilder.build());
            logger.info("приняли предложение об аннулировании для пакета " + packageId);
}

Я пришел к этому:

 // Создаем карту сущностей для последующего отбора родительских сущностей
Map<String, DiadocMessage_GetApiProtos.Entity> parentEntityMap = diadocMessage.getEntitiesList().stream()
                    .collect(Collectors.toMap(DiadocMessage_GetApiProtos.Entity::getEntityId, Function.identity()));
for (DiadocMessage_GetApiProtos.Entity entity : diadocMessage.getEntitiesList()) {
                if (entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Attachment)
                        && entity.getAttachmentType().equals(DiadocMessage_GetApiProtos.AttachmentType.RevocationRequest)) {
                    // Когда нашли документ, который необходимо аннулировать - проверяем родительскую сущность на статус 'Запрос на аннулирование'
                    DiadocMessage_GetApiProtos.Entity parentEntity = parentEntityMap.get(entity.getParentEntityId());
                    // Если это 'Запрос на аннулирование'
                    if (parentEntity.getDocumentInfo().getRevocationStatus().equals(RequestsMyRevocation)) {
                        byte[] enityResponse;
                        if (entity.getContent().getData().toByteArray().length != 0) {
                            enityResponse = entity.getContent().getData().toByteArray();
                        } else {
                            enityResponse = diadocApi.GetEntityContent(protekBoxId, packageId, entity.getEntityId());
                        }
                        byte[] bcms = CertificateHelper.sign(cert, enityResponse);

                        msgBuilder.addSignatures(DiadocMessage_PostApiProtos.DocumentSignature.newBuilder()
                                .setSignature(ByteString.copyFrom(bcms))
                                .setParentEntityId(entity.getEntityId()));
                    }
                }
 }
if (msgBuilder.getSignaturesList().size() > 0) {
                DiadocMessage_GetApiProtos.MessagePatch messagePosted = diadocApi.PostMessagePatch(msgBuilder.build());
}

Вкратце, проблема заключалась в том, что я пытался подписать оригинальный документ, а не сам запрос на аннулирование, что важно - это в подпись необходимо было передать не ссылку на исходный/родительский документ, а сущность запроса на аннулирование

from diadocsdk-java.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.