Интеграция устаревших систем, таких как 1С:Предприятие 7.7, с современными веб-сервисами через API — задача нетривиальная. Основные сложности заключаются в отсутствии встроенной поддержки протоколов шифрования TLS 1.2 и 1.3, а также в отсутствии штатных средств для парсинга формата JSON. В этой статье мы подробно разберем, как обойти эти ограничения и настроить автоматическое получение ФИО соискателей, откликнувшихся на вакансии через API HeadHunter (HH.ru).
Первое, с чем мы сталкиваемся при попытке отправить запрос к api.hh.ru из «клюшек» — это ошибка защищенного соединения. Современные API требуют использования актуальных протоколов TLS, которые не поддерживаются стандартным объектом WinHttp.WinHttpRequest.5.1 на старых операционных системах (Windows XP, Server 2003). Даже на новых ОС 1С 7.7 может иметь проблемы с инициализацией этих протоколов.
Разберем наиболее надежное решение — использование внешней компоненты curl1c. Как отмечают эксперты, это решение продержится значительно дольше, так как внутри него зашиты все необходимые библиотеки для работы с TLS 1.2 и 1.3. Это позволяет выполнять запросы даже в среде wine под Linux или на устаревших версиях Windows.
Преимущества использования curl1c:
curl.exe.Проанализируем требования HeadHunter к безопасности. API HH использует протокол OAuth 2.0. Для работы вам необходимо:
client_id и client_secret.access_token.Важный нюанс: обязательным требованием API является заголовок User-Agent. В нем нужно указать название вашей программы и контактный email. Без этого заголовка сервер будет возвращать ошибку 403.
Рассмотрим пример формирования заголовков в коде 1С 7.7:
// Пример формирования строки заголовков
Заголовки = "Authorization: Bearer " + СокрЛП(АксесТокен) + РазделительСтрок;
Заголовки = Заголовки + "User-Agent: My1C77Integration/1.0 (myemail@domain.com)";
Выясним, как получить данные соискателей. В терминологии HH работа с откликами называется «переговорами» (negotiations). Нам потребуется метод GET /negotiations. Чтобы минимизировать объем данных, мы можем фильтровать отклики по конкретной вакансии, используя параметр vacancy_id.
Рассмотрим алгоритм выполнения запроса:
https://api.hh.ru/negotiations?vacancy_id=123456.curl1c.Проанализируем структуру ответа. API возвращает вложенный объект, где ФИО соискателя находится внутри объекта resume. Помните, что доступ к контактам может быть ограничен, если вакансия не оплачена или отклик еще не просмотрен.
Поскольку в 1С 7.7 нет встроенного парсера JSON, мы воспользуемся мощным системным средством — MSScriptControl.ScriptControl. Это позволит нам выполнить JavaScript-код прямо внутри 1С и преобразовать JSON-строку в объект, с которым легко работать.
Разберем по шагам функцию парсинга:
// Создаем объект скрипта
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "JScript";
// JSONСтрока - это то, что вернул нам сервер
Скрипт.AddCode("function getFio(jsonString) {
| var obj = eval('(' + jsonString + ')');
| var names = [];
| for (var i = 0; i < obj.items.length; i++) {
| var candidate = obj.items[i].resume;
| names.push(candidate.last_name + ' ' + candidate.first_name);
| }
| return names.join(';');
|}");
// Вызываем функцию и получаем строку с именами через точку с запятой
СписокФИО = Скрипт.Run("getFio", ОтветОтСервера);
Посмотрим на ситуацию, когда откликов много. API HeadHunter отдает данные страницами (обычно по 20 записей). Чтобы собрать всех соискателей, необходимо реализовать цикл в 1С. В каждом ответе JSON содержатся поля page (текущая страница) и pages (всего страниц).
Рассмотрим структуру цикла для полной выгрузки:
НомерСтраницы = 0.&page=НомерСтраницы.НомерСтраницы < ВсегоСтраниц - 1, увеличиваем счетчик и повторяем запрос.Для реализации задачи «на минималках» мы рекомендуем следующий план действий:
1. Используйте внешние компоненты: Не пытайтесь реализовать TLS 1.2 средствами голого WinHttp на старых системах. curl1c — это проверенный временем стандарт для 1С 7.7.
2. Авторизация: Если вам не нужна сложная логика, получите access_token один раз (например, через Postman) и сохраните его в константу или текстовый файл. Токены HH достаточно долгоживущие.
3. Обработка данных: Используйте MSScriptControl для работы с JSON. Это избавляет от необходимости писать сложные парсеры на языке 1С или подключать тяжелые внешние DLL.
4. Безопасность: Никогда не забывайте про заголовок User-Agent. Его отсутствие — самая частая причина неудач при попытке интеграции с HH.ru.
Следуя этим шагам, мы сможем построить надежную систему импорта соискателей в базу 1С 7.7, автоматизируя работу HR-отдела и экономя время на ручном копировании данных.