Интеграция 1С с облачными хранилищами, такими как Яндекс Диск, является востребованной задачей для автоматизации обмена документами, хранения архивов и передачи файлов между пользователями. В рамках данной статьи мы подробно разберем, как с нуля реализовать механизм подключения к сервису Яндекс Диск через API, настроить авторизацию и программно скачать файл из облака. Для готовой автоматической отправки файлов в облачное хранилище подойдёт обработка для регламентной выгрузки отчетов 1С на Яндекс.Диск.
Прежде чем приступать к написанию кода в 1С, нам необходимо зарегистрировать наше решение на стороне Яндекса. Без этого невозможно получить доступ к данным пользователя. Разберем этот процесс по шагам:
yandex_360:disk_read или доступ ко всему Диску).ID приложения и Password (Client Secret).Проанализируем ситуацию с авторизацией: для интеграции внутри компании или для личных нужд проще всего использовать так называемый отладочный токен. Он генерируется вручную через специальную ссылку и действует длительное время (обычно около года). Это избавит нас от необходимости реализовывать сложный алгоритм обновления токена через Refresh Token в коде 1С.
Поскольку API Яндекса работает исключительно по защищенному протоколу HTTPS, нам потребуется правильно инициализировать объект HTTPСоединение. Выясним, какие параметры для этого критичны.
Для работы с SSL в 1С используется объект ЗащищенноеСоединениеOpenSSL. Без его указания попытка подключения к cloud-api.yandex.net завершится ошибкой. Рассмотрим пример создания соединения:
Сервер = "cloud-api.yandex.net";
Порт = 443;
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Защита);
Обратим внимание, что в 1С версии 8.3 параметры таймаута (в примере 30 секунд) крайне важны, особенно при работе с большими файлами, чтобы соединение не обрывалось преждевременно.
Разберем важную техническую особенность Яндекс Диска: сервис не отдает тело файла мгновенно по первому запросу. Мы должны реализовать двухэтапный алгоритм.
Этап 1: Получение ссылки на скачивание. Мы отправляем запрос к API, указывая путь к файлу на диске (например, disk:/документы/отчет.pdf). В ответ Яндекс возвращает структуру JSON, в которой находится временная прямая ссылка href.
Этап 2: Загрузка данных. Мы выполняем второй GET-запрос уже по полученному адресу href. Именно этот запрос вернет нам двоичные данные файла.
Рассмотрим, как сформировать заголовки запроса. В каждом обращении к API (кроме финального шага скачивания по прямой ссылке) мы обязаны передавать токен авторизации в заголовке Authorization.
Заголовок = Новый Соответствие();
Заголовок.Вставить("Authorization", "OAuth " + МойТокенАвторизации);
Заголовок.Вставить("Accept", "application/json");
// Путь к файлу на диске должен быть закодирован для URL
ПутьКФайлу = "disk:/MyFolder/file.txt";
ЗапросURL = "/v1/disk/resources/download?path=" + КодироватьСтроку(ПутьКФайлу, СпособКодированияСтроки.URLВКодировкеURL);
Запрос = Новый HTTPЗапрос(ЗапросURL, Заголовок);
Ответ = Соединение.Получить(Запрос);
После выполнения первого запроса нам нужно проанализировать ответ сервера. Если статус ответа 200, значит, всё в порядке, и мы можем извлечь ссылку на скачивание. Выясним, как это сделать с помощью встроенных средств 1С для работы с JSON.
Если Ответ.КодСостояния = 200 Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Ссылка находится в ключе "href"
ПрямаяСсылка = ДанныеОтвета.href;
// Теперь скачиваем сам файл
// Прямая ссылка уже содержит полный адрес, поэтому создаем новый запрос
// ВАЖНО: Для скачивания по прямой ссылке авторизация обычно уже не требуется
ЗапросСкачивания = Новый HTTPЗапрос(ПрямаяСсылка);
РезультатСкачивания = Соединение.Получить(ЗапросСкачивания);
Если РезультатСкачивания.КодСостояния = 200 Тогда
РезультатСкачивания.ПолучитьТелоИзРезультата().Записать(ПутьСохраненияНаДиске);
Сообщить("Файл успешно скачан!");
КонецЕсли;
КонецЕсли;
Ситуация меняется, если нам нужно скачать файл, на который у нас есть только публичная ссылка (например, https://disk.yandex.ru/i/example). В этом случае мы используем другой эндпоинт API: /v1/disk/public/resources/download.
Проанализируем основные моменты работы с публичными ресурсами:
public_key.Для ускорения разработки и проверки своих гипотез крайне рекомендуем использовать сервис «Полигон Яндекс Диска». Это интерактивная среда от разработчиков Яндекса, где можно протестировать любой метод API прямо в браузере. Вы вставляете свой токен, выбираете метод (например, GET /resources/download), вводите путь к файлу и сразу видите сформированный HTTP-запрос и ответ сервера в формате JSON. Для отладки и отправки запросов непосредственно внутри базы можно использовать инструмент для тестирования REST API в среде 1С.
Также не забывайте обрабатывать ошибки. Основные коды, с которыми вы столкнетесь:
Используя приведенные инструкции и примеры кода, вы сможете быстро реализовать надежный механизм обмена данными между 1С и Яндекс Диском, обеспечив безопасность и высокую скорость работы вашего бизнес-решения.