Giter Site home page Giter Site logo

diadoc / diadocsdk-java Goto Github PK

View Code? Open in Web Editor NEW
16.0 16.0 47.0 65.25 MB

Official Diadoc SDK for Java

Home Page: http://api-docs.diadoc.ru/ru/latest/

License: MIT License

C# 2.91% PowerShell 2.33% Shell 0.66% Batchfile 0.04% Java 94.07%
diadocsdk-java java

diadocsdk-java's People

Contributors

alogicman avatar anatolidubko avatar asakyraz avatar asvyazin avatar atytsky avatar capucinimo avatar dbartaev avatar diadoc-admin avatar dmokhnatkin avatar drunkybard avatar einfoman avatar elybelyaev avatar etwirt avatar flosca avatar gangstatracer avatar halex2005 avatar ichaynikov avatar kiryakovskb avatar ltitbe avatar mkayukov avatar mollycuko avatar rispele avatar rusb avatar shinetear avatar skamaev avatar suvorovnm avatar thisisbuddyrich avatar tkirill avatar vladyslav-vasyliev avatar zharkovstas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

diadocsdk-java's Issues

Exception in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file

Сообщение об ошибке:
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

Подскажите, как победить ошибку.

Аутентификация не происходит на ironport

Видимо нужно где-то в программе указывать настройки прокси. Где?
Если попробовать перед этим Explorer-ом ткнуться куда-нибудь в инет, он авторизуется на прокси и может пропустить пакет с этого же ip-шника, но это не всегда работает.

Работа с Токенами

Добрый день. подскажите, реализует ли АПИ работу с токенами (то есть с ключами, расположенными локально у пользователя) ? или только облачная подпись? Диадок обычный реализует.

Exception in thread "main" java.lang.NoSuchMethodError: java.lang.String.isEmpty()Z

Имеем следующую ошибку:
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)

Bad request

Мы делаем отправку следующим образом (часть кода):

            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

example.txt

Ошибка при отправке Recipient forbids to receive messages

При отправке неформализованного документа из реальной организации в тестовую через Java API получаем ошибку: Recipient forbids to receive messages from blocked senders. Sender - реальная организация, по которой нет блокировок.
2 недели назад такая отправка работала.

Столкнулись с еще одним исключением при работе с sdk.

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)

Что оно обозначает (описания не нашел)?
Возможно, что мы слишком часто посылаем запросы на сервер?

Docflow API

добрый день.
в данный момент в последней версии SDK отсутствует JAVA реализации для Docflow API. когда можно ожидать портирования Docflow API на JAVA?

Исключение при работе с парой методов AutoSignReceipts/WaitAutosignReceiptsResult

Используем облачные подписи и после первого подписания и отправки СЧ или УПД с функцией СЧ хотим запустить автоматическое подписание служебных сообщений от оператора ЭДО. Для этого делаем пару вызовов обозначенных выше методов:

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

Добрый день!
Не могу вызвать метод 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 для Оракла

Файлы JCP загрузили в базу Оракл (11.2) использую loadjava.
(Без файлов JCP не грузится diadocsdk).
Как теперь настроить JCP?

регулярно получаем исключение при рабое с API. java.lang.RuntimeException at Diadoc.Api.DiadocCredentials.getPassword(DiadocCredentials.java:54)

Проблема состоит в следующем:
Делаем авторизацию:

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

Есть ли пример программы на 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);

Ошибка при авторизации по ключу java.security.NoSuchAlgorithmException: GOST3410DH KeyFactory not available

Здравствуйте. Я разрабатываю приложения для интеграции 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
Подскажи, пожалуйста, как я могу исправить указанную ошибку ?

проблема с commons-logging-1.0.3.jar

У нас учетная система на субд 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 юридических лица?
локальные- т.к. вариант работы с облачной подписью пока не прорабатывали.

Вопрос по SignatureVerificationResult

Добрый день!

Для любого 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.

GOST3410DH был удален при переходе к ГОСТ Р 34.10-2012 (JCP 2.0)

Нет возможности работать в последних версиях JCP.
Авторизации по логин/пароль нет.
Авторизация по сертификату не возможна из-за отказа КрипроПро поддерживать GOST3410DH
Для подтверждения попробуйте поиск в google по $subj$

UnsupportedOperationException при вызове api.Authenticate(X509Certificate)

Возникает исключение при попытке авторизации по сертификату: 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));
        }
    }

VBScript

Подскажите пожалуйста, есть ли примеры обращения к ComDiadocApi через VBScript?

Авторизация через API

Добрый день. нашли такое описание процедуры входа (взято от сюда http://wiki.diadoc.ru/pages/viewpage.action?pageId=720902) :
по нему в зависимости от типа авторизации выдаются разные права.
возник вопрос- требования по авторизации через API- для полноценной работы обязательно использование сертификата?
или возможна полноценная работа с парой логин/пароль? (при отправке которых обратно получаем сессионный ключ. который далее и используем для идентификации передаваемого материала) или все таки сессионные ключи будут разные с разными правами в зависимости от типа авторизации?

Как корректно отправить УПД посредством diadocsdk-java

Следующий код (его часть)

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(), возможно, еще где-то иные методы надо использоваться?

Работа с контрагентами через API

Добрый день.
возник еще ряд вопрос по интеграции:

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 из внешнего сервиса, 
        // в результате имеется список из байтмассивов, который нужно прикрепить к документу в диадоке
        // как это сделать?
    }

Открытие методов DiadocApi.ReceivePostHttpResponse и DiadocApi.ReceiveGetHttpResponse

Добрый день!

Не могу вызвать метод GeneratePrintFormFromAttachment из DiadocApi (полезен для генерации форм из документов-черновиков). Приходится делать публичным метод DiadocApi.ReceivePostHttpResponse и перекомпилировать каждый раз библиотеку. Можно ли изначально сделать этот метод публичным (заодно также и ReceiveGetHttpResponse)?

WARNING: Параметры ключа не соответствуют алгоримам подписи ГОСТ и обмена Диффи-Хелмана

Добрый день!

Пытаемся приконнектиться к диадоку, выдается сообщение:
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)

Как нам победить эту проблему?
Текст программы :
/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    */
    package diaconn;

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 {

    /**

    • @param args the command line arguments
      */
      // URL веб-сервиса Диадок
      private static final String DefaultApiUrl = "https://diadoc-api.kontur.ru";
      // идентификатор клиента
      private static final String DefaultClientId = "nikohim2016-1bb2ef3f-b9f5-4240-81dc-1009dcf864f4";
      //
      private static final String DefaultPathToCert = "D:\nikochem.c";

    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

lib.txt

установка на oracle 11.2.0.4

У нас учетная система на субд 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»

Добавить метод ShelfDownload

в SDK версии 1.41.1 нашли метод для генерации архива с документооборотом, но чтобы его скачать нужен метод ShelfDownload, а вот его нет в sdk.
Можно ли добавить ShelfDownload в SDK?

Получение истории по документам

Подскажите, как с помощью java sdk, зная
boxId отправителя
messageId отправки,
получить цепочку действий, которые происходили с комплектом документов (история).
diadoc

java.lang.NoClassDefFoundError at javax.crypto.Cipher.getInstance(DashoA12275)

Как победить следующую ошибку:

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)

Ошибка при обращении к элементам ActiveX из Win10

Добрый день.

Работаем с вашим API через ActiveX. Настраивали на множестве компьютеров, но на Win10 и IE11 выходит ошибка при обращении к объектам ActiveX:

gedckighlpndnlkj

Инструкция по установке следующая (опробована на множестве компьютерах):

  1.   Сохранить каталог DiadocSDK на локальном диске, открыть его и перейти в подкаталог DiadocAPI\bin
    
  2.   На рабочем месте пользователя от имени администратора выполнить Diadoc_Reg.bat.
    
  3.   На рабочем месте пользователя от имени администратора выполнить Diadoc_Reg64.bat.
    
  4.   На рабочем месте пользователя от имени администратора выполнить Diadoc_Unblock.bat.
    
  5.   На рабочем месте пользователя от имени администратора запустить файл Activate.reg.
    
  6.   Откройте «Свойства обозревателя» интернет-браузера Internet Explorer
    

