Отладка интеграции между Битроикс и 1С
Скриптом можно запустить обмен с сайтом заказами, справочниками, товарами. Нужно скачать файл bx_1c_sync.php
на компьютер и загрузить в корень сайта.
Настройка скрипта
Перед запуском, в начале скачанного файла в строке $password = '';
нужно указать пароль, по которому можно авторизовываться.
Работать со скриптом, нужно в режиме браузера инкогнито
, чтобы не получилось, что мы работаем от админа и всё хорошо, а 1С
потом работает от другого пользователя и всё ломается.
Настройка сайта
Для эмуляции выгрузки товаров из 1С
на сайт, предварительно надо произвести обмен, установив сохранение файлов. Делается это добавлением строки в /bitrix/php_interface/dbconn.php
, которая включает сохранение файлов в папке upload/1c_catalog
:
define("BX_CATALOG_IMPORT_1C_PRESERVE", true);
Запуск скрипта
Первоначально у вас будет такое окно:
Если интеграция не переделывалась на сайте, то адрес выгрузки у вас будет стандартный /bitrix/admin/1c_exchange.php
Логин и пароль - те, что использует 1С для доступа к сайту.
Тип обмена и операция - выбираете нужные из списка.
Если требуется - выбираете файл. Чаще всего сайт работает с архивами. Загружая архив, укажите имя xml файла в архиве.
При использовании метода get_catalog, сайт отдает товары по одному. Если у вас 1000 товаров, то потребуется как минимум 1000 запросов. Поэтому скрипт не пытается выкачать все товары, а получает только первые 5.
План работы, для исправления бага с выгрузкой
- Узнать у 1Сников на какой адрес они делают выгрузку
- В этот файл добавить логирование всех входящих запросов, например так:
file_put_contents(__FILE__ . '.log', date('r') . '->' . $_SERVER['REQUEST_URI'] . PHP_EOL, FILE_APPEND);
- Устанавливаем константу
BX_CATALOG_IMPORT_1C_PRESERVE
вtrue
- Просим сделать 1Сников полную выгрузку
- Смотрим изменилось ли то, что должно измениться
- Смотрим файлы в
/upload/1c_catalog
- С помощью скрипта по ссылке выше сами проводим выгрузку на тот же адрес, куда выгружает 1С
- Смотрим изменилось ли то, что должно измениться
- Сравниваем запросы он 1С и от скрипта, должны быть одинаковые
- Вручную запускаем скрипт и дебажим, смотрим где какое условие не так как надо отрабатывает и определяем как это исправить
Стадии обмена
Обмен идёт всегда в кодировке windows-1251
. Всего есть шесть типов запросов в обмене, о них поговорим далее.
По умолчанию точкой входа является файл /bitrix/admin/1c_exchange.php
, все запросы отправляются туда:
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth
Первый запрос всегда checkauth
, через HTTP basic authentication
передаются логин и пароль, ответ подобен этому:
success
PHPSESSID
c84bba7587de83c2b7f88a837ffc4237
sessid=641ec5e7f1547d4934458141ec237512
timestamp=1623238486
Если удачно, первая строка success
. Вторая строка имя куки
, третья значение куки
. Далее параметры, которые стоит передавать во всех следующих запросах.
Файлы передаются в теле запроса, на сервере файлы берутся не из $_FILES
, а из php://input
. То есть данные разделены не как в обычном POST
запросе через boundary,
а все отправляемые данные это и есть файл.
checkauth
проверка авторизации, никаких действий не происходитinit
удаляет файлы из папки обмена1c_exchange
, проверяет файл.htaccess
, устанавливает если требуется режимzip
query
выгрузка заказов по фильтру, выгружает заказы которые были обновлены после последней выгрузкиsuccess
послеquery
, устанавливает время окончания последней выгрузкиfile
загрузка файла, если наinit
былоzip=yes
, файл должен быть в форматеzip
. Для старых версий обмена еще проверка валидностиxml
import
только в новой версии распаковка архива. Обработка файла без создания временных таблицinfo
получение справочников интернет магазина на сайте
То же что и sale
, не используется zip
, возможно сжатие через gz
, можно получать конкретные заказы по ID
, можно указать дату, начиная с которой выгружать заказы
checkauth
проверка авторизации, никаких действий не происходит, в ответе присутствует параметрtimestamp
init
инициализация обмена, удаляет файлы из папки обмена1c_catalog
, проверяет файл.htaccess
, устанавливает, если требуется режимzip
file
загрузка файла, если на стадииinit
былоzip=yes
, файл должен быть в форматеzip
- import - импорт данных в несколько шагов:
1. Если используетсяzip
распаковка
2. Удаление старых временных таблиц
3. Создание временных таблиц, вызывается событиеOnBeforeCatalogImport1C
4. ЧтениеXML
и перенос данных во временные таблицы
5. Создание индексов во временных таблицах
6. Импорт метаданных
7. Импорт разделов
8. Деактивация старых разделов
9. Импорт товаров
10. Деактивация старых товаров
12. Удаление кеша инфоблока, окончание работы, вызов событияOnSuccessCatalogImport1C
deactivate
деактивация старых разделов и товаров на сайте, которые старше чемtimestamp
. Из 1С на сайт передаетсяtimestamp
, который был получен в методеcheckauth
complete
событие успешного окончания обмена, запуск событияOnCompleteCatalogImport1C
Именно через привязку к событию OnSuccessCatalogImport1C
многие делают доработку импорта, так как на этом шаге можно обратиться к файлу и получить оттуда любое поле. Коллбек принимает два параметра: "Параметры подключения компонента обмена" типа массив и "Полный путь к XML-файлу обмена" типа строка.
checkauth
проверка авторизации, никаких действий не происходитinit
удаляет файлы из папки обмена1c_highloadblock
, проверяет файл.htaccess
, устанавливает, если требуется режимzip
file
загрузка файла, если на стадииinit
былоzip=yes
, файл должен быть в форматеzip
import
импорт данных, в начале обработки данных вызывается событиеOnBeforeCatalogImportHL
, в концеOnSuccessCatalogImportHL
init
проверка авторизации, никаких действий не происходитquery
получаем файл
Запрос на ожидание изменений в заказах. Ожидание ответа сервера идет 1 минуту
, если были изменения - ответ success
, требуется обмен заказами. Если изменений не было, ответ нет, код /code>HTTP 304 Not Modified. Далее 1С снова отправляет запрос с ожиданием изменений.