Отладка обмена Битрикс и 1С утилитой bx_1c_sync.php
Зачем нужен bx_1c_sync.php
Вместо старого сценария bx_1c_import.php удобнее брать лёгкий скрипт bx_1c_sync.php: он лежит в одном файле, его просто залить на сервер и через веб-интерфейс многократно прогонять нужные сценарии интеграции — обмен заказами, справочниками или товарами без постоянного дергания самой 1С для каждой проверки.
Установка
В репозитории обычно две линейки: исходники для доработок и один «собранный» PHP-файл для быстрого внедрения.
Быстрый вариант
Актуальная версия одного файла публикуется по прямой ссылке на raw-файл в GitHub (ветка master, имя bx_1c_sync.php). Можно скачать архивом и положить в корень сайта или в каталог, откуда открываете обмен. С сервера удобно стянуть так: wget https://raw.githubusercontent.com/MashinaMashina/bx_1c_sync/master/bx_1c_sync.php — команда кладёт файл в текущую директорию SSH-сессии.
Версия для правок кода
Если планируете патчить логику, клонируйте репозиторий рядом с проектом: git clone https://github.com/MashinaMashina/bx_1c_sync, после чего подключайте свой вариант файла так же, как готовую сборку.
Первичная настройка
В начале скачанного файла есть переменная вида $password = ''; — в кавычках задаётся пароль для HTTP-авторизации при открытии скрипта в браузере. Без него запускать обмен незачем: иначе любой, кто угадает URL, сможет подставить свои данные.
Тестируйте сценарий в приватном окне или отдельном профиле браузера, чтобы не путать сессию администратора с тем, что реально прилетит от 1С: у обычного пользователя и у «залогиненного админа» часть проверок и куки ведут себя по-разному, и ошибка маскируется.
Сохранение файлов выгрузки каталога
Чтобы повторно разбирать пришедшие из 1С пакеты, включите сохранение на диск. В /bitrix/php_interface/dbconn.php достаточно объявить:
define('BX_CATALOG_IMPORT_1C_PRESERVE', true);Тогда обменные файлы не затираются сразу, а складываются под каталоги вида /upload/1c_catalogN, где N — порядковый номер сессии приёма. На бою не забывайте отключать, когда диск начинает задыхаться от объёма.
Запуск из браузера
После открытия скрипта вы попадаете в форму: указываете URL обмена (если интеграцию не выносили, по умолчанию это /bitrix/admin/1c_exchange.php), логин и пароль того служебного пользователя Битрикс, под которым ходит 1С, выбираете тип обмена и операцию, при необходимости указываете файл или имя XML внутри архива — типовой обмен часто работает с zip и ожидает конкретное имя внутри.
Режим get_catalog
Если выбран метод выдачи каталога поштучно, портал отдаёт по одному элементу за запрос: тысяча товаров превращается в тысячу HTTP-циклов. Вспомогательный скрипт поэтому не качает весь каталог, а ограничивается небольшим количеством первых позиций (в оригинальной логике — ориентир на первые пять), чтобы не устроить себе искусственный DDoS.
Как системно отладить сбой выгрузки
Удобная последовательность, если «что-то не доезжает»:
- Точка входа. Уточнить у специалистов по 1С фактический URL, на который настроена выгрузка (включая редиректы и HTTPS).
- Журнал запросов. В скрипте или в точке подключения обмена временно добавить запись каждого обращения, например:
$traceBasePath = __FILE__;
file_put_contents(
$traceBasePath . '.http.log',
date('r') . ' => ' . ($_SERVER['REQUEST_URI'] ?? '') . PHP_EOL,
FILE_APPEND
);- Архив пакетов. Убедиться, что
BX_CATALOG_IMPORT_1C_PRESERVEуже вtrue. - Полный прогон. Запросить у 1С полную выгрузку и посмотреть, меняются ли данные на витрине.
- Каталог на диске. Разобрать содержимое
/upload/1c_catalog*— совпадает ли структура с ожиданиями модуля. - Повтор без 1С. Через
bx_1c_sync.phpотправить те же запросы на тот же endpoint и сравнить результат с шагом выше. - Сравнение трафика. Сопоставить сырой поток запросов от боевой 1С и от скрипта — строка в строку, включая параметры и тело.
- Локальный дебаг. Остаточные расхождения вылавливаются уже пошаговым выполнением PHP в точке, где условие ветвится не так, как нужно вашему проекту.
Итог
Отдельный скрипт с паролем сокращает цикл отладки: можно быстро дергать обмен с контролируемыми параметрами и не светить интеграцию публичным endpoint без авторизации. Развернутая схема стадий обмена описана в материале о стадиях обмена сайта на Битрикс и 1С.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии