HTTP API Диадок. Загружаем в Диадок любой документ. Посредством POST и GET запросов

07.06.24

Интеграция - WEB-интеграция

Поставили задачу через HTTP API Диадок (diadoc-api.kontur.ru) отправить любой файл в Диадок и подписать его (например, служебную записку в формате пдф). Посредством POST и GET запросов.

Скачать исходный код

Наименование Файл Версия Размер
HTTP API Диадок. Загружаем в Диадок любой документ. Посредством POST и GET запросов.:
.epf 43,49Kb
124
.epf 1 43,49Kb 124 Скачать

Продолжаю разбирать API Диадок. 

Для работы с HTTP API нужно получить Ключ разработчика (ddauth_api_client_id).

1. Сначала нужно авторизоваться в API и получить token.

Про авторизацию можно прочитать в моей первой статье про API Диадок:

HTTP API Диадок. Пример авторизации и обращения к методам посредством POST и GET запросов

2. Передадим документ в диадок.

Для этого используем POST- запрос метод /V3/PostMessage

В теле POST-запроса передаем json в котором содержатся двоичные данные файла и параметры.

/V3/PostMessage можно послать внешним и внутренним получателям. За это отвечает параметр IsInternal = true.

Меня интересуют внутренние получатели организации.

Чтобы послать  нужно знать   параметры: FromBoxId, FromDepartmentId, ToDepartmentId.

FromDepartmentId и ToDepartmentId: Это отделы в организации, которые можно создать через Личный кабинет. Их ID можно узнать GET-запросом методом /GetMyOrganizations.(обработка кнопка ПолучитьСтрктуруОрганизации)

После выполнения. Метод нам вернет messageId, entityId.

(обработка кнопка ОтправитьФайл)

3. Далее подписываем документ учетной записью под которой авторизируемся (ЛогинНаСайтДиадок) и отправляем его конкретному пользователю.

Для этого используем POST- запрос метод /V3/PostMessagePatch

В тело устанавливаем json с параметрами: BoxId , messageId, entityId, TargetUserId, Type.

TargetUserId можно посмотреть тут веб-версии Диадока  в раздел "Настройки и оплата" -> "Сотрудники" -> "Скачать список сотрудников" и первый столбец в скачанном файле и будет ID пользователей.

(обработка кнопка ОтправитьНаПодпись)

После выполнения метода в веб-версии Диадока  во входящих TargetUserId будет сообщение с прикрепленным файлом.

Тестировал на платформе 1С:Предприятие 8.3 (8.3.13.1513)

 

HTTP API Диадок. Пример авторизации и обращения к методам посредством POST и GET запросов

API Диадок Контур POST запрос GET

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    16401    15    18    

15

Интеграция 1С и Битрикс 24 — модуль синхронизации для обмена задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    18645    10    15    

16

Загрузка чеков в 1С из ФНС в документы БП, УНФ, ERP, КА и УТ

Кассовые операции Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

В публикации размещены специализированные обработки для загрузки кассовых чеков в базах 1С (для локальных баз): '1С:Бухгалтерия предприятия, ред. 3.0', '1С:Управление нашей фирмой 8, ред. 3.0', '1С:Комплексная автоматизация, ред. 2.5', ‘1С:ERP Управление предприятием, ред. 2’ и ‘1С:Управление торговлей, ред. 11.5’. Вы просто сканируете QR коды с бумажных и электронных чеков c помощью мобильного приложения ФНС и чеки автоматически (без ручного ввода) загружаются в документы 'Авансовый отчет', 'Расходы предпринимателя', 'Путевой лист', 'Приходная накладная', 'Поступление (акты, накладные, УПД)', 'Приобретение товаров и услуг', 'Отчет о розничных продажах' и 'Поступление денежных документов'.

12960 руб.

19.08.2020    66243    309    73    

213

ЭДО: организация архива оригиналов первичных документов, комплексный отчет по ошибкам

