Авг
02
2021

Отладка интеграции Битрикс и 1С скриптом bx_1c_sync.php

Расскажу о скрипте bx_1c_sync.php, который используется взамен устаревшего скрипта bx_1c_import.php. Скриптом можно запустить обмен заказами с сайтом, обмен справочниками, товарами.

Скрипт в 1 файл, легко устанавливается и запускается.

Установка

Есть 2 версии скрипта: в исходниках и единый скомпилированный файл.

Быстрая установка

Скомпилированный файл находится по адресу:

https://raw.githubusercontent.com/MashinaMashina/bx_1c_sync/master/bx_1c_sync.php

Можно скачать файл на компьютер и загрузить на сайт, а можно через SSH командой скопировать с сервера гитхаб, для этого в папке сайта через терминал введите команду:

wget https://raw.githubusercontent.com/MashinaMashina/bx_1c_sync/master/bx_1c_sync.php

Установка для доработки скрипта

Для разработки используйте команду в папке сайта:

git clone https://github.com/MashinaMashina/bx_1c_sync

Настройка

Если вы запустите в браузере сразу скрипт, то увидите следующую картину

bx_1c_sync.php

В начале скачанного нами файла на строке $password = ''; надо в кавычках указать пароль, по которому вы сможете авторизовываться.

bx_1c_sync.php пароль

Сразу откроем скрипт в режиме Инкогнито браузера, чтобы не получилось такое, что мы работаем от админа и всё ок, а 1С потом работает от другого пользователя и всё ломается.

Для эмуляции выгрузки товаров из 1С на сайт, предварительно надо произвести обмен из 1С, установив сохранение файлов. Делается это добавлением строки

define("BX_CATALOG_IMPORT_1C_PRESERVE", true);

в /bitrix/php_interface/dbconn.php. Установленная константа BX_CATALOG_IMPORT_1C_PRESERVE включает сохранение файлов в папке /upload/1c_catalogN, где N - номер папки.

Запуск скрипта интеграции

Первоначально у вас будет такое окно

Скрипт запуска интеграции 1С и Битрикс bx_1c_sync.php

Если интеграция не переделывалась на сайте, то адрес выгрузки у вас будет стандартный /bitrix/admin/1c_exchange.php

Логин и пароль - те, что использует 1С для доступа к сайту.

Тип обмена и операция - выбираете нужные из списка.

Если требуется - выбираете файл. Чаще всего сайт работает с архивами. Загружая архив, укажите имя xml файла в архиве

Например, получим справочники модуля sale. Файл успешно скачался.

По поводу типа get_catalog

При использовании метода get_catalog, сайт отдает товары по одному. Если у вас 1000 товаров, то потребуется как минимум 1000 запросов. Поэтому скрипт не пытается выкачать все товары, а получает только первые 5.

План работы, для того чтобы исправить любой баг с выгрузкой:

1. Узнать у 1Сников на какой адрес они делают выгрузку.
2. В этот файл добавить логирование всех входящих запросов. Например, так:

file_put_contents(__FILE__ . '.log', date('r') . '->' . $_SERVER['REQUEST_URI'] . PHP_EOL, FILE_APPEND);

3. Устанавливаем константу BX_CATALOG_IMPORT_1C_PRESERVE в true, если еще не установлено
4. Просим сделать 1Сников полную выгрузку
5. Смотрим изменилось ли то, что должно измениться
6. Смотрим файлы в /upload/1c_catalog*
7. С помощью скрипта по ссылке выше сами проводим выгрузку на тот же адрес, куда выгружает 1С
8. Смотрим изменилось ли то, что должно измениться
9. Сравниваем запросы он 1С и от скрипта. Должны быть одинаковые
10. Вручную запускаем скрипт и дебажим. Смотрим где какое условие не так как надо отрабатывает и определяем как это исправить

Итог

Быстрый запуск выгрузки ускоряет отладку проблемных мест в интеграции 1С и сайта на Битрикс. Наличие авторизации в скрипте не дает злоумышленникам навредить сайту запуская выгрузки со своими данными.

Подробнее про все стадии обмена 1С и Битрикс можно почитать по ссылке.

Пожалуйста, оцените на сколько вам понравилась статья!
Голосов: 20 Среднее: 4.7