WooCommerce: автоматическая удалённая отгрузка и синхронизация остатков товаров

Диагностика проблемы с удалённой отгрузкой и синхронизацией остатков

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

Типичные симптомы:

  • Некорректные остатки товара на сайте;
  • Заказы, которые оформляются с нулевым или отрицательным остатком;
  • Проблемы с массовым обновлением остатков через интерфейс админки;
  • Отсутствие уведомлений о статусе отгрузки товаров в удалённой системе.

Пошаговое решение: как настроить автоматическую удалённую отгрузку и синхронизацию остатков

1. Выбор способа интеграции с удалённой системой

Чаще всего связь с удалённой системой ведётся через API (REST или SOAP). Для WooCommerce понадобится написать кастомный плагин или использовать готовые решения для обмена данными. В этом примере рассмотрим базовый вариант с REST API.

2. Создание функции для отправки данных об отгрузке

Добавьте следующий код в файл functions.php или в собственный плагин, чтобы отправлять уведомления об отгрузке по REST API удалённой системы при смене статуса заказа:

add_action('woocommerce_order_status_completed', 'send_shipment_data_to_remote_system');
function send_shipment_data_to_remote_system($order_id) {
    $order = wc_get_order($order_id);
    $items = [];
    foreach ($order->get_items() as $item) {
        $items[] = [
            'product_id' => $item->get_product_id(),
            'quantity' => $item->get_quantity(),
        ];
    }
    $data = [
        'order_id' => $order_id,
        'items' => $items,
        'shipment_date' => current_time('mysql'),
    ];
    $response = wp_remote_post('https://remote-system.example/api/shipments', [
        'method' => 'POST',
        'headers' => [
            'Content-Type' => 'application/json',
            'Authorization' => 'Bearer YOUR_API_TOKEN',
        ],
        'body' => json_encode($data),
        'timeout' => 15,
    ]);
    if (is_wp_error($response)) {
        error_log('Ошибка отправки данных об отгрузке: ' . $response->get_error_message());
    } else {
        $code = wp_remote_retrieve_response_code($response);
        if ($code !== 200) {
            error_log('Ошибка API отгрузки: HTTP ' . $code);
        }
    }
}

3. Получение актуальных остатков с удалённого сервера и обновление в WooCommerce

Для регулярной синхронизации создайте cron-задачу, которая будет запрашивать остатки с API и обновлять их в WooCommerce:

add_action('wp_ajax_update_remote_stock', 'update_remote_stock_callback');
add_action('wp_ajax_nopriv_update_remote_stock', 'update_remote_stock_callback');

function update_remote_stock_callback() {
    $response = wp_remote_get('https://remote-system.example/api/stock', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_API_TOKEN',
        ],
        'timeout' => 20,
    ]);
    if (is_wp_error($response)) {
        wp_send_json_error('Ошибка запроса остатков');
        return;
    }
    $code = wp_remote_retrieve_response_code($response);
    if ($code !== 200) {
        wp_send_json_error('Ошибка API: HTTP ' . $code);
        return;
    }
    $stock_data = json_decode(wp_remote_retrieve_body($response), true);
    if (!is_array($stock_data)) {
        wp_send_json_error('Неверный формат данных');
        return;
    }
    foreach ($stock_data as $product_id => $stock_quantity) {
        $product = wc_get_product($product_id);
        if ($product) {
            $product->set_stock_quantity($stock_quantity);
            $product->save();
        }
    }
    wp_send_json_success('Остатки обновлены');
}

Чтобы запускать синхронизацию регулярно, можно добавить WP-Cron задачу:

if (!wp_next_scheduled('update_remote_stock_event')) {
    wp_schedule_event(time(), 'hourly', 'update_remote_stock_event');
}
add_action('update_remote_stock_event', 'update_remote_stock_callback');

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

  • Оформите заказ и переведите его в статус «Завершён» — проверьте логи сервера на наличие ошибок отправки.
  • Проверьте в удалённой системе наличие уведомления об отгрузке с правильными данными заказа.
  • Запустите вручную или дождитесь cron-задачи для обновления остатков — убедитесь, что количество товаров на сайте изменилось согласно данным удалённой системы.
  • Настройте системные логи и уведомления об ошибках для мониторинга работы интеграции.

Частые ошибки при настройке автоматической отгрузки и синхронизации

  • Неправильные API-ключи или токены — приводит к ошибкам авторизации, проверьте права доступа.
  • Отсутствие обработки ошибок HTTP-ответов — интеграция «тихо» ломается, ведите лог ошибок.
  • Запуск cron-задачи чаще, чем необходимо — может перегрузить сервер и API удалённой системы.
  • Некорректное сопоставление ID товаров — убедитесь, что product_id в WooCommerce и удалённой системе совпадают или есть маппинг.
  • Отсутствие проверки формата и структуры данных API — всегда валидируйте входящие данные.

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

  • Используйте безопасные методы аутентификации (OAuth или токены с ограниченным сроком).
  • Ограничивайте количество запросов к API удалённой системы, кэшируйте результаты при необходимости.
  • Для больших магазинов лучше реализовать пакетную обработку остатков и отгрузок, чтобы избежать таймаутов.
  • Обрабатывайте ошибки и исключения, чтобы избежать сбоя работы сайта.
  • Резервное копирование базы данных перед массовыми изменениями остатков.

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

МетодПреимуществаНедостатки
Кастомный плагин с REST APIГибкость, подходит под любые API, полный контрольТребует разработки, поддержки, ошибок при обновлениях
Готовые плагины (например, WP All Import + API)Быстрая настройка, поддержка разработчиковМогут быть дорогими, ограничены функционалом
Использование CSV/Excel выгрузокПростота, не требует программированияНет реального времени, ручная работа или сложные cron
Как создать собственный тип записи (Custom Post Type) в WordPress: подробное руководство
25.11.2025
Как использовать WPVIP для успешного управления большими WordPress-проектами
25.12.2025
Направление запроса и обработка данных в WordPress REST API
24.01.2026
Как добавить собственные поля в WordPress REST API
19.11.2025
Автоматизация обработки заказов в WordPress с помощью WPRemark
13.02.2026