Документооборот и делопроизводство (СЭД) ЭДО и ОФД Учет документов Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Мощный, единый инструмент для решения всех проблем, связанных с переходом на ЭДО. Экономит бумагу и время - организует архив оригиналов первичных документов прямо в базе 1С, в прикрепленных файлах к соответствующим документам. С помощью комплексного отчета по ошибкам в ЭДО позволяет выявить и исправить все возможные ошибки - ошибочно сопоставленные документы, не подписанные документы, подписанные, но не загруженные в 1С документы. Автоматически сопоставляет не сопоставленные между собой документы. Может работать по расписанию и присылать отчет о состоянии архива/по ошибкам на почту. Взаимодействует напрямую с сервисами Диадок/СБИС, имеет интуитивно понятный интерфейс и учитывает 3-х летний опыт 40+ клиентов.

14880 руб.

17.12.2018    44808    62    51    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. memb3r 28.01.19 15:50 Сейчас в теме
/ShelfUpload не используете?

С сайта Диадок:
Следует придерживаться следующей схемы использования структуры SignedContent. Если подписываемый документ имеет небольшой размер (не превышает 500Кб), его бинарное представление можно разместить непосредственно в структуре SignedContent в поле Content.

Если же размер документа не укладывается в эти ограничения, следует предварительно загрузить этот документ на «полку документов» при помощи серии вызовов ShelfUpload, а затем указать имя документа на «полке» в поле NameOnShelf структуры SignedContent.
2. memb3r 28.01.19 15:54 Сейчас в теме
- TargetUserId можно посмотреть тут веб-версии Диадока в раздел "Настройки и оплата" -> "Сотрудники" -> "Скачать список сотрудников" и первый столбец в скачанном файле и будет ID пользователей.


Список сотрудников с данными (с UserId) можно получить с помощью:
GET /GetEmployees
3. John_d 5534 28.01.19 16:07 Сейчас в теме
(2) Спасибо, может пригодиться.
4. Vida 15 16.05.19 08:51 Сейчас в теме
Добрый день!

Я правильно понимаю, что перед PostMessage сначала вызывается ShelfUpload?

Если вызвать ShelfUpload и указать параметр nameOnShelf=__userId__/xyz, где __userId__ - это строковый литерал, то физическое имя файла будет user_private_files/{userId}/xyz. {userId} возьмется из текущего авторизационного токена. К таким файлам можно получить доступ через ShelfDownload, указав nameOnShelf=__userId__/xyz.


Не понимаю откуда брать параметры xyz.
Смотрела в браузере эти цифры каждый раз разные, но откуда инициализируются?
5. memb3r 09.01.20 15:04 Сейчас в теме
(4)
nameOnShelf

Эти цифры вы сами "генерируете". Как написано, по этому адресу вы можете получить доступ через nameOnShelf=__userId__/"ваши уникальные цифры".
Я делал примерно так:
ИмяФайлаНаПолке = Строка(Новый УникальныйИдентификатор())
__userId__ + ИмяФайлаНаПолке 
6. memb3r 09.01.20 15:07 Сейчас в теме
(4)
nameOnShelf=__userId__/xyz

Если ещё актуально - напишите мне в личку.
7. user1364624 19.02.20 06:56 Сейчас в теме
Здравствуйте.
Идет отправка уже подписанного документа, как я понял. А как отправить не подписанный документ?
8. Somebody1 68 20.03.20 15:35 Сейчас в теме
9. mvgfirst 6 12.10.20 11:35 Сейчас в теме
А это нормально что в исходниках этой обработки вы зашили свой "ключ разработчика"?
Конкретно в методе "Получить Организацию".

И есть некоторые неоднозначности в прочтении.
В статье написано "Далее подписываем документ учетной записью...."
Что это значит?!

При отправке этого метода произойдет автоматическое подписание ранее-отправленного документа?
Или будет отправлен запрос на подпись конкретному сотруднику?

Судя по исходникам (если я правильно понял) - выполняется отправка неподписанного документа на подпись другому сотруднику.

