Как 1С выгружает товары на сайт под управлением 1C Bitrix. Небольшой how to для тех кто не в теме
Разберем по шагам процесс выгрузки товаров на сайт под управлением Bitrix (да и всем чем угодно)
В процессе выгрузки, 1С должна обращается на сайт по следующим путям (пути к штатным контроллерам битрикса, если мы кастомим выгрузку пути будут другие):
- https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth
Это первый запрос, который делает 1С. Тут она получает ID сессии, которую будет передавать в каждый запрос в процессе всей выгрузки.
Далее на каждом шаге будет проверяться сессия, и она должна совпадать с той, которую мы получили на этом шаге. Если совпадать не будет, то битрикс будет ругаться такой ошибкой:
failure
Ошибка проверки источника запроса. Обновите модуль обмена или отключите проверку в настройках компонента.
Если мы по какой-то причине не хотим проверять сессию на каждом шаге, то можно отключить выполнив команду
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y");
События не бросаются
- https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid=ID_Сессии
Следующий запрос отчищает папку, в которую выгружаются файлы для выгрузки (загрузятся они далее).
Не забываем передать ID сессии в параметр sessid.
Если все ОК, то сайт сообщает нам следующие сведения:
zip=yes
file_limit=204800
zip: разрешено ли грузить архивы
file_limit: максимальный размер файла (по дефолту 200кб)
События не бросаются
- 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.
Детально описывать шаги нет смысла, про них можно почитать тут https://mrcappuccino.ru/blog/post/1c-exchange
Если у нас в архиве файл назывался по другому, скажем import_dasdasdasd.xml, то filename=import_dasdasdasd.xml
Бросаются события: OnBeforeCatalogImport1C, OnSuccessCatalogImport1C (по названию не сложно понять, когда они вызываются)
- https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=offers.xml&sessid=ID_Сессии
По аналогии с предыдущем выгружаем offers.xml и остальные файлы (prices.xml, rests.xml, ...)
- 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
Lex
Грузил картинки товаров архивом как в инструкции: выгрузилось на сервер быстро а вот распаковать архив так и не получилось. метод распаковки представленный в статье говорит что все успешно, файл найден и обработан, только результата нет(
naumov_evg
Lex, а можете скинуть адреса по которым вы обращались? Так же может быть, что на файл который закинули нет прав