Использование REST API WooCommerce для синхронизации остатков товаров между сайтами

Диагностика проблемы: почему остатки товаров не синхронизируются

В случае ведения нескольких сайтов на WordPress с WooCommerce одной из частых задач является синхронизация остатков товаров между площадками. Без автоматизации часто возникает рассинхронизация: продажи на одном сайте не отражаются на остатках другого, что приводит к ошибочным заказам и неудовлетворённости клиентов.

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

  • Отсутствие единого источника данных для остатков;
  • Ручное обновление остатков, не учитывающее продажи на других площадках;
  • Отсутствие настроенного обмена данными через API между сайтами;
  • Разные версии WooCommerce или несовместимые настройки REST API.

Пошаговое решение: синхронизация остатков товаров с помощью REST API WooCommerce

1. Включение REST API и создание ключей доступа

На каждом сайте необходимо включить REST API и создать ключи с правами чтения и записи. Для этого:

  1. В админке WordPress перейдите в WooCommerce > Настройки > Расширенные > REST API.
  2. Добавьте ключ с описанием, выберите пользователя и установите права Read/Write.
  3. Сохраните ключи Consumer Key и Consumer Secret.

2. Получение остатков с источника и обновление на целевом сайте

Используем PHP-скрипт для извлечения информации о товарах с одного сайта и обновления остатков товаров на другом.

<?php
// Параметры API источника
$source_url = 'https://source-site.com/wp-json/wc/v3/products';
$consumer_key = 'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$consumer_secret = 'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXX';

// Параметры API целевого сайта
$target_url = 'https://target-site.com/wp-json/wc/v3/products/';
$target_consumer_key = 'ck_YYYYYYYYYYYYYYYYYYYYYYYYYYYY';
$target_consumer_secret = 'cs_YYYYYYYYYYYYYYYYYYYYYYYYYYYY';

// Получаем список товаров с источника
$response = wp_remote_get($source_url . '?consumer_key=' . $consumer_key . '&consumer_secret=' . $consumer_secret);
if (is_wp_error($response)) {
    die('Ошибка при запросе к API источника');
}
$products = json_decode(wp_remote_retrieve_body($response), true);

foreach ($products as $product) {
    $product_id = $product['id'];
    $stock_quantity = $product['stock_quantity'];

    // Формируем данные для обновления
    $data = json_encode(['stock_quantity' => $stock_quantity]);

    // Обновляем остаток на целевом сайте
    $ch = curl_init($target_url . $product_id);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, $target_consumer_key . ':' . $target_consumer_secret);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

    $result = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($http_code !== 200) {
        error_log('Ошибка обновления товара ID ' . $product_id . ': ' . $result);
    }
}
?>

Проверка результата после внедрения

Для проверки корректности синхронизации:

  • Создайте тестовый заказ на одном сайте, уменьшив остаток товара.
  • Запустите скрипт синхронизации (выше) или настройте планировщик (cron) для автоматического запуска.
  • Проверьте, что остаток товара на втором сайте уменьшился в соответствии с заказом.
  • В админке WooCommerce обоих сайтов убедитесь, что значения совпадают.

Частые ошибки и как их исправить

  • Ошибка 401 Unauthorized — неверные ключи REST API или недостаточно прав. Проверьте права пользователя, создайте новые ключи.
  • Ошибка 404 Not Found — неверный URL API. Проверьте правильность пути /wp-json/wc/v3/products.
  • Несовпадение ID товаров — ID продуктов на разных сайтах отличаются, поэтому по ним нельзя обновить остаток. Используйте SKU для сопоставления (требует доработки скрипта).
  • Отсутствие stock_quantity в ответе API — проверьте, что в настройках продуктов включён учёт остатков.

Практические советы по безопасности и производительности

  • Храните ключи Consumer Key и Secret в защищённых файлах вне публичного доступа.
  • Ограничьте IP-адреса, с которых разрешён доступ к REST API, если возможно.
  • Для большого каталога используйте пакетную обработку или WP-CLI для уменьшения нагрузки.
  • Обрабатывайте ошибки API и логируйте неудачные обновления для последующего анализа.

Сравнение вариантов синхронизации остатков WooCommerce

МетодПлюсыМинусыПрименимость
REST API (код)Гибкость, интеграция без плагиновТребует знаний PHP и APIДля разработчиков и кастомных интеграций
Плагины синхронизацииПростота установки, готовые решенияМожет нагружать сайт, ограничена функциональностьДля быстрого запуска и без разработки
Базы данных и репликацияМаксимальная скорость, централизованный учетСложность настройки, требует сервера с доступом к БДДля крупных проектов с единым складом
WooCommerce: установка и настройка webhook для интеграции с внешними сервисами
31.05.2026
Как удалить оставшиеся данные от удалённых плагинов WordPress
29.11.2025
Как исправить проблему с несинхронизированным статусом заказов WooCommerce между сайтами
18.04.2026
Автоматическая синхронизация пользовательских данных WordPress между сайтами
17.11.2025
Как синхронизировать заказы WooCommerce со сторонними складскими системами
22.04.2026