Но Вы пишете "Далее подписываем..."
Что же на самом деле будет выполнено по кнопке "Отправить на подпись"?
10. John_d 5534 12.10.20 12:51 Сейчас в теме
(9) Спасибо.
Именно так: выполняется отправка неподписанного документа на подпись другому сотруднику.
11. gnp90 03.12.20 12:11 Сейчас в теме
Добрый день, помогите пожалуйста уже всю голову сломал.
Есть документы в черновиках, знаю DraftID и EntityId, который появится в виде УПД после черновика.

Выполняю отправку методом /SendDraft, указываю подпись и отправляю. Документ отправляется и вроде даже подписывается НО в Исходящих на УПД висит ошибка, "Ошибка подписи" с сообщением "ФИО подписанта в документе не совпадает с ФИО владельца электронной подписи" по скаченной XML видно что нет данных о подписанте, т.е. они не внеслись туда. Тех. поддержка конечно не помогает, т.к. консультация по API платная. Собственно вопрос что я делаю не так и как делать правильно чтобы черновик подписался и отправился?:)

///Подключаем COM, компонента работает с криптоключами с компа
Попытка
    comStore = Новый COMОбъект("CAdESCOM.Store");
    comCPSigner = Новый COMОбъект("CAdESCOM.CPSigner"); // Аналог "CAPICOM.Signer".
    comSignedData = Новый COMОбъект("CAdESCOM.CadesSignedData");
Исключение
     Сообщить("Не установлен КриптоПро!");
     Возврат ;
КонецПопытки;

/// Тут получаем чистую подпись ранее подключенной КОМ
comCPSigner.Certificate = comСертификат;
comSignedData.Content = СтрДляПодписи;
ПодписанныеДанные = comSignedData.SignCades(
        comCPSigner, // Signer
        1, // CadesType, CADESCOM_CADES_BES.
        Истина, // bDetached - "флаг открепленной подписи (исходное сообщение не включается в итоговый CMS-контейнер)". Тут я получил чистую подпись
        ); // EncodingType - по умолчанию CAPICOM_ENCODE_BASE64
		
ЗапросWeb = Новый HTTPЗапрос("/SendDraft");
ЗапросWeb.Заголовки.Вставить("Authorization","DiadocAuth ddauth_api_client_id="+ApiKey1+",ddauth_token="+Token);
ЗапросWeb.Заголовки.Вставить("Content-Type", "application/json");

///Собираем структуру для запроса
ЗаписьJOIN = Новый ЗаписьJSON;
ЗаписьJOIN.УстановитьСтроку();
DraftToSend = новый Структура;
DraftToSend.Вставить("BoxId",BoxId);
DraftToSend.Вставить("DraftId",draftId);
Подписи = новый Массив;
Подпись = новый Структура;
Подпись.Вставить("ParentEntityId",EntityId);
Подпись.Вставить("Signature",ПодписанныеДанные);
Подписи.Добавить(Подпись);
DraftToSend.Вставить("DocumentSignatures",Подписи);
ЗаписатьJSON(ЗаписьJOIN,DraftToSend);
СтрокаДляЗапроса = ЗаписьJOIN.Закрыть();

ЗапросWeb.УстановитьТелоИзСтроки(СтрокаДляЗапроса,КодировкаТекста.UTF8);

ОтветWeb = Соединение.ОтправитьДляОбработки(ЗапросWeb);
Если (ОтветWeb.КодСостояния <> 200) Тогда
	Сообщить("Нам вернули код: " + ОтветWeb.КодСостояния);
	Сообщить(ОтветWeb.ПолучитьТелоКакСтроку());
иначе
	к = ОтветWeb.ПолучитьТелоКакСтроку("windows-1250"); ///в ответ возращается Xml самой УПД, подписантов тютю
КонецЕсли;
Показать
12. tva120 3 08.03.21 00:44 Сейчас в теме
(11) А что у вас содержится СтрДляПодписи?
13. spiller26 14.07.21 14:29 Сейчас в теме
(11) Где вы брали документацию по запросам к api диадока, т.к. их документация на сайте ужасная.
14. vsyaschenko 16.11.21 10:27 Сейчас в теме
(11) Приветствую. Получилось ли решить эту задачу? Если да, можете поделиться кодом?
15. CagoBHuK 32 09.03.22 13:24 Сейчас в теме
(11) Вас спасет PrepareDocumentsToSign. Отказ, ОписаниеОшибки - понятно. РезультатАвторизации содержит информацию по ключу АПИ и логину с паролем, с остальными параметрами должно быть понятно по их названию.

