WOOCOMMERCE И 1С. ИМПОРТ ТОВАРОВ
Продолжаем разбирать интеграцию 1С с сайтами. В этом материале — рабочая схема обмена между 1С и интернет-магазином на WordPress с плагином WooCommerce: выгрузка товаров из 1С на сайт и обратная выгрузка заказов в 1С через REST API. Если вам нужна не выгрузка каталога, а встраивание веб-клиента 1С прямо в страницу сайта — это другая задача, она разобрана в материале про интеграцию 1С с сайтом через iframe.
Пошаговая настройка обмена 1С ↔ WooCommerce
У WooCommerce нет собственного формата CommerceML — это формат обмена, который 1С исторически использует с «1С-Битрикс» и похожими CMS, где есть штатный модуль импорта. WooCommerce — плагин WordPress, и штатный способ обмена с ним — WooCommerce REST API (актуальная версия — v3, документация: developer.woocommerce.com/docs/apis/rest-api/). Через него можно и отправлять товары из 1С на сайт, и забирать оформленные на сайте заказы обратно в 1С.
1. Создать ключи API в WooCommerce
В административной панели WordPress: WooCommerce → Настройки → Дополнительно → REST API → Добавить ключ. Указываете пользователя (нужны права администратора магазина) и права доступа — для двустороннего обмена ставьте «Чтение/Запись». После сохранения WooCommerce покажет пару Consumer key (ck_...) и Consumer secret (cs_...) — сохраните их сразу, secret повторно не показывается.
2. Настроить запрос из 1С
Для запросов используем встроенные объекты 1С HTTPСоединение и HTTPЗапрос. Авторизация — Basic Auth поверх HTTPS (ключ как логин, секрет как пароль):
Соединение = Новый HTTPСоединение(АдресСайта, 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Authorization", "Basic " + Base64Строка(КодироватьСтроку(КлючConsumer + ":" + СекретConsumer, КодировкаТекста.UTF8)));
Запрос = Новый HTTPЗапрос("/wp-json/wc/v3/products", Заголовки);
По обычному HTTP (без TLS) WooCommerce Basic Auth не принимает — пришлось бы подписывать запросы по OAuth 1.0a, поэтому проще сразу работать по HTTPS с валидным сертификатом на сайте.
3. Отправить товар
Тело запроса — JSON с полями товара, ключевое поле для сопоставления с 1С — sku (артикул):
{
"name": "Название товара",
"sku": "НоменклатураКод-00012",
"regular_price": "1990.00",
"manage_stock": true,
"stock_quantity": 15
}
Запрос отправляется методом POST на создание нового товара (эндпоинт /wp-json/wc/v3/products) или PUT на обновление существующего (/wp-json/wc/v3/products/{id}). Перед отправкой стоит сначала выполнить GET-запрос с фильтром ?sku=..., чтобы понять — создавать товар или обновлять, — иначе на сайте появятся задвоенные позиции.
4. Забрать заказы обратно в 1С
Заказы, оформленные на сайте, читаются через GET /wp-json/wc/v3/orders с параметром after (дата последней синхронизации) — это избавляет от повторной обработки одних и тех же заказов. Более надёжный вариант — не опрашивать сайт по расписанию, а настроить вебхук: WooCommerce → Настройки → Дополнительно → Вебхуки, событие «Заказ создан», адрес — HTTP-сервис 1С, который принимает POST и создаёт документ заказа.
Типичные ошибки при обмене
401 Unauthorized / consumer_key или signature invalid. Чаще всего — ключ создан с правами «Только чтение», а вы пытаетесь создавать или менять товары; либо ключ отозван в админке; либо сайт работает без HTTPS и Basic Auth просто не проходит (нужен OAuth 1.0a). Проверьте права ключа и схему подключения — по обычному HTTP Basic Auth не работает в принципе.
400 product_invalid_sku. WooCommerce требует уникальный SKU в рамках магазина. Ошибка возникает, если вы пытаетесь создать товар с артикулом, который уже занят другим товаром или вариацией — например, при повторном запуске обмена без проверки существования. Решение — искать товар по SKU перед отправкой (см. шаг 3) и решать создание/обновление по результату поиска, а не всегда слать POST.
Расхождение цены и валюты. WooCommerce хранит цену как число в валюте, заданной в настройках магазина (WooCommerce → Настройки → Общие → Валюта) — сам API валюту не конвертирует и не проверяет. Если 1С считает цены в другой валюте или отправляет число с запятой вместо точки в качестве разделителя (стандартное поведение форматирования чисел в 1С), JSON окажется невалиден либо цена уйдёт в разы больше или меньше нужной. Приводите число к формату с точкой на стороне 1С перед сериализацией в JSON.
Расхождение единиц измерения. WooCommerce по умолчанию не знает о единицах измерения 1С (шт., уп., кг) — stock_quantity это всегда штучный остаток одной учётной единицы товара. Если товар продаётся упаковками, а 1С ведёт остаток в штуках, пересчитывайте остаток в упаковки на стороне 1С перед отправкой — иначе на сайте покажется остаток в штуках, который покупатель воспримет как количество упаковок.
Таймаут при большом каталоге. Если отправлять товары по одному синхронным HTTP-запросом на несколько тысяч позиций, обмен растягивается на часы и упирается в таймаут PHP на стороне сайта. Используйте batch-эндпоинт POST /wp-json/wc/v3/products/batch с массивами create/update/delete — WooCommerce рекомендует не более 100 позиций в одном батче. Дробите каталог на пачки на стороне 1С и запускайте обмен фоновым регламентным заданием, а не в интерактивном сеансе пользователя.
Что дальше
Пошаговый разбор всей этой схемы с рабочим кодом — на курсе «WooCommerce и 1С: интеграция и обмен товарами»: там собран весь обмен целиком — от создания ключей до обработки заказов, с готовыми обработками для 1С.
Если вместо готового REST API нужна более гибкая связка — например, свой middleware между 1С и сайтом с бизнес-логикой, которую WooCommerce API не покрывает — смотрите курс «Django и 1С»: там разбирается, как поднять собственную сервис-прослойку на Python вместо прямого обмена с плагином.