При создании первого в жизни проекта по интеграции сайта и 1С часто возникает соблазн использовать стандартные инструменты, такие как Универсальный обмен данными XML. Однако, если сайт разработан с нуля (самописный), попытка подогнать PHP-код под жесткую структуру универсального формата может оказаться крайне трудоемкой задачей. Рассмотрим, почему современные разработчики выбирают путь создания собственных HTTP-сервисов, и разберем по шагам, как реализовать надежный обмен данными.
Разберем ситуацию: обработка Универсальный обмен данными (XML) предназначена в первую очередь для миграции данных между конфигурациями 1С. Для её работы требуется файл правил обмена, созданный в конфигурации «Конвертация данных 2.0». Чтобы ваш сайт мог «общаться» с 1С через эту обработку, вам пришлось бы программно формировать XML-структуру, которая в точности повторяет метаданные 1С и структуру узлов, прописанную в правилах. Это неудобно, сложно в отладке и избыточно для веб-проекта.
Проанализируем более эффективные подходы, которые позволяют сделать обмен гибким и производительным.
Это самый современный и рекомендуемый метод. Вместо того чтобы выгружать файлы и вручную их загружать, мы заставим сайт и 1С общаться напрямую через HTTP-протокол. Рассмотрим алгоритм реализации:
HTTPСервис./exchange/v1/data.POST для приема данных с сайта и GET для отдачи данных сайту.Посмотрим на пример простейшего кода в 1С для приема JSON-данных от PHP-скрипта:
Функция ПринятьДанныеССайта(Запрос)
// Получаем тело запроса (например, в формате JSON)
СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
// Инициализируем чтение JSON
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
// Преобразуем JSON в структуру или соответствие 1С
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Здесь реализуем логику обработки данных (запись в справочник или документ)
// Например: Справочники.Номенклатура.СоздатьЭлемент()...
// Формируем ответ
Ответ = Новый HTTPСервисОтвет(200); // OK
Ответ.УстановитьТелоИзСтроки("Данные успешно обработаны в 1С");
Ответ.Заголовки.Вставить("Content-Type", "text/plain; charset=utf-8");
Возврат Ответ;
КонецФункции
На стороне PHP самым надежным инструментом для отправки данных в 1С является библиотека cURL. Выясним, как настроить передачу данных. Нам понадобится авторизация (так как база 1С обычно защищена) и передача заголовков.
Рассмотрим пример PHP-скрипта, который отправляет массив данных в 1С:
// Массив с данными (например, информация о заказе)
$orderData = [
'order_id' => 12345,
'customer' => 'Иванов Иван',
'amount' => 1500.50
];
// Преобразуем в JSON
$payload = json_encode($orderData);
// Настройка cURL
$ch = curl_init('http://your-1c-server.ru/base_name/hs/exchange/v1/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
// Установка заголовков
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Content-Length: ' . strlen($payload)
]);
// Авторизация (Basic Auth)
curl_setopt($ch, CURLOPT_USERPWD, "login_1c:password_1c");
// Выполнение запроса
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Ошибка: ' . curl_error($ch);
} else {
echo 'Ответ от 1С: ' . $response;
}
curl_close($ch);
Если вы всё же хотите использовать встроенные механизмы 1С для обмена (которые часто применяются в типовых конфигурациях для связи с Битриксом), вы можете реализовать генерацию XML в формате CommerceML.
Преимущество: В типовых конфигурациях 1С (УТ, УНФ, ERP) уже есть узлы обмена, которые «из коробки» понимают этот формат. Вам не придется писать код парсинга на стороне 1С.
Реализация: На стороне PHP вы создаете скрипт, который формирует XML-структуру с тегами <КоммерческаяИнформация>, <Каталог>, <Товар>. Структуру можно подсмотреть, выгрузив любой каталог из 1С в файл.
Проанализируем важные аспекты безопасности, которые нельзя игнорировать при настройке обмена:
Для самописного сайта на PHP идеальным решением будет связка HTTP-сервис в 1С + JSON + cURL на PHP. Это обеспечивает максимальную скорость работы, легкость отладки и отсутствие зависимости от громоздких стандартов. Если же база 1С типовая и вы не хотите менять конфигурацию (вносить изменения в код 1С), выбирайте формирование файлов в формате CommerceML — это позволит использовать стандартные модули обмена.