Функция   PrepareDocumentsToSign(Отказ, ОписаниеОшибки, РезультатАвторизации, BoxId, MessageId, entityId, ДвоичныеДанныеСертификата, Руководитель) Экспорт
	PrepareDocumentsToSignRequest = Новый Структура;
	PrepareDocumentsToSignRequest.Вставить("BoxId", BoxId);
	//Заполняем структура черновика для патчинга
	DraftDocuments = Новый Массив;
	//Описываем наш черновик.
	DraftDocumentToPatch = Новый Структура;
	DocumentId = Новый Структура;
	DocumentId.Вставить("MessageId", MessageId);
	DocumentId.Вставить("EntityId", EntityId);
	DraftDocumentToPatch.Вставить("DocumentId", DocumentId);
	DraftDocumentToPatch.Вставить("ExtendedSigner", Новый Массив); 
	//ФИО руководителя
	ExtendedSignerDetails = Новый Структура;
	ExtendedSignerDetails.Вставить("Surname", Руководитель.Фамилия);
	ExtendedSignerDetails.Вставить("FirstName", Руководитель.Имя);
	ExtendedSignerDetails.Вставить("Patronymic", Руководитель.Отчество);
	ExtendedSignerDetails.Вставить("JobTitle", "Генеральный директор");
	ExtendedSignerDetails.Вставить("SignerType", 1);
	ExtendedSignerDetails.Вставить("SignerPowers", 5);
	ExtendedSignerDetails.Вставить("SignerStatus", 1);
	//Информация о подписанте
	ExtendedSigner = Новый Структура; 
	ExtendedSigner.Вставить("SignerCertificate", Base64Строка(ДвоичныеДанныеСертификата));
	ExtendedSigner.Вставить("ExtendedSignerDetails", ExtendedSignerDetails);
	DraftDocumentToPatch.ExtendedSigner.Добавить(ExtendedSigner); //Тоже необязательный
	DraftDocuments.Добавить(DraftDocumentToPatch);
	//Добавляем массив черновиков в запрос.
	PrepareDocumentsToSignRequest.Вставить("DraftDocuments", DraftDocuments);
	//Отправляем запрос.
	Тело = омСериализацияДесериализация.СериализоватьJson(PrepareDocumentsToSignRequest);
	Ответ = ВыполнитьЗапрос(Отказ, ОписаниеОшибки, "POST", "/PrepareDocumentsToSign", РезультатАвторизации, Тело);
	Возврат Ответ;
КонецФункции
Показать

Рекомендую, также, пересмотреть подход к сертификатам: используйте все-таки 1Совские объекты.
Функция   ПолучитьДействующийСертификатПоИнн(ИНН) Экспорт
	МассивСертификатов = ПолучитьСписокСертификатов(ТипМенеджераКриптографии());
	Для Каждого Сертификат ИЗ МассивСертификатов Цикл
		Если Ложь Тогда
			//Для формата
		ИначеЕсли Сертификат.Субъект.Свойство("OID1_2_643_100_4")  		И Прав(Сертификат.Субъект.OID1_2_643_100_4		, СтрДлина(ИНН)) = ИНН Тогда
			Возврат Сертификат;	
		ИначеЕсли Сертификат.Субъект.Свойство("OID1_2_643_3_131_1_1")	И Прав(Сертификат.Субъект.OID1_2_643_3_131_1_1	, СтрДлина(ИНН)) = ИНН Тогда
			Возврат Сертификат;	
		КонецЕсли;
	КонецЦикла;
КонецФункции

