Как реализовать подключение к Яндекс Диску и скачивание файлов через API в 1С

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Интеграция 1С с облачными хранилищами, такими как Яндекс Диск, является востребованной задачей для автоматизации обмена документами, хранения архивов и передачи файлов между пользователями. В рамках данной статьи мы подробно разберем, как с нуля реализовать механизм подключения к сервису Яндекс Диск через API, настроить авторизацию и программно скачать файл из облака. Для готовой автоматической отправки файлов в облачное хранилище подойдёт обработка для регламентной выгрузки отчетов 1С на Яндекс.Диск.

Шаг 1. Регистрация приложения в Яндекс ID

Прежде чем приступать к написанию кода в 1С, нам необходимо зарегистрировать наше решение на стороне Яндекса. Без этого невозможно получить доступ к данным пользователя. Разберем этот процесс по шагам:

  1. Перейдем на портал Яндекс OAuth и создадим новое приложение.
  2. В качестве платформы выберем «Веб-сервисы».
  3. Важный момент: в правах доступа (Scopes) необходимо отметить раздел Яндекс Диска. Для нашей задачи потребуются права на чтение данных (например, yandex_360:disk_read или доступ ко всему Диску).
  4. После регистрации мы получим ID приложения и Password (Client Secret).

Проанализируем ситуацию с авторизацией: для интеграции внутри компании или для личных нужд проще всего использовать так называемый отладочный токен. Он генерируется вручную через специальную ссылку и действует длительное время (обычно около года). Это избавит нас от необходимости реализовывать сложный алгоритм обновления токена через Refresh Token в коде 1С.

Шаг 2. Настройка HTTP-соединения в 1С

Поскольку API Яндекса работает исключительно по защищенному протоколу HTTPS, нам потребуется правильно инициализировать объект HTTPСоединение. Выясним, какие параметры для этого критичны.

Для работы с SSL в 1С используется объект ЗащищенноеСоединениеOpenSSL. Без его указания попытка подключения к cloud-api.yandex.net завершится ошибкой. Рассмотрим пример создания соединения:


Сервер = "cloud-api.yandex.net";
Порт = 443;
Защита = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, Защита);

Обратим внимание, что в 1С версии 8.3 параметры таймаута (в примере 30 секунд) крайне важны, особенно при работе с большими файлами, чтобы соединение не обрывалось преждевременно.

Шаг 3. Двухэтапная логика скачивания файла

Разберем важную техническую особенность Яндекс Диска: сервис не отдает тело файла мгновенно по первому запросу. Мы должны реализовать двухэтапный алгоритм.

Этап 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, Заголовок);
Ответ = Соединение.Получить(Запрос);

Шаг 4. Обработка JSON-ответа и получение файла

После выполнения первого запроса нам нужно проанализировать ответ сервера. Если статус ответа 200, значит, всё в порядке, и мы можем извлечь ссылку на скачивание. Выясним, как это сделать с помощью встроенных средств 1С для работы с JSON.


Если Ответ.КодСостояния = 200 Тогда
    ЧтениеJSON = Новый ЧтениеJSON();
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
    ДанныеОтвета = ПрочитатьJSON(ЧтениеJSON);
    ЧтениеJSON.Закрыть();
    
    // Ссылка находится в ключе "href"
    ПрямаяСсылка = ДанныеОтвета.href;
    
    // Теперь скачиваем сам файл
    // Прямая ссылка уже содержит полный адрес, поэтому создаем новый запрос
    // ВАЖНО: Для скачивания по прямой ссылке авторизация обычно уже не требуется
    ЗапросСкачивания = Новый HTTPЗапрос(ПрямаяСсылка);
    РезультатСкачивания = Соединение.Получить(ЗапросСкачивания);
    
    Если РезультатСкачивания.КодСостояния = 200 Тогда
        РезультатСкачивания.ПолучитьТелоИзРезультата().Записать(ПутьСохраненияНаДиске);
        Сообщить("Файл успешно скачан!");
    КонецЕсли;
КонецЕсли;

Шаг 5. Работа с публичными ссылками

Ситуация меняется, если нам нужно скачать файл, на который у нас есть только публичная ссылка (например, https://disk.yandex.ru/i/example). В этом случае мы используем другой эндпоинт API: /v1/disk/public/resources/download.

Проанализируем основные моменты работы с публичными ресурсами:

Полезные советы и отладка

Для ускорения разработки и проверки своих гипотез крайне рекомендуем использовать сервис «Полигон Яндекс Диска». Это интерактивная среда от разработчиков Яндекса, где можно протестировать любой метод API прямо в браузере. Вы вставляете свой токен, выбираете метод (например, GET /resources/download), вводите путь к файлу и сразу видите сформированный HTTP-запрос и ответ сервера в формате JSON. Для отладки и отправки запросов непосредственно внутри базы можно использовать инструмент для тестирования REST API в среде 1С.

Также не забывайте обрабатывать ошибки. Основные коды, с которыми вы столкнетесь:

  1. 401 (Unauthorized) — проблема с токеном (истек, удален или неверно передан).
  2. 404 (Not Found) — файл по указанному пути не существует.
  3. 429 (Too Many Requests) — вы превысили лимиты запросов к API.
  4. 503 (Service Unavailable) — временные технические трудности на стороне Яндекса.

Используя приведенные инструкции и примеры кода, вы сможете быстро реализовать надежный механизм обмена данными между 1С и Яндекс Диском, обеспечив безопасность и высокую скорость работы вашего бизнес-решения.

← На главную