Также проверяем настройку «Доступ к источникам данных за пределами домена» в свойствах обозревателя, она должна иметь значение «Включить». Кроме этого, включается все, что можно, в свойствах обозревателя IE в плане ActiveX.

На тестовой странице (привел ниже) все достаточно просто, создается основа страницы, затем идет блок try catch. В нем весь процесс обрывается на строке:

var crypt = new ActiveXObject("Diadoc.Api.ComCryptApi");

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

TestDiadoc.txt

Отправка УПД. Как добавить в MessageToPost

С помощью 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 не нашел.

Вариации действий контрагента при получении счф

Добрый день.
подскажите по следующему вопросу:
после того, как автор подписал документ и отправил его своему контрагенту, по всем описанным схемам можно сделать вывод, что у получателя нет никаких вариаций действий- более того, принятие документа и подписание/отправка всех квитанций (уведомлений) происходит без его непосредственного участия. то есть схема работы жестко зашита? а если получателя не устраивает полученный документ, он должен после подписания/отправки всех квитанций (уведомлений) может запустить новый функционал- запрос уточнения? то есть отправленную в наш адрес сч/ф мы получаем и принимаем у себя в любом случае. а если с ней проблемы и/или мы не хотим принимать вообще ее- необходимо запрашивать уточнение? нет возможности в момент получения оценить ее. и если необходимо, сразу отменить?

необходимость использования библиотек JCP

добрый день.
прошу прояснить следующий вопрос:
сейчас занимаемся интеграцией нашего облачного сервиса с Диадок через Java API.
Реализация примерно следующая:
У пользователя локально установлен CryptoPro plugin в браузере и CSP с токенами на компьютере.
из своего облака мы выгружаем файл в локальное хранилище. обращается к плагину и подписываем документ. обратно загружаем в облако уже подписанный документ.
после этого, авторизовавшись в Диадоке, получаем сессионный ключ.
используя этот ключ. посылаем в Диадок подписанные документы. это в теории.
на практике столкнулись с проблемой- работа модуля. построенного на методах, описанных в вашем АПИ. требует наличия библиотек JСP- то есть установленного у нас на сервере JSP модуля от КриптоПро- без этого нет возможности и собрать модуль. возникает вопрос- для чего требуется библиотека JСP, если работа с криптографией осуществляется локально у пользователя?

Возможно ли работать напрямую через HTTP-API без JCP?

Ошибка при авторизации по ключу, GOST3410DH KeyFactory not available

Здравствуйте.
Я разрабатываю интеграции 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.
У меня два вопроса:

  1. Возможно ли на текущий момент использовать diadocsdk с JCP 2.0.39014?
  2. Когда можно ожидать обновления diadocsdk?

Структура Signature

При отправке счета-фактуры используется структура MessageToPost, в которую нужно положить следующие атрибуты:
значение атрибута FromBoxId,
значение атрибута ToBoxId
для передачи XML-файла СФ/ИСФ/КСФ/ИКСФ нужно использовать атрибут Invoices, описываемый структурой XmlDocumentAttachment
внутри структуры XmlDocumentAttachment находится вложенная структура SignedContent,
сам XML-файл нужно передать в атрибут Content, подпись продавца в атрибут Signature.
По описанию API в структуре данных SignedContent есть параметр Signature - ЭЦП. Если ЭЦП присутствует, то она должна быть представлена в формате CMS SignedData в DER-кодировке.
Вопрос:
Есть ли пример преобразования ЭЦП в формат CMS SignedData в DER-кодировке? Какой параметр нужно брать из данных сертификата для преобразования в бинарный массив? И что после преобразования нужно подставлять в структуру?
В общем, буду благодарна если вы предоставите наглядный пример кода.
Заранее спасибо.

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.