Перейти к содержимому

Экспорт каталога на торговые площадки - фид, адреса, поля

Собираем товарный фид для площадки и разбираемся, почему она отклоняет позиции или ведёт покупателя не туда.

Решение

Смотрим настроенные профили экспорта:

use Bitrix\Main\Loader;
Loader::includeModule('catalog');
$res = CCatalogExport::GetList([], []);
while ($export = $res->Fetch()) {
printf("%-4s %-24s файл=%s активен=%s\n",
$export['ID'], $export['NAME'], $export['FILE_NAME'], $export['ACTIVE']);
}

Профиль экспорта хранит и настройки отбора, и путь к готовому файлу. Площадка читает именно файл, а не сайт напрямую, и всё, что она видит, определяется моментом последней сборки фида.

Проверяем адреса товаров в готовом файле:

Окно терминала
grep -o '<url>[^<]*</url>' /home/bitrix/www/upload/1c_catalog/yml.xml | head -5
# адреса должны быть абсолютными и открываться без переадресаций
curl -s -o /dev/null -w '%{http_code} %{redirect_url}\n' 'https://example.com/catalog/tovar/'

Адрес в фиде собирается из адреса сайта в настройках и шаблона адреса элемента. Старый домен в настройках даёт фид со ссылками на прежний сайт, и площадка уводит покупателей туда - при полностью работающем магазине.

Смотрим, что попало в выгрузку:

Окно терминала
grep -c '<offer ' /home/bitrix/www/upload/1c_catalog/yml.xml
grep -c '<price>0</price>' /home/bitrix/www/upload/1c_catalog/yml.xml

Позиции без цены и без картинки площадка отклоняет молча, и в отчёте они выглядят как «ошибка данных». Их проще отсечь на стороне сайта условиями отбора, чем разбирать потом в личном кабинете площадки.

Отбираем позиции для выгрузки:

// условия отбора хранятся в профиле экспорта и применяются при сборке
$filter = [
'IBLOCK_ID' => 5,
'ACTIVE' => 'Y',
'>CATALOG_PRICE_1' => 0, // без цены площадка позицию не примет
'!DETAIL_PICTURE' => false, // и без картинки тоже
'PROPERTY_EXPORT_VALUE' => 'Да', // своё свойство «выгружать на площадку»
];

Отдельное свойство «выгружать» решает половину вопросов с фидом. Оно даёт управление составом выгрузки контент-менеджеру, а не разработчику, и не требует править профиль экспорта при каждом изменении ассортимента.

Настраиваем пересборку фида по расписанию:

// фид собирает агент: без агентов файл остаётся вчерашним
CAgent::AddAgent('CCatalogExport::PreGenerateExport();', 'catalog', 'N', 86400);
// интервал согласуют с частотой смены цен и остатков

Фид - это снимок каталога на момент сборки. Цены и остатки в нём устаревают до следующего запуска, поэтому частоту пересборки согласуют с тем, как часто меняется каталог.

Обязательные поля у каждой площадки свои, но пересечение всегда одно: название, цена, валюта, категория, картинка и рабочая ссылка. Позицию без любого из них площадка не примет, сколько ни настраивай остальное.

Торговые предложения попадают в фид отдельными позициями. Товар с пятью вариантами даёт пять записей, и площадка считает их разными предложениями со своими ценами и своими ссылками на карточку.

Типичные проблемы

Ссылки из фида ведут на старый домен.

В настройках сайта остался прежний адрес. Фид собирает абсолютные ссылки именно оттуда.

Площадка отклоняет часть позиций.

У них нет цены, картинки или категории. Такие товары отсекают условиями отбора при сборке фида.

Цены в фиде устарели.

Файл не пересобирался. Фид - снимок каталога, и обновляется он только при сборке.

В фид попали служебные разделы.

В отборе указан весь инфоблок. Разделы вроде архива и черновиков исключают явно.

Фид не обновляется по расписанию.

Сборку выполняет агент, а агенты не работают. Проверяют их запуск, а не настройки экспорта.

Частые вопросы

Можно ли отдавать фид сразу, без файла?

Технически да, своим скриптом, но площадка забирает файл по расписанию и большой каталог собирается дольше её тайм-аута. Готовый файл надёжнее.

Как исключить из фида часть товаров?

Условиями отбора в профиле экспорта: по разделу, по свойству, по наличию. Отдельное свойство «выгружать на площадку» - обычное решение.

Нужен ли отдельный фид на каждую площадку?

Да, у площадок разные форматы и разные обязательные поля. Один общий файл обычно устраивает только одну из них.

Почему в фиде цена ниже, чем на сайте?

В выгрузку попала цена другого типа или цена без учёта правил корзины. Тип цены задаётся в настройках профиля экспорта.

Смежное

Первоисточник