Интеграция 1С через CommerceML с сайтом
CommerceML — стандарт обмена коммерческими данными между 1С и торговыми системами. Разработан компанией 1С, широко поддерживается российскими CMS (1C-Bitrix, OpenCart, WordPress + WooCommerce). Для самописных сайтов — нужна реализация парсера CommerceML.
Формат CommerceML
CommerceML — это XML-формат с несколькими типами файлов:
-
import.xml— каталог товаров (номенклатура, группы, свойства) -
offers.xml— предложения (цены, остатки, характеристики) -
orders.xml— заказы (экспорт из CMS в 1С) -
import.xmlв ответ от 1С — обновление статусов заказов
Структура import.xml
<?xml version="1.0" encoding="UTF-8"?>
<КоммерческаяИнформация ВерсияСхемы="2.05">
<Каталог СодержитТолькоИзменения="false">
<Товары>
<Товар>
<Ид>550e8400-e29b-41d4-a716-446655440001</Ид>
<Наименование>Футболка мужская синяя</Наименование>
<Группы><Ид>category-001</Ид></Группы>
<СтавкаНалога>НДС20</СтавкаНалога>
<Картинка>images/tshirt.jpg</Картинка>
<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>prop-color</Ид>
<Значение>Синий</Значение>
</ЗначенияСвойства>
</ЗначенияСвойств>
</Товар>
</Товары>
</Каталог>
</КоммерческаяИнформация>
Структура offers.xml
<ПакетПредложений>
<Предложения>
<Предложение>
<Ид>550e8400-e29b-41d4-a716-446655440001#size-XL</Ид>
<Наименование>Футболка мужская синяя XL</Наименование>
<Цены>
<Цена>
<ИдТипаЦены>retail</ИдТипаЦены>
<ЦенаЗаЕдиницу>1500.00</ЦенаЗаЕдиницу>
<Валюта>RUB</Валюта>
</Цена>
</Цены>
<Количество>25</Количество>
</Предложение>
</Предложения>
</ПакетПредложений>
Протокол обмена
1С инициирует сессию обмена через HTTP-запросы к CMS по определённому протоколу:
GET /exchange.php?type=catalog&mode=checkauth
→ Авторизация
GET /exchange.php?type=catalog&mode=init
→ Инициализация (размер буфера, zip-поддержка)
POST /exchange.php?type=catalog&mode=file&filename=import.xml
→ Загрузка файла (может быть по частям для больших файлов)
GET /exchange.php?type=catalog&mode=import&filename=import.xml
→ Запуск обработки
Реализация обработчика на PHP
class CommerceML
{
public function handle(Request $request): Response
{
$mode = $request->query('mode');
$type = $request->query('type');
return match($mode) {
'checkauth' => $this->checkAuth(),
'init' => $this->init(),
'file' => $this->saveFile($request),
'import' => $this->processImport($request->query('filename')),
'query' => $this->exportOrders(), // экспорт заказов в 1С
'success' => $this->markOrdersExported(),
default => response('failure', 400)
};
}
protected function processImport(string $filename): Response
{
$xml = simplexml_load_file(storage_path("cms-exchange/{$filename}"));
// Парсинг и сохранение товаров в БД
dispatch(new ProcessCommerceMLImport($xml));
return response('success');
}
}
Инкрементальные обновления
После первоначальной полной синхронизации последующие обмены могут быть инкрементальными: СодержитТолькоИзменения="true". Это значительно ускоряет синхронизацию.
Характеристики и вариации
Товары с вариациями (размер, цвет) в CommerceML представлены как одна номенклатура с несколькими предложениями. Каждое предложение имеет уникальный Ид вида {товар-guid}#{характеристика-guid}. Нужно корректно маппить это на вариации товара в БД сайта.
Срок разработки: 2–4 недели для реализации парсера CommerceML и двустороннего обмена.