Функция   ПодписатьДвоичныеДанные(Сертификат, ДанныеДляПодписания, ВключатьСертификатВСоставПодписи) Экспорт
	ТипыХранилищ = Новый Массив;
	ТипыХранилищ.Добавить(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);
	ТипыХранилищ.Добавить(ТипХранилищаСертификатовКриптографии.СертификатыПолучателей);
	МенеджерКриптографии = Новый МенеджерКриптографии("", "", ТипМенеджераКриптографии(), ИспользованиеИнтерактивногоРежимаКриптографии.НеИспользовать);
	Если ВключатьСертификатВСоставПодписи Тогда
		МенеджерКриптографии.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.ВключатьПолнуюЦепочку;
	КонецЕсли;
	//Нужно перевести все в двоичные данные.
	Если Ложь Тогда
		//Для формата
	ИначеЕсли ТипЗнч(ДанныеДляПодписания) = Тип("ДвоичныеДанные") Тогда	
		ЧтоПодписываем = ДанныеДляПодписания;
	ИначеЕсли ТипЗнч(ДанныеДляПодписания) = Тип("Строка") Тогда
		ЧтоПодписываем = ДанныеДляПодписания;
	КонецЕсли;
	//Пробуем подписать
	ВозвратноеЗначение = МенеджерКриптографии.Подписать(ЧтоПодписываем, Сертификат);
	Возврат ВозвратноеЗначение;
КонецФункции
Показать
16. sanfoto 502 19.07.22 09:38 Сейчас в теме
Нормально получать инфу код ниже. Важно ""application/json""

АдресСайта = "diadoc-api.kontur.ru/GetMyOrganizations";
	HTTPЗапрос2 = Новый HTTPЗапрос;
	HTTPЗапрос2.Заголовки.Вставить("GET /GetMyOrganizations HTTP/1.1");
	HTTPЗапрос2.Заголовки.Вставить("Host", "diadoc-api.kontur.ru");
	HTTPЗапрос2.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+ПолеДокумента1);
	
	HTTPЗапрос2.Заголовки.Вставить("Accept",		"application/json");  // без этого вернется протобуфер
	HTTPЗапрос2.Заголовки.Вставить("Content-Type",	"application/json; charset=utf-8");
Показать
JetBrain; +1 Ответить
19. JetBrain 79 24.02.24 20:20 Сейчас в теме
(16) Запрос немного поправить можно, чтобы использовать только одно соединение:
        ЗапросHTTP = Новый HTTPЗапрос();	
	ЗапросHTTP.Заголовки.Вставить("Authorization", "DiadocAuth ddauth_api_client_id="+ddauth_api_client+",ddauth_token="+token);
	ЗапросHTTP.Заголовки.Вставить("Accept",        "application/json");  
        ЗапросHTTP.Заголовки.Вставить("Content-Type",  "application/json; charset=utf-8");
	ЗапросHTTP.АдресРесурса = "/GetMyOrganizations"; 
17. nikson52 11 25.08.22 09:30 Сейчас в теме
Добрый день, может быть кто-нибудь подскажет, для документов УПД какой TypeNameId использовать, что-то в документации по api не нашел, а тех поддержка пока не отвечает.
18. Arkadag 11.01.24 14:45 Сейчас в теме
Здравствуйте! При первом нажатии "Отправить файл", файл отправляется и виден на веб-странице организации.

При повторном нажатии (тот же файл, тот же получатель) на странице организации изменений не происходит.
Хотя вроде должно быть своеобразное дублирование сообщения с тем же файлом.

Как добиться того, чтобы при повторном нажатии отправки файла создавалось новое сообщение с тем же файлом?
Ситуация: файл исправили, сохранили под тем же именем и отправили заново.
20. IvanPoh 25 01.04.24 15:06 Сейчас в теме
Добрый день. А как ключ разработчика получали? ТП не понимает о чем реч. Нужна ли проплаченная подписка на api, или подписки на модуль 1с достаточно (он ведь по api работает)
21. John_d 5534 01.04.24 15:29 Сейчас в теме
(20) Добрый день! Да, нужно платить отдельно за api.
22. IvanPoh 25 01.04.24 19:32 Сейчас в теме
(21)Спасибо.
Еще можно методы апи вызывать из модуля 1с через ОсновнойМодуль.ЭДО_Транспорт_ВызватьМетодAPI
Оставьте свое сообщение