Настройка обмена 1С с 1С-Битрикс по протоколу CommerceML (CML 2.0)
При интеграции 1С с сайтом на базе 1С-Битрикс возникают ошибки:
- Обрыв выгрузки с ошибкой:
failure. Access denied / Session timeout. - Каталог товаров (
import.xml/offers.xml) не импортируется сайтом из-за превышения лимитов памяти PHP (Allowed memory size exhausted). - Цены и остатки на сайте не обновляются при успешном статусе выгрузки из 1С.
- Заказы с сайта загружаются с неверным статусом или дублируют номенклатурные позиции.
1. Протокол взаимодействия CommerceML 2.x (Шаги сессии)
Обмен выполняется по HTTP/HTTPS в несколько последовательных запросов со стороны 1С к скрипту /bitrix/admin/1c_exchange.php:
type=catalog&mode=checkauth— Авторизация и получение cookie сессии.type=catalog&mode=init— Инициализация параметров (разрешенный размер zip-архива).type=catalog&mode=file&filename=...— Пошаговая загрузка файлов на веб-сервер.type=catalog&mode=import&filename=...— Пошаговый импорт файлов в инфоблоки Битрикса.
2. Тонкая настройка пошаговой выгрузки для обхода PHP-таймаутов
В настройках узла обмена с сайтом в 1С установите следующие параметры:
- Выгружать только измененные товары (инкрементальная выгрузка).
- Использовать сжатие zip (уменьшает объем трафика в 10 раз).
- Размер порции передачи файла: не более
1024 КБ(1 МБ).
3. Программная проверка ответа скрипта авторизации Bitrix
&НаСервере
Функция ПроверитьАвторизациюБитрикс(АдресСайта, Логин, Пароль)
ПараметрыTLS = Новый ПараметрыЗащищенногоСоединенияOpenSSL();
HTTPСоединение = Новый HTTPСоединение(АдресСайта, 443, Логин, Пароль,,, 30, Новый ЗащищенноеСоединениеOpenSSL(ПараметрыTLS));
HTTPЗапрос = Новый HTTPЗапрос("/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth");
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
ТекстОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.Windows1251);
Если СтрНайти(ТекстОтвета, "success") > 0 Тогда
// Извлечение Cookie сессии
МассивСтрок = СтрРазделить(ТекстОтвета, Символы.ПС);
ИмяCookie = МассивСтрок[1];
ЗначениеCookie = МассивСтрок[2];
Возврат Новый Структура("Имя, Значение", ИмяCookie, ЗначениеCookie);
Иначе
ВызватьИсключение "Ошибка авторизации на сайте: " + ТекстОтвета;
КонецЕсли;
КонецФункции Частые вопросы (FAQ)
Почему выгрузка каталога завершается ошибкой 'failure' на этапе импорта?
Проверьте логи веб-сервера (/var/log/nginx/error.log и bitrix/modules/catalog_export.log). Чаще всего причина в max_execution_time или memory_limit в php.ini на стороне хостинга.
Как сопоставляются свойства товаров 1С со свойствами инфоблоков Битрикс?
Сопоставление происходит по внешнему коду (GUID свойства XDTO). При первом импорте 1С передает блок <Свойства> в import.xml, и Битрикс автоматически создает соответствующие свойства инфоблока.
Почему заказы с сайта загружаются без контрагентов?
В профиле обмена на стороне 1С-Битрикс не настроено сопоставление полей заказа (XML_ID, ИНН, Телефон) с реквизитами справочника Контрагенты 1С.
Как настроить передачу нескольких типов цен (Оптовая, Розничная)?
В настройках соглашений и цен узла обмена 1С добавьте все необходимые типы цен и проверьте, что их внешние коды (XML_ID) совпадают с базовыми типами цен в модуле Торгового каталога Битрикс.