Как организовать хранение параметров соединения с API маркетплейсов и СДЭК в 1С:УНФ 3.0

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

При интеграции 1С:УНФ 3.0 с внешними сервисами, такими как маркетплейсы (Ozon, Wildberries, Яндекс Маркет) или службы доставки (СДЭК, Boxberry), разработчики неизбежно сталкиваются с проблемой: где и как хранить авторизационные данные? Ключи client_id, client_secret, API-токены и логины требуют централизованного и безопасного хранения. Рассмотрим основные способы решения этой задачи, начиная от типовых механизмов конфигурации и заканчивая программными методами на базе Библиотеки стандартных подсистем (БСП).

Вариант 1. Использование безопасного хранилища данных БСП

Если ваша конфигурация построена на современных версиях БСП (что справедливо для УНФ 3.0), наиболее правильным с точки зрения безопасности будет использование подсистемы Пароли и секреты. Этот механизм позволяет сохранять конфиденциальные данные так, чтобы они не были доступны в открытом виде через консоль запросов или стандартные интерфейсы.

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

Рассмотрим пример кода для записи параметров:


ПараметрыПодключения = Новый Структура;
ПараметрыПодключения.Вставить("ClientID", "12345");
ПараметрыПодключения.Вставить("ClientSecret", "секретный_ключ_98765");
ПараметрыПодключения.Вставить("Token", "abcde12345");

// В качестве владельца настроек обычно выступает ссылка на организацию или узел обмена
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(СсылкаНаОбъект, ПараметрыПодключения);

Для получения данных в коде модуля обмена выполним обратную операцию:


ДанныеAPI = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(СсылкаНаОбъект);
Если ДанныеAPI <> Неопределено Тогда
    КлючСессии = ДанныеAPI.Token;
КонецЕсли;

Этот способ является стандартом разработки для современных типовых решений 1С.

Вариант 2. Универсальный регистр сведений (кастомный подход)

Если вам требуется хранить настройки для большого количества различных систем (СДЭК, маркетплейсы, внутренние API), целесообразно создать собственный Регистр Сведений. Это обеспечит гибкость и наглядность для администратора системы.

Разберем оптимальную структуру такого регистра:

  1. Измерение: Организация (Тип: СправочникСсылка.Организации) — позволяет разделять ключи для разных юрлиц.
  2. Измерение: ИнтеграционнаяСистема (Тип: Строка или Перечисление) — название сервиса (например, "CDEK", "Ozon_Main").
  3. Ресурс: Параметры (Тип: ХранилищеЗначения) — здесь мы будем хранить упакованную структуру со всеми ключами.

Посмотрим на пример сохранения данных в такой регистр:


МенеджерЗаписи = РегистрыСведений.МоиНастройкиИнтеграций.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Организация = ВыбраннаяОрганизация;
МенеджерЗаписи.ИнтеграционнаяСистема = "Ozon";

Настройки = Новый Структура("ID, Secret, URL", "my_id", "my_secret", "https://api-seller.ozon.ru/");
МенеджерЗаписи.Параметры = Новый ХранилищеЗначения(Настройки);

МенеджерЗаписи.Записать();

Вариант 3. Хранение в формате JSON через дополнительные реквизиты

В ситуациях, когда доработка конфигурации (создание новых объектов) нежелательна, можно воспользоваться механизмом Дополнительных реквизитов и сведений. В УНФ этот функционал доступен практически для всех справочников.

Проанализируем этот сценарий: мы можем создать для справочника Организации один дополнительный реквизит типа "Строка" (неограниченной длины). В эту строку мы будем записывать параметры в формате JSON.

Рассмотрим пример кода для работы с JSON-конфигурацией:


// Сериализация настроек в JSON для записи в доп. реквизит
МассивНастроек = Новый Массив;
Настройка1 = Новый Структура("Service, Key", "CDEK", "key_111");
МассивНастроек.Добавить(Настройка1);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, МассивНастроек);
СтрокаДляХранения = ЗаписьJSON.Закрыть();

// Чтение из JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаДляХранения);
Результат = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Важный момент: данный способ удобен тем, что не требует изменения структуры метаданных, однако он менее защищен, так как данные хранятся в открытом текстовом виде.

Вариант 4. Использование ХранилищаОбщихНастроек

Для настроек, которые не привязаны к конкретным документам или организациям, а носят общесистемный или пользовательский характер, можно использовать встроенный объект платформы ХранилищеОбщихНастроек.

Выясним преимущества этого метода: данные хранятся в системных таблицах платформы, их легко записывать и считывать без создания лишних объектов в дереве метаданных. Пример записи:


КлючОбъекта = "ПараметрыИнтеграцииМаркетплейсов";
КлючНастроек = "Настройки_СДЭК";
ЗначениеНастроек = Новый Структура("Логин, Пароль", "user1", "pass1");

ХранилищеОбщихНастроек.Сохранить(КлючОбъекта, КлючНастроек, ЗначениеНастроек);

Вариант 5. Типовой справочник "Учетные записи маркетплейсов"

В современных релизах 1С:УНФ 3.0 уже присутствует справочник УчетныеЗаписиМаркетплейсов. Он активно используется подсистемой интеграции. Если ваша задача — работа именно с популярными площадками, в первую очередь стоит проверить состав этого справочника.

Однако, как справедливо отмечают специалисты, этот справочник жестко завязан на перечисление ВидыМаркетплейсов. Если вам нужно добавить туда СДЭК или специфический API, которого нет в списке, придется использовать расширение конфигурации, чтобы добавить новое значение в перечисление и адаптировать форму справочника.

Рекомендации по выбору метода

Подведем итоги нашего анализа и выберем оптимальный путь:

  1. Если вы разрабатываете тиражное решение или расширение для широкого круга пользователей — используйте Безопасное хранилище БСП. Это наиболее профессиональный и безопасный подход.
  2. Если вам нужно быстро организовать удобное рабочее место для администратора, где он сможет видеть список всех подключенных API (СДЭК, Ozon, WB и т.д.) — создайте собственный регистр сведений с ресурсом типа ХранилищеЗначения.
  3. Для кэширования временных токенов (например, access_token, который живет 24 часа), можно использовать регистр КэшПрограммныхИнтерфейсов, но помните, что он может очищаться системой автоматически.

Выбор конкретного метода зависит от требований к безопасности и архитектурных предпочтений, но в 1С:УНФ 3.0 наиболее сбалансированным решением будет сочетание регистра сведений и безопасного хранилища БСП для хранения паролей и секретов.

← На главную