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 вместо прямого обмена с плагином.