Comments (24)
Так что, issue писать бесполезно?
from diadocsdk-java.
@atytsky @foobarbazmeow @asvyazin @ak3n eсть кто живой? Прошу прощение, если кого-то отвлёк - Вас предложил at(@)
from diadocsdk-java.
@GrachevEA привет! Боюсь никто из вышеупомянутых уже не работает в Диадоке. Попробую найти тех, кто поможет.
from diadocsdk-java.
@atytsky спасибо
from diadocsdk-java.
Подскажите, должно же быть какое-либо видимое изменение? Я ожидал переход в статус "Аннулирован" или что-то в этом духе. Хочется понять, что я делаю не так
Добрый день!
Судя по состоянию документа, подписание соглашения об аннулировании со стороны получателя не было выполнено корректно. Проверка валидности подписи происходит асинхронно, поэтому постинг выполняется успешно.
Если выполните GetDocflowsV3, то в структуре ответа будет "Documents.Docflow.Revocation.RevocationResponse.RecipientSignature.IsValid" = "false"
.
from diadocsdk-java.
@ilzag а что подразумевается, под "не было выполнено корректно". Получается я и являюсь получателем. В целом, я догадался, что что-то делаю не так. На вебе(в лк) при успешном подписании соглашения об аннулировании, как сменится статус?
from diadocsdk-java.
На вебе(в лк) при успешном подписании соглашения об аннулировании, как сменится статус?
Статус изменится с "Требуется аннулирование" на "Аннулирован".
Вы скорее всего некорретно формируете подпись к соглашению, или постите подпись от другого документа. Сервер даёт запостить её, но после проверки считает её невалидной, и статус документа не меняется.
from diadocsdk-java.
@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.
Пробую еще один вариант:
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.
Еще вариант, который возвращает "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.
А такой вариант, возвращает "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.
Text revocation request rejection is not supported
- вообще это вроде человекочетаемое сообщение, вероятно если отправитель также работает через API, то он мог создать аннулирования не в том формате, для УПД нужно формализованное аннулирование. В API даже есть отдельный метод.
Попробуйте скачать это аннулирование и посмотреть, что оно из себя представляет. Если это текстовый документ, то возможно интеграция отправителя работает неверно. Но лучше бы конечно, что бы ответили компетентные люди из Контура.
from diadocsdk-java.
@atytsky отправитель работает через ЛК, в любом случае, спасибо за ваш ответ
from diadocsdk-java.
@atytsky хорошо бы понять, как правильно подтвердить запрошенное отправителем аннулирование))
from diadocsdk-java.
Еще вариант, который возвращает "MessagePatchToPost.Signatures[0]: participant title content was not specified" - не с ориентируете, быть может этот вариант рабочий, осталось только пофиксить ошибку?
Здравствуйте!
Да, это рабочий вариант.
Структура тела запроса получится следующей:
{
"BoxId": "{{Ид вашего ящика}}",
"MessageId": "{{Ид сообщения, к которому относится аннулируемый документ}}",
"Signatures": [
{
"ParentEntityId": "{{Ид соглашения об аннулировании}}",
"Signature": "{{Base64-представление файла подписи к файлу соглашения}}"
}
]
}
SignatureRejections - это отказы в подписи документа или отказы в подписи соглашения об аннулировании, поэтому в вашем сценарии это не подходит.
from diadocsdk-java.
@ilzag, если вариант рабочий, не подскажете, что я сделал не так? Почему могло дать о себе знать сообщение "MessagePatchToPost.Signatures[0]: participant title content was not specified"?
from diadocsdk-java.
@ilzag, если вариант рабочий, не подскажете, что я сделал не так? Почему могло дать о себе знать сообщение "MessagePatchToPost.Signatures[0]: participant title content was not specified"?
Можете залогировать http-запрос с параметрами и телом? Без ключа разработчика и токена авторизации.
from diadocsdk-java.
@ilzag для взаимодействия используются фреймворки/библиотеки, я могу из отладчика выудить информацию, но также важно понимать какого рода/формата Вы от меня ждете, а сам текст сообщения вам ни о чем не говорит?
from diadocsdk-java.
@ilzag для взаимодействия используются фреймворки/библиотеки, я могу из отладчика выудить информацию, но также важно понимать какого рода/формата Вы от меня ждете, а сам текст сообщения вам ни о чем не говорит?
В теле HTTP-запроса уходит структура MessagePatchToPost, содержащая список дополнений к сообщению в Диадоке. Какое поведение ожидается, ясно, но стоит отталкиваться от того, что по факту уходит в запросе. Сообщение от сервера пока не говорит, что конкретно нужно исправить.
from diadocsdk-java.
Структура 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.
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.
@ilzag все, что возможно выудил - выручайте)
from diadocsdk-java.
ParentEntityId: "435aaab9-e32f-4443-9c9e-c962d2cb88c3"
Тут вы ссылаетесь на исходный документ. При аннулировании вы подписываете иную сущность - "Соглашение об аннулировании" (дочерняя по отношению к исходному документу, "AttachmentType": "RevocationRequest"
)
Попробуйте выполнить GetMessage или GetDocflows. В структуре ответа по типу сущности найдёте её идентификатор. C помощью GetEntityContent получите содержимое Соглашения об аннулировании - именно оно должно быть подписано. В теле патча ParentEntityId:
укажите идентификатор соглашения, когда будете отправлять подпись.
from diadocsdk-java.
@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)
- Признак завершенного документооборота HOT 1
- Сортировка входящих документов по подразделениям HOT 2
- Вопрос по API Диадока HOT 1
- Получение информации о доверенности, GetPowerOfAttorneyInfo, эксепшен boxId не передан HOT 1
- BoxId в MessagePatchToPost HOT 1
- Требование ИОПа на титул покупателя
- GetRoamingOperators HOT 1
- Заполнение Refusals в TemplatePatchToPost HOT 1
- Ошибка при вызове prevalidatePowerOfAttorney()
- Ошибка при попытке отправить неформализованный документа через PostMessage в Диадок HOT 1
- Использование MTLS HOT 1
- версия в pom и версия jar как-то не линкуются друг с другом
- Подписание и отклонение документа XmlAcceptanceCertificate HOT 4
- Проксирование вызовов через nginx с использованием diadocsdk-java
- GetDocumentById HOT 1
- Swagger
- GetNewEvents версии 7
- Ошибка при отправке по api соглашения об аннулировании
- GetNewEvents в Java Несоответствие описания и реализации
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from diadocsdk-java.