Полный цикл в digital

Запросы обмена Битрикс и 1С

В процессе выгрузки, 1С должна обращается на сайт по следующим путям (пути к штатным контроллерам битрикса, если мы кастомим выгрузку пути будут другие).

Обмен идёт всегда в кодировке windows-1251. Всего есть шесть типов запросов в обмене, о них поговорим далее.

По умолчанию точкой входа является файл /bitrix/admin/1c_exchange.php, все запросы отправляются туда. Параметры передаются в пути запроса, через символ ?, например:

/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth
Первый запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth

Первый запрос, который делает 1С. Тут она авторизуется и получает ID сессии, которую будет передавать в каждый запрос в процессе всей выгрузки.

Далее на каждом шаге будет проверяться сессия, и она должна совпадать с той, которую мы получили на этом шаге. Если совпадать не будет, то битрикс будет ругаться такой ошибкой: failure. Ошибка проверки источника запроса. Обновите модуль обмена или отключите проверку в настройках компонента.

Если мы по какой-то причине не хотим проверять сессию на каждом шаге, то можно отключить выполнив команду:

COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y");

Первый запрос всегда checkauth. Через HTTP basic authentication передаются логин и пароль. Ответ подобен этому:

success
PHPSESSID
c84bba7587de83c2b7f88a837ffc4237
sessid=641ec5e7f1547d4934458141ec237512
timestamp=1623238486

Если удачно, первая строка success. Вторая строка имя куки, третья значение куки. Далее параметры, которые стоит передавать во всех следующих запросах.

Файлы передаются в теле запроса, на сервере файлы берутся не из $_FILES, а из php://input. То есть данные разделены не как в обычном POST запросе через boundary, все отправляемые данные это и есть файл.

События не бросаются!

Второй запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid=ID_СЕССИИ

Второй запрос отчищает папку, в которую выгружаются файлы для выгрузки (загрузятся они далее).

Сайт сообщает нам следующие сведения:

zip=yes
file_limit=204800

На этом шаге 1С узнает важные для обмена настройки сайта. Управление этими параметрами на сайте происходит на странице Интеграция с 1С в панели управления сайтом, где:

  • zip разрешено ли грузить архивы
  • file_limit максимальный размер файла в килобайтах

События не бросаются!

Третий запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=ИМЯ_ФАЙЛА&sessid=ID_СЕССИИ

Этот запрос загружает файл в нашу папку. По умолчанию /upload/1c_catalog. Можно передавать все файлы xml по одному и картинки загружать по одиночке, но лучше их упаковать в архив и загрузить за один раз. Отправляем POST запросом архив, в filename указываем имя название.zip. Если все хорошо, в результате запроса у нас в папке появиться загружаемый файл.

События не бросаются!

Четвертый запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=ИМЯ_ФАЙЛА.zip&sessid=ID_СЕССИИ

Запрос выполнять только если мы загружали архив, происходит распоковка архива.

События не бросаются!

Пятый запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=import.xml&sessid=ID_СЕССИИ

Наша цель выгрузить товары, тут наконец начинаем это делать! Этот запрос надо будет выполнить не один раз, а минимум 8. Именно за столько шагов проходит выгрузка одного файла. Тут мы выгружаем import.xml. Если у в архиве файл назывался по другому, скажем import_dasdasdasd.xml, то filename=import_dasdasdasd.xml.

Детально описывать шаги нет смысла, про них можно почитать тут.

По аналогии с предыдущем файлом выгружаем и остальные (prices.xml, rests.xml, ...).

Данный тип обмена type=catalog используется для создания и обновления на сайте следующих сущностей:

  • Инфоблок товаров
  • UF-поля разделов в этом инфоблоке
  • свойства элементов в этом инфоблоке
  • инфоблок SKU
  • типы цен
  • склады
  • разделы в инфоблоке товаров
  • элементы в инфоблоке товаров (товары)
  • цены товаров
  • наличие товаров по складам

Бросаются события: OnBeforeCatalogImport1C, OnSuccessCatalogImport1C

Шестой запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=deactivate&sessid=ID_СЕССИИ×tamp=000000000000

Важный шаг, который деактивирует элементы и разделы. Обязательно должны передать параметр timestamp (временная метка в секундах). Будут выбраны все элементы и разделы, которые не были модифицированы после этой метки. Грубо говоря, деактивируется все, что было ранее этой метки. Обычно сюда передают метку начала выгрузки.

События не бросаются!

Седьмой запрос
https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=complete&sessid=ID_СЕССИИ

Важного на этом шаге ничего не делается, только бросается событие, что импорт успешно завершен.

Бросаются событие: OnCompleteCatalogImport1C

Типы обмена

Тип sale. Импорт и экспорт заказов интернет магазина

  • checkauth проверка авторизации. Никаких действий не происходит
  • init удаляет файлы из папки обмена 1c_exchange, проверяет файл .htaccess, устанавливает, если требуется, режим zip
  • query выгрузка заказов по фильтру. Выгружает заказы, которые были обновлены после последней выгрузки
  • success после query. Устанавливает время окончания последней выгрузки
  • file загрузка файла. Если на init было zip=yes, файл должен быть в формате zip. Для старых версий обмена еще проверка валидности xml
  • import Только в новой версии - распаковка архива. Обработка файла. Без создания временных таблиц
  • info получение справочников интернет магазина на сайте

Тип crm. Для работы 1С с Битрикс 24

То же что и sale. Не используется zip, возможно сжатие через gz, можно получать конкретные заказы по ID, можно указать дату, начиная с которой выгружать заказы.

Тип catalog. Импорт товаров на сайт

  • 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-файлу обмена типа строка.

Тип reference. Загрузка на сайт справочников (HL блоков)

  • checkauth проверка авторизации. Никаких действий не происходит.
  • init удаляет файлы из папки обмена 1c_highloadblock, проверяет файл .htaccess, устанавливает, если требуется режим zip.
  • file загрузка файла. Если на стадии init было zip=yes, файл должен быть в формате zip.
  • import импорт данных. В начале обработки данных вызывается событие OnBeforeCatalogImportHL, в конце OnSuccessCatalogImportHL.

Тип get_catalog. Экспорт товаров с сайта

  • init проверка авторизации. Никаких действий не происходит
  • query получаем файл

Тип listen. Ожидание изменений

Запрос на ожидание изменений в заказах. Ожидание ответа сервера идет 1 минуту, если были изменения - ответ success, требуется обмен заказами. Если изменений не было, ответа нет, код HTTP 304 Not Modified. Далее 1С снова отправляет запрос с ожиданием изменений.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг