Інтеграція 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 і двостороннього обміну.







