diadoc / diadocsdk-java Goto Github PK
View Code? Open in Web Editor NEWOfficial Diadoc SDK for Java
Home Page: http://api-docs.diadoc.ru/ru/latest/
License: MIT License
Official Diadoc SDK for Java
Home Page: http://api-docs.diadoc.ru/ru/latest/
License: MIT License
У нас учетная система на субд oracle 11.2.0.4.
В ней встроенная версия java: 1.5.0.51 .
Используем loadjava
Подскажите, как победить ошибки, приведенные во вложенном файле?
Сообщение об ошибке:
Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at Diadoc.Api.DiadocApi.GetResponseBytes(DiadocApi.java:314)
at Diadoc.Api.DiadocApi.PerformPostHttpRequest(DiadocApi.java:319)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:178)
at diaconn.Diaconn.main(Diaconn.java:44)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Подключено:
commons-codec-1.10.jar
commons-io-2.5.jar
commons-logging-1.0.3.jar
diadocsdk-1.36.3.jar
httpclient-java4-4.1.2.jar
httpcore-java4-4.1.2.jar
log4j-1.2.17.jar
protobuf-java-2.5.0.jar
jdk1.5.0_22
Подскажите, как победить ошибку.
Видимо нужно где-то в программе указывать настройки прокси. Где?
Если попробовать перед этим Explorer-ом ткнуться куда-нибудь в инет, он авторизуется на прокси и может пропустить пакет с этого же ip-шника, но это не всегда работает.
Добрый день. подскажите, реализует ли АПИ работу с токенами (то есть с ключами, расположенными локально у пользователя) ? или только облачная подпись? Диадок обычный реализует.
Имеем следующую ошибку:
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.isEmpty()Z
at Diadoc.Api.DiadocApi.getDiadocSdkVersion(DiadocApi.java:115)
at Diadoc.Api.DiadocApi.getUserAgentString(DiadocApi.java:107)
at Diadoc.Api.DiadocApi.createHttpClient(DiadocApi.java:99)
at Diadoc.Api.DiadocApi.(DiadocApi.java:92)
at diaconn.Diaconn.main(Diaconn.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:592)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Мы делаем отправку следующим образом (часть кода):
HTTPСоединение = Новый HTTPСоединение("diadoc-api.kontur.ru",,,,,Истина);
HTTP_Заголовок = Новый Соответствие;
HTTP_Заголовок.Вставить("host","diadoc-api.kontur.ru");
HTTP_Заголовок.Вставить("Connection","Keep-Alive");
ЗаголовокДляАвторизации = "DiadocAuth ddauth_api_client_id="+TokenApi+" ddauth_token="+TokenSession;
HTTP_Заголовок.Вставить("Authorization",ЗаголовокДляАвторизации);
ИмяРесурса = "GenerateInvoiceXml?invoiceType=Invoice";
HTTPЗапрос = Новый HTTPЗапрос(ИмяРесурса, HTTP_Заголовок);
HTTPЗапрос.УстановитьТелоИзСтроки(JSON, "UTF-8");
Естественно, ключ разработчика и токен мы вставляем корректный.
Ответ вашего сервиса: Код 400, Can't deserialize request body into type: InvoiceInfo
В аттаче- JSON
При отправке неформализованного документа из реальной организации в тестовую через Java API получаем ошибку: Recipient forbids to receive messages from blocked senders. Sender - реальная организация, по которой нет блокировок.
2 недели назад такая отправка работала.
org.apache.http.client.HttpResponseException: Access to Box [10469543-4433-4e89-9279-02ac100f1b18] is denied at Diadoc.Api.DiadocApi.GetResponseBytes(DiadocApi.java:314) at Diadoc.Api.DiadocApi.PerformGetHttpRequest(DiadocApi.java:309) at Diadoc.Api.DiadocApi.GetDocuments(DiadocApi.java:911)
Что оно обозначает (описания не нашел)?
Возможно, что мы слишком часто посылаем запросы на сервер?
Возникла проблема с сериализатором Json на платформе 1с 8.2.
Сформированный файл отправляем в сервис и получаем в ответ xml с поплывшей кодировкой.
Файл запрос и ответ во вложении.
Добрый день.
На сайте есть новость о новом формате с/ф с 01.10.2017
https://www.diadoc.ru/blog/7776
Документ должен вступить в силу к 01.10.2017, но пока еще не вступил.
http://www.consultant.ru/document/cons_doc_LAW_223158/
Что-нибудь поподробнее можно узнать? Предусмотрены ли доработки в Диадоке?
добрый день.
в данный момент в последней версии SDK отсутствует JAVA реализации для Docflow API. когда можно ожидать портирования Docflow API на JAVA?
Используем облачные подписи и после первого подписания и отправки СЧ или УПД с функцией СЧ хотим запустить автоматическое подписание служебных сообщений от оператора ЭДО. Для этого делаем пару вызовов обозначенных выше методов:
AsyncMethodResult autoSignResult = diadocApi.AutoSignReceipts(boxId, null, null);
AutosignReceiptsResult receiptsResult = diadocApi.WaitAutosignReceiptsResult(autoSignResult.getTaskId(), Integer.MAX_VALUE);
Но второй метод падает с исключением:
[error] application - Message missing required fields: NextBatchKey, SignedReceiptsCount
com.google.protobuf.InvalidProtocolBufferException: Message missing required fields: NextBatchKey, SignedReceiptsCount
at com.google.protobuf.UninitializedMessageException.asInvalidProtocolBufferException(UninitializedMessageException.java:81)
at com.google.protobuf.AbstractParser.checkMessageInitialized(AbstractParser.java:71)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:168)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:180)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:185)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:49)
at Diadoc.Api.Proto.CloudSignProtos$AutosignReceiptsResult.parseFrom(CloudSignProtos.java:2800)
at Diadoc.Api.DiadocApi.WaitAutosignReceiptsResult(DiadocApi.java:1292)
Используем Java SDK версии 1.45.1. Подскажите, как с этим быть. Пока приходится вручную подписывать все служебные документы, что приводит к получению двух подряд СМС с кодом.
Добрый день!
Не могу вызвать метод GeneratePrintFormFromAttachment из DiadocApi (полезен для генерации форм из документов-черновиков). Приходится делать публичным метод DiadocApi.ReceivePostHttpResponse и перекомпилировать каждый раз библиотеку. Можно ли изначально сделать этот метод публичным (заодно также и ReceiveGetHttpResponse)?
Здравствуйте, помогите решить проблему. Использую JRE 1.7 JCP 1.0.54.
Почитал подобные решения проблем, мне так и ни одно и не помогло. Изначально использовал JRE 1.8.0_131 JCP 2. Выдавал ошибку про GOST3410DH.
KeyStore keyStore = KeyStore.getInstance(JCP.HD_STORE_NAME);
keyStore.load(null, null);
PrivateKey privateKey = (PrivateKey)keyStore.getKey(ALIAS, PASSWORD);
X509Certificate certificate = (X509Certificate) keyStore.getCertificate(ALIAS);
System.out.println(certificate);
Отрабатывает без проблем. Сертификат выводиться.
Запускаю Api.Authenticate(certificate); Выдает ошибку:
java.security.UnrecoverableKeyException: Need password
at ru.CryptoPro.JCP.KeyStore.t.f(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.t.e(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.t.a(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.ContainerStore.engineGetKey(Unknown Source)
at ru.CryptoPro.JCP.KeyStore.JCPKeyStore.engineGetKey(Unknown Source)
at java.security.KeyStore.getKey(KeyStore.java:792)
at Diadoc.Api.CertificateHelper.getPrivateKey(CertificateHelper.java:139)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:344)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:47)
май 08, 2018 1:26:24 PM ru.CryptoPro.Crypto.Key.KeyAgreement engineInit
WARNING: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
java.security.InvalidKeyException: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineInit(Unknown Source)
at javax.crypto.KeyAgreement.implInit(KeyAgreement.java:342)
at javax.crypto.KeyAgreement.chooseProvider(KeyAgreement.java:372)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:524)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:498)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:345)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:47)
Exception in thread "main" java.security.InvalidKeyException: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineInit(Unknown Source)
at javax.crypto.KeyAgreement.implInit(KeyAgreement.java:342)
at javax.crypto.KeyAgreement.chooseProvider(KeyAgreement.java:372)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:524)
at javax.crypto.KeyAgreement.init(KeyAgreement.java:498)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:345)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:296)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:191)
at program.main(program.java:47)
В какую сторону искать решение проблемы? И что за пароль он требует? (java.security.UnrecoverableKeyException: Need password)
Сертификат рабочий, авторизация через web в ДИАДОК проходит, файлы отправляются. Пишем решение для автоматизации данного процесса.
Файлы JCP загрузили в базу Оракл (11.2) использую loadjava.
(Без файлов JCP не грузится diadocsdk).
Как теперь настроить JCP?
Существует ли возможность в API Диадок для 1С связать уже отправленные документы ?
В документации описан метод PrepareDocumentsToSign (http://api-docs.diadoc.ru/ru/latest/http/PrepareDocumentsToSign.html), пытаемся найти его в diadocsdk-1.39.jar и не находим. Где его можно найти?
Проблема состоит в следующем:
Делаем авторизацию:
X509Certificate currentCert = readCert(); diadocApi.Authenticate(currentCert);
Далее проверяем, что авторизавались:
diadocApi.IsAuthenticated() // возвращает true.
Далее вызываем получение контрагентов:
CounteragentProtos.CounteragentList contragents = diadocApi.GetCounteragents(org.getOrgId(), null, offsetKey);
Тут у нас выбрасывает исключение:
java.lang.RuntimeException at Diadoc.Api.DiadocCredentials.getPassword(DiadocCredentials.java:54) at org.apache.http.impl.auth.BasicScheme.authenticate(BasicScheme.java:166) at org.apache.http.client.protocol.RequestAuthenticationBase.authenticate(RequestAuthenticationBase.java:120) at org.apache.http.client.protocol.RequestAuthenticationBase.process(RequestAuthenticationBase.java:83) at org.apache.http.client.protocol.RequestTargetAuthentication.process(RequestTargetAuthentication.java:81) at org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:132) at org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:166) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:486) at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:884) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:107) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55) at Diadoc.Api.DiadocApi.ReceiveGetHttpResponse(DiadocApi.java:285) at Diadoc.Api.DiadocApi.PerformGetHttpRequest(DiadocApi.java:308) at Diadoc.Api.DiadocApi.GetCounteragents(DiadocApi.java:966) at mango.billing.diadoc.service.CounteragentsService.loadCounteragents(CounteragentsService.java:42)
В чем может быть проблема, какую диагностику можно провести?
Есть ли пример программы на Java -- отправка файла Накладной ТОРГ-12, Счет-фактуры в Диадок ???
Здравствуйте.
Столкнулся с такой проблемой при подписании документа.
API никаких ошибок не возвращает, а в вебе ошибка.
requestedSignaturesBuilder.setParentEntityId(currentDocument.getEntityId()); requestedSignaturesBuilder.setSignature(ByteString.copyFrom(currentDocument.getContent().toByteArray())); requestedSignatures = requestedSignaturesBuilder.build(); msgPatchToPostBuilder.addSignatures(requestedSignatures); msgPatchToPostBuilder.setBoxId(iFromBoxId); msgPatchToPostBuilder.setMessageId(currentDocument.getMessageId()); msgPatchToPost = msgPatchToPostBuilder.build(); msgPatch = diadocApi.PostMessagePatch(msgPatchToPost);
Здравствуйте. Я разрабатываю приложения для интеграции DiadocApi с ERP системой предприятия. Для проверки авторизации написал следующий код:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.logging.Level;
import java.util.logging.Logger;
import Diadoc.Api.DiadocApi;
public class Main {
private static Logger log = Logger.getLogger(Main.class.getName());
static String apiClientId="uralati-11111111-1111-1111-1111-111111111111";
static String url="https://diadoc-api.kontur.ru";
static String pathToCert="D:/MyDoc/Work/CryptoProCer/ati20170.000/ati201705.cer";
public static void main(String[] args){
try {
DiadocApi diadocApi = new DiadocApi(apiClientId,url);
X509Certificate diadocCertificate = readCertContent(pathToCert);
try {
diadocApi.Authenticate(diadocCertificate);
} catch (Exception e) {
log.log(Level.SEVERE, "Exception: ", e);
}
} catch (KeyManagementException e) {
log.log(Level.SEVERE, "Exception: ", e);
} catch (NoSuchAlgorithmException e) {
log.log(Level.SEVERE, "Exception: ", e);
}
}
private static X509Certificate readCertContent(String pathToCert)
{
InputStream certInputstream;
X509Certificate cert = null;
try {
certInputstream = new FileInputStream(pathToCert);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
cert = (X509Certificate) cf.generateCertificate(certInputstream);
} catch (FileNotFoundException | CertificateException e) {
log.log(Level.SEVERE, "Exception: ", e);
}
return cert;
}
}
Значение переменной apiClientId в листинге изменено, при тестировании переменной присваивается значение полученное по электронной почте от Диадок.
При попытке запустить приложение появляется сообщение об ошибке:
авг 01, 2017 2:42:11 PM Main main
SEVERE: Exception:
java.security.NoSuchAlgorithmException: GOST3410DH KeyFactory not available
at java.security.KeyFactory.<init>(Unknown Source)
at java.security.KeyFactory.getInstance(Unknown Source)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:276)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:232)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:189)
at Main.main(Main.java:27)
Версия ОС:
Microsoft Windows [Version 6.1.7601] x64
Версия Java:
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
Версия JCP:
jcp-2.0.39014
Версия diaidoc-sdk:
diadocsdk-1.45.1
Подскажи, пожалуйста, как я могу исправить указанную ошибку ?
У нас учетная система на субд oracle 11.2.0.4.
В ней встроенная версия java: 1.5.0.51 .
Используем loadjava
Подскажите, как победить ошибки?
errors : class org/apache/commons/logging/impl/Log4JCategoryLog
ORA-29521: не удалось найти ссылочное имя org/apache/log4j/Category
ORA-29521: не удалось найти ссылочное имя org/apache/log4j/Priority
errors : class org/apache/commons/logging/impl/Log4JLogger
ORA-29521: не удалось найти ссылочное имя org/apache/log4j/Logger
ORA-29521: не удалось найти ссылочное имя org/apache/log4j/Priority
errors : class org/apache/commons/logging/impl/Log4jFactory
ORA-29521: не удалось найти ссылочное имя org/apache/log4j/Logger
errors : class org/apache/commons/logging/impl/LogKitLogger
ORA-29521: не удалось найти ссылочное имя org/apache/log/Hierarchy
ORA-29521: не удалось найти ссылочное имя org/apache/log/Logger
The following operations failed
class org/apache/commons/logging/impl/Log4JCategoryLog: resolution
class org/apache/commons/logging/impl/Log4JLogger: resolution
class org/apache/commons/logging/impl/Log4jFactory: resolution
class org/apache/commons/logging/impl/LogKitLogger: resolution
exiting : Failures occurred during processing
Добрый день.
Прошу помочь с проблемой:
в данный момент занимаемся интеграцией с Диадоком через JAVA API.
для проверки работы создали на вашем тестовом сервере личный кабинет.
но выпущенный через сервис Крипто-про тестовый сертификат невозможно прикрепить к данному кабинету.
возможно ли заказать тестовые сертификаты на 2 юридических лица?
локальные- т.к. вариант работы с облачной подписью пока не прорабатывали.
Добрый день!
Для любого docflow значение SignatureVerificationResult(http://api-docs.diadoc.ru/ru/latest/proto/SignatureVerificationResult.html) = false.
В связи с этим не удается получить сертификат в DER-кодировке(getSignature().getVerificationResult().getCertificateStatus().getCertificateChain(0).getDerCertificate()). При этом сами документы и подписи корректны, раньше данный код работал(около 2-3 месяцев назад), ничего не меняли.
//получаем DocFlow по документу
DocflowApiProtos.GetDocflowBatchResponse getDocflows= ...;
SignedAttachment s = getDocflows.getDocuments(0).getDocflow().getDocumentAttachment();//Получаем сущность документа, она непустая
//Далее пытаемся получить сертификат из цепочки, но она пустая. Возникает исключительная ситуация
ByteString cert = s.getSignature().getVerificationResult().getCertificateStatus().getCertificateChain(0).getDerCertificate();
При этом так для любого DocFlow.
Подробности в обращении в тех.поддержку №11450966.
Нет возможности работать в последних версиях JCP.
Авторизации по логин/пароль нет.
Авторизация по сертификату не возможна из-за отказа КрипроПро поддерживать GOST3410DH
Для подтверждения попробуйте поиск в google по
Возникает исключение при попытке авторизации по сертификату: java.lang.UnsupportedOperationException
stackTrace StackTraceElement[] #5166(length=0)
suppressedExceptions Collections$UnmodifiableRandomAccessList ObjectVariable
Сервер Tomcat 7.0.69, JDK 1.7.0_21, КриптоПРО 1.0.54
Код:
import Diadoc.Api.CertificateHelper; import Diadoc.Api.DiadocApi; ... api = new DiadocApi("XXX", "https://diadoc-api.kontur.ru"); X509Certificate currentCert; try { currentCert = readCert(); api.Authenticate(currentCert);//java.lang.UnsupportedOperationException } catch (Exception ex) { LOG.error(ex); } ... private X509Certificate readCert() throws Exception { try (InputStream inStream = new FileInputStream("~/kontur.cer")) { return CertificateHelper.GetCertificateFromBytes(IOUtils.toByteArray(inStream)); } }
Подскажите пожалуйста, есть ли примеры обращения к ComDiadocApi через VBScript?
Добрый день. нашли такое описание процедуры входа (взято от сюда http://wiki.diadoc.ru/pages/viewpage.action?pageId=720902) :
по нему в зависимости от типа авторизации выдаются разные права.
возник вопрос- требования по авторизации через API- для полноценной работы обязательно использование сертификата?
или возможна полноценная работа с парой логин/пароль? (при отправке которых обратно получаем сессионный ключ. который далее и используем для идентификации передаваемого материала) или все таки сессионные ключи будут разные с разными правами в зависимости от типа авторизации?
Следующий код (его часть)
DiadocMessage_PostApiProtos.MessageToPost.Builder messageBuilder = DiadocMessage_PostApiProtos.MessageToPost.newBuilder();
messageBuilder.setFromBoxId(BOX_ID);
messageBuilder.setToBoxId(RECIPIENT_BOX_ID);
messageBuilder.setIsDraft(true);
DiadocMessage_PostApiProtos.XmlDocumentAttachment.Builder attachmentBuilder = messageBuilder.addInvoicesBuilder(); //какой метод нужно вызывать для УПД???
DiadocMessage_PostApiProtos.SignedContent.Builder signedContentBuilder = attachmentBuilder.getSignedContentBuilder();
File file=null;
FileInputStream fileStream=new FileInputStream(file=new File("C:\oraSOA\mywork\DiadocWrapperApp\DiadocWrapperApp\DiadocWrapperPrj\src\diawrapperpkg\510079.xml"));
byte[] content= new byte[(int)file.length()];
fileStream.read(content,0,content.length);
signedContentBuilder.setContent(ByteString.copyFrom(content));
DiadocMessage_PostApiProtos.MessageToPost messageToPost = messageBuilder.build();
DiadocMessage_GetApiProtos.Message postedMessage = api2.PostMessage(messageToPost);
String postedDraftId = postedMessage.getMessageId();
assertNotNull(postedDraftId);
выдает ошибку:
Exception in thread "main" org.apache.http.client.HttpResponseException: Невозможно отправить документ с функцией ДОП/СЧФДОП как счёт-фактуру. Измените функцию документа или выберите другой тип документа
at Diadoc.Api.DiadocApi.GetResponseBytes(DiadocApi.java:295)
at Diadoc.Api.DiadocApi.PerformPostHttpRequest(DiadocApi.java:301)
at Diadoc.Api.DiadocApi.PostMessage(DiadocApi.java:176)
at diawrapperpkg.diawrapper.main(diawrapper.java:135)
Picked up _JAVA_OPTIONS: -Xmx512M
Process exited with exit code 1.
Кажется, что надо как-то иначе отправлять УПД, не через addInvoicesBuilder(), возможно, еще где-то иные методы надо использоваться?
При попытке загрузить в оракл diadocsdk-1.36.2.jar
вылезают ошибки, приведенные во вложенном файле.
Добрый день.
возник еще ряд вопрос по интеграции:
1. требования по идентификация получателя: ИНН с документа достаточно или требуется ID
его ящика? если да. то как через API его можно получить (или каким вообще способом их можно
получать)?
2. Для передачи документа в ящик контрагента достаточно ли его уникальной идентификации?
или пара ЮЛ должна числиться друг у друга в контрагентах? если это не требуется. то как
реализуется защита от спама? ну. то есть если кто-либо заводит у вас ящик и начинает рассылать
вообще левым ЮЛ сч/ф, вообще не являясь их контрагентом? понятно. что получатель может не
принять документ и отменить его. но вообще такая ситуация как то оговаривается?
3. если у ЮЛ несколько ящиков, на каждый свой логин-пароль (и. соответственно. сессионный
ключ)?
4. в Диадоке есть система приглашений- ими регулируется партнерство ЮЛ. возможно ли
реализовать автоматически через API это? чтобы пользователям не приходилось заходить в Диадок
для подтверждения партнеров. возможно ли нормальная работа по приему-передаче документов
без предварительной настройки/загрузки партнеров?
Добрый день!
Подскажите, как прикрепить стороннюю подпись к существующему документу?
final DiadocApi api = new DiadocApi("", "");
api.Authenticate("", "");
final DocumentsFilter documentsFilter = new DocumentsFilter();
documentsFilter.boxId = "";
documentsFilter.filterCategory = "Invoice.Inbound";
documentsFilter.toDocumentDate = "01.09.2016";
final List<DocumentProtos.Document> list = api.GetDocuments(documentsFilter).getDocumentsList();
for (final DocumentProtos.Document doc : list) {
final List<byte[]> signs = outerService.getSigns(doc.getEntityId());
// тут для каждого документа получаем несколько подписей в виде CMS SignedData в DER из внешнего сервиса,
// в результате имеется список из байтмассивов, который нужно прикрепить к документу в диадоке
// как это сделать?
}
Добрый день!
Не могу вызвать метод GeneratePrintFormFromAttachment из DiadocApi (полезен для генерации форм из документов-черновиков). Приходится делать публичным метод DiadocApi.ReceivePostHttpResponse и перекомпилировать каждый раз библиотеку. Можно ли изначально сделать этот метод публичным (заодно также и ReceiveGetHttpResponse)?
Добрый день!
Пытаемся приконнектиться к диадоку, выдается сообщение:
22.06.2016 12:52:34 ru.CryptoPro.JCP.tools.Starter check
INFO: JCP loaded.
22.06.2016 12:52:34 ru.CryptoPro.Crypto.Key.KeyAgreement engineInit
WARNING: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
java.security.InvalidKeyException: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineInit(Unknown Source)
at javax.crypto.KeyAgreement.a(DashoA13_..)
at javax.crypto.KeyAgreement.a(DashoA13_..)
at javax.crypto.KeyAgreement.init(DashoA13_..)
at javax.crypto.KeyAgreement.init(DashoA13_..)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:263)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:214)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:179)
at diaconn.Diaconn.main(Diaconn.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Exception in thread "main" java.security.InvalidKeyException: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана
at ru.CryptoPro.Crypto.Key.KeyAgreement.engineInit(Unknown Source)
at javax.crypto.KeyAgreement.a(DashoA13_..)
at javax.crypto.KeyAgreement.a(DashoA13_..)
at javax.crypto.KeyAgreement.init(DashoA13_..)
at javax.crypto.KeyAgreement.init(DashoA13_..)
at Diadoc.Api.DiadocApi.decryptToken(DiadocApi.java:263)
at Diadoc.Api.DiadocApi.getAuthToken(DiadocApi.java:214)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:179)
at diaconn.Diaconn.main(Diaconn.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Как нам победить эту проблему?
Текст программы :
/*
import Diadoc.Api.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
/*
@author Zaikin
*/
public class Diaconn {
/**
public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException, IOException, CertificateException, Exception {
// TODO code application logic here
DiadocApi api = new Diadoc.Api.DiadocApi(DefaultClientId, DefaultApiUrl);
InputStream inStream = null;
inStream = new FileInputStream(DefaultPathToCert);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(inStream);
api.Authenticate(cert);
//System.out.println ("Hello World");
}
}
Подключенные библиотеки во вложенном файле.
lib.txt
У нас учетная система на субд oracle 11.2.0.4.
В ней встроенная версия java: 1.5.0.51 .
Можно ли при таких условиях установить diadocsdk-1.36.2.jar ?
Уже при установке JCP на оракл (библиотек из пакета jcp.1.0.54) не все устанавливается.
Если УПД указать функцию (тип) СЧФ, форма все равно визуализируется как счет-фактура+передаточный акт (1).
Можно ли при отправке УПД в формате СЧФ указать, чтобы она визуализировалась как счет-фактура?
На диаграмме http://api-docs.diadoc.ru/ru/latest/_images/scheme-04-utd-invoice-docflow.png документооборот начинается с документа UTD.
Как я понял, в diadocsdk.jar ему соответствует класс UniversalTransferDocumentInfo. Однако, нет методов для добавления строк товаров. Имеются только следующие методы:
setFunction,
setCurrencyCode,
setGrounds,
setGroundBytes,
setOriginalDocumentDateAndNumber,
setTotal,
setTotalBytes,
setVat,
setVatBytes
В тоже время у класса UniversalTransferDocumentSellerTitleInfo есть метод setInvoiceTable.
В документации в справочнике структур данных http://api-docs.diadoc.ru/ru/latest/protos.html отсутствует структура UniversalTransferDocumentInfo»
в SDK версии 1.41.1 нашли метод для генерации архива с документооборотом, но чтобы его скачать нужен метод ShelfDownload, а вот его нет в sdk.
Можно ли добавить ShelfDownload в SDK?
Как победить следующую ошибку:
Exception in thread "main" java.lang.NoClassDefFoundError
at javax.crypto.Cipher.getInstance(DashoA12275)
at com.sun.net.ssl.internal.ssl.JsseJce.getCipher(JsseJce.java:90)
at com.sun.net.ssl.internal.ssl.RSACipher.(RSACipher.java:35)
at com.sun.net.ssl.internal.ssl.RSACipher.getInstance(RSACipher.java:69)
at com.sun.net.ssl.internal.ssl.PreMasterSecret.(PreMasterSecret.java:82)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:515)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:160)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:877)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1089)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1116)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.getSession(SSLSocketImpl.java:1823)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:91)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:150)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:575)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at Diadoc.Api.DiadocApi.ReceivePostHttpResponse(DiadocApi.java:298)
at Diadoc.Api.DiadocApi.PerformPostHttpRequest(DiadocApi.java:318)
at Diadoc.Api.DiadocApi.Authenticate(DiadocApi.java:178)
at diaconn.Diaconn.main(Diaconn.java:40)
Добрый день.
Работаем с вашим API через ActiveX. Настраивали на множестве компьютеров, но на Win10 и IE11 выходит ошибка при обращении к объектам ActiveX:
Инструкция по установке следующая (опробована на множестве компьютерах):
Сохранить каталог DiadocSDK на локальном диске, открыть его и перейти в подкаталог DiadocAPI\bin
На рабочем месте пользователя от имени администратора выполнить Diadoc_Reg.bat.
На рабочем месте пользователя от имени администратора выполнить Diadoc_Reg64.bat.
На рабочем месте пользователя от имени администратора выполнить Diadoc_Unblock.bat.
На рабочем месте пользователя от имени администратора запустить файл Activate.reg.
Откройте «Свойства обозревателя» интернет-браузера Internet Explorer
Также проверяем настройку «Доступ к источникам данных за пределами домена» в свойствах обозревателя, она должна иметь значение «Включить». Кроме этого, включается все, что можно, в свойствах обозревателя IE в плане ActiveX.
На тестовой странице (привел ниже) все достаточно просто, создается основа страницы, затем идет блок try catch. В нем весь процесс обрывается на строке:
var crypt = new ActiveXObject("Diadoc.Api.ComCryptApi");
Хотя вроде бы все, что можно, мы уже настроили и перепроверили десяток раз..
Посмотрите, пожалуйста, может быть, вы сталкивались с этим.
Код нашей страницы прилагаю ниже (вырезал лишнее).
С помощью UniversalTransferDocumentInfoProtos.UniversalTransferDocumentSellerTitleInfo.Builder был создан документ УПД (заполнены все нужные поля).
Как правильно добавить этот документ для отправки через MessageToPost
DiadocMessage_PostApiProtos.MessageToPost.Builder messBuilder = DiadocMessage_PostApiProtos.MessageToPost.newBuilder();
messBuilder.setFromBoxId(boxFromId);
messBuilder.setToBoxId(boxIdTo);
messBuilder.setIsDraft(true);
С помощью метода messBuilder.addUniversalTransferDocumentSellerTitles
добавить объект UniversalTransferDocumentInfoProtos.UniversalTransferDocumentSellerTitleInfo.Builder не получается.
P.S. Проблем с добавлением неформализованного документа нет:
DiadocMessage_PostApiProtos.NonformalizedAttachment.Builder attBuilder = DiadocMessage_PostApiProtos.NonformalizedAttachment.newBuilder();
...
messBuilder.addNonformalizedDocuments(attBuilder.build());
Примеров для javasdk не нашел.
Добрый день.
подскажите по следующему вопросу:
после того, как автор подписал документ и отправил его своему контрагенту, по всем описанным схемам можно сделать вывод, что у получателя нет никаких вариаций действий- более того, принятие документа и подписание/отправка всех квитанций (уведомлений) происходит без его непосредственного участия. то есть схема работы жестко зашита? а если получателя не устраивает полученный документ, он должен после подписания/отправки всех квитанций (уведомлений) может запустить новый функционал- запрос уточнения? то есть отправленную в наш адрес сч/ф мы получаем и принимаем у себя в любом случае. а если с ней проблемы и/или мы не хотим принимать вообще ее- необходимо запрашивать уточнение? нет возможности в момент получения оценить ее. и если необходимо, сразу отменить?
добрый день.
прошу прояснить следующий вопрос:
сейчас занимаемся интеграцией нашего облачного сервиса с Диадок через Java API.
Реализация примерно следующая:
У пользователя локально установлен CryptoPro plugin в браузере и CSP с токенами на компьютере.
из своего облака мы выгружаем файл в локальное хранилище. обращается к плагину и подписываем документ. обратно загружаем в облако уже подписанный документ.
после этого, авторизовавшись в Диадоке, получаем сессионный ключ.
используя этот ключ. посылаем в Диадок подписанные документы. это в теории.
на практике столкнулись с проблемой- работа модуля. построенного на методах, описанных в вашем АПИ. требует наличия библиотек JСP- то есть установленного у нас на сервере JSP модуля от КриптоПро- без этого нет возможности и собрать модуль. возникает вопрос- для чего требуется библиотека JСP, если работа с криптографией осуществляется локально у пользователя?
Возможно ли работать напрямую через HTTP-API без JCP?
Где можно задать proxy для установки соединения с Diadoc, используя библиотеку diadocsdk-java?
Здравствуйте.
Я разрабатываю интеграции ERP системы с Диадок. Для этого хочу использовать diadocsdk-java.
Однако, код, аналогичный указанному в заголовке темы #62, выдает ошибку, указанную в этой теме: java.security.NoSuchAlgorithmException: GOST3410DH KeyFactory not available.
Я использую diadocsdk версии 1.51.5.
Как я понял из обсуждения в теме, диадок использует константу GOST3410DH, которая отсутствует в JCP 2.0.39014 (последняя лицензированная версия).
В своем приложении я не могу использовать более ранние версии JCP, так как они требуют java < 1.8, а ERP требует java 1.8.
У меня два вопроса:
Подскажите список библиотек (с конкретными версиями jar файлов),
чтобы работал диадок на яве 5.
При отправке счета-фактуры используется структура MessageToPost, в которую нужно положить следующие атрибуты:
значение атрибута FromBoxId,
значение атрибута ToBoxId
для передачи XML-файла СФ/ИСФ/КСФ/ИКСФ нужно использовать атрибут Invoices, описываемый структурой XmlDocumentAttachment
внутри структуры XmlDocumentAttachment находится вложенная структура SignedContent,
сам XML-файл нужно передать в атрибут Content, подпись продавца в атрибут Signature.
По описанию API в структуре данных SignedContent есть параметр Signature - ЭЦП. Если ЭЦП присутствует, то она должна быть представлена в формате CMS SignedData в DER-кодировке.
Вопрос:
Есть ли пример преобразования ЭЦП в формат CMS SignedData в DER-кодировке? Какой параметр нужно брать из данных сертификата для преобразования в бинарный массив? И что после преобразования нужно подставлять в структуру?
В общем, буду благодарна если вы предоставите наглядный пример кода.
Заранее спасибо.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.