Расскажу о скрипте 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
Настройка
Если вы запустите в браузере сразу скрипт, то увидите следующую картину
В начале скачанного нами файла на строке $password = ''; надо в кавычках указать пароль, по которому вы сможете авторизовываться.
Сразу откроем скрипт в режиме Инкогнито браузера, чтобы не получилось такое, что мы работаем от админа и всё ок, а 1С потом работает от другого пользователя и всё ломается.
Для эмуляции выгрузки товаров из 1С на сайт, предварительно надо произвести обмен из 1С, установив сохранение файлов. Делается это добавлением строки
define("BX_CATALOG_IMPORT_1C_PRESERVE", true);
в /bitrix/php_interface/dbconn.php. Установленная константа BX_CATALOG_IMPORT_1C_PRESERVE включает сохранение файлов в папке /upload/1c_catalogN, где N - номер папки.
Запуск скрипта интеграции
Первоначально у вас будет такое окно
Если интеграция не переделывалась на сайте, то адрес выгрузки у вас будет стандартный /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С и Битрикс можно почитать по ссылке.