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

07.06.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
HTTP API Диадок. Загружаем в Диадок любой документ. Посредством POST и GET запросов.:
.epf 43,49Kb
129
129
2 SM
Скачать Купить за 2 150 руб.

Продолжаю разбирать 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

См. также

SALE! 50%

Кассовые операции Файловый обмен (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 9720 руб.

19.08.2020    66857    320    73    

215

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

Подсистема интеграции Amo CRM с 1С: технические требования, порядок работы, возможности, доработки и обновления. Бесплатный период техподдержки - 1 месяц.

60000 руб.

07.05.2019    32008    62    41    

23

Регламентированный учет и отчетность ЭДО и ОФД Бухгалтер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Пищевая промышленность Россия Бухгалтерский учет Налоговый учет Акцизы Платные (руб)

Расширение для Бухгалтерии предприятия 3.0 «Акцизы на сахаросодержащие напитки» предназначено для автоматизированного учета сумм акцизов по реализованным сахаросодержащим напиткам с 01 июля 2023 года. Позволяет выделить суммы акциза в первичных документах («Реализация товаров и услуг», «Корректировка реализации»), сформировать проводки по начислению акциза, а также сформировать и отправить корректные документы по ЭДО.

14400 руб.

16.10.2023    1551    14    0    

13

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    13451    39    8    

15

Регламентированный учет и отчетность Обмен с ГосИС ЭДО и ОФД Бухгалтер Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Работаете по контрактной схеме, сталкивались с проблемой, что в контракте жестко указаны наименование, цена, единица измерения товара. И не все готовы создавать новую номенклатуру под каждый контракт или менять наименование и единицу измерения для уже имеющейся. Тем более, бывает так, что контракт - это формальность. Контракт не описывает жесткие условия поставки, нужно соблюсти правильность в предоставлении документов. Данное решение позволит вам оперировать своей номенклатурой при оформлении реализаций по государственному контракту в УТ 11.5 и КА 2.5.11, в то же время выводить на печать документы, соответствующие данным контракта. Реализована выгрузка для сайта госзакупок (ЕИС) по 44-ФЗ.

40800 руб.

19.12.2022    10943    24    19    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 5767 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 69 20.03.20 15:35 Сейчас в теме
9. mvgfirst 6 12.10.20 11:35 Сейчас в теме
А это нормально что в исходниках этой обработки вы зашили свой "ключ разработчика"?
Конкретно в методе "Получить Организацию".

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

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

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

Но Вы пишете "Далее подписываем..."
Что же на самом деле будет выполнено по кнопке "Отправить на подпись"?
10. John_d 5767 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 5767 01.04.24 15:29 Сейчас в теме
(20) Добрый день! Да, нужно платить отдельно за api.
22. IvanPoh 25 01.04.24 19:32 Сейчас в теме
(21)Спасибо.
Еще можно методы апи вызывать из модуля 1с через ОсновнойМодуль.ЭДО_Транспорт_ВызватьМетодAPI
Оставьте свое сообщение