WooCommerce: не работает обновление статуса заказа через REST API — как исправить

Диагностика проблемы с обновлением статуса заказа через REST API WooCommerce

Если при попытке изменить статус заказа через REST API WooCommerce изменения не применяются, причина часто кроется в неправильной аутентификации, отсутствии нужных прав доступа, или в том, что вызываемый метод не обновляет статус корректно. Также возможны конфликты с плагинами безопасности или нестандартные фильтры, блокирующие изменение статуса.

Для начала проверьте следующие моменты:

  • Используется ли актуальный эндпоинт API и правильный HTTP-метод PUT или PATCH.
  • Передаются ли необходимые параметры, включая корректный status.
  • Есть ли у учетных данных (ключ и секрет) права на редактирование заказов.
  • Нет ли ошибок в ответе API (коды 401, 403, 400).
  • Не блокирует ли сервер или плагины запросы с нужным методом.

Как правильно обновить статус заказа через REST API WooCommerce

Для обновления статуса заказа используйте эндпоинт:

PUT /wp-json/wc/v3/orders/<order_id>

В теле запроса передайте JSON с нужным статусом, например:

{
  "status": "completed"
}

Пример кода на PHP с использованием WP HTTP API и базовой аутентификации:

$order_id = 123;
$api_url = home_url("/wp-json/wc/v3/orders/" . $order_id);

$args = [
    'method'  => 'PUT',
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode('consumer_key:consumer_secret'),
        'Content-Type'  => 'application/json',
    ],
    'body'    => json_encode(['status' => 'completed']),
];

$response = wp_remote_request($api_url, $args);
if (is_wp_error($response)) {
    error_log('Ошибка запроса: ' . $response->get_error_message());
} else {
    $code = wp_remote_retrieve_response_code($response);
    $body = wp_remote_retrieve_body($response);
    if ($code === 200) {
        error_log('Статус заказа успешно обновлен');
    } else {
        error_log('Ошибка API: ' . $code . ' - ' . $body);
    }
}

Проверка прав доступа и настроек REST API

Убедитесь, что ключи API созданы с правами read/write в WooCommerce > Настройки > Дополнительно > REST API. Попытайтесь выполнить запрос с помощью Postman или curl, чтобы исключить ошибки клиентского кода.

Пошаговое решение проблемы

  1. Проверьте аутентификацию: используйте базовую аутентификацию с ключами consumer_key и consumer_secret, либо OAuth 1.0a.
  2. Используйте правильный HTTP-метод: для обновления — PUT или PATCH.
  3. Передайте корректный статус: допустимые значения: pending, processing, on-hold, completed, cancelled, refunded, failed.
  4. Проверьте, не блокирует ли сервер методы PUT/PATCH: настройте .htaccess или серверные правила, чтобы разрешить эти методы.
  5. Отключите плагины безопасности временно: чтобы исключить блокировку REST API запросов.
  6. Проверьте, не переопределяет ли статус плагин: временно переключитесь на дефолтную тему и отключите дополнительные плагины.

Как проверить, что обновление статуса сработало

  • В ответе REST API должен вернуться объект заказа с новым статусом.
  • Посмотрите в админке WooCommerce — статус заказа должен измениться.
  • В базе данных в таблице wp_posts у записи типа shop_order поле post_status должно соответствовать новому статусу (например, wc-completed).

Частые ошибки и их причины

  • 401 Unauthorized: Неправильные ключи API или недостаточные права.
  • 403 Forbidden: Плагин безопасности или сервер блокирует запросы.
  • 400 Bad Request: Неправильный формат JSON или недопустимый статус.
  • Метод не разрешён: сервер не пропускает PUT/PATCH запросы.
  • Статус не меняется, но ответ 200: возможно, фильтры плагинов или кастомный код сбрасывают статус после обновления.

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

  • Используйте HTTPS: для защиты ключей API и данных.
  • Ограничьте права ключей API: давайте минимально необходимые полномочия.
  • Логируйте ошибки REST API: для быстрого выявления проблем.
  • Кэширование: не кэшируйте ответы REST API, чтобы избежать рассинхрона данных.

Сравнение способов обновления статуса заказа

МетодПлюсыМинусыКогда использовать
REST API PUT/PATCHСтандартный, работает удалённо, интеграцииТребует правильной аутентификации и настройки сервераИнтеграции с внешними сервисами, мобильные приложения
PHP код (wp_update_post + wc_update_order_status)Гибкий, работает внутри сайтаНельзя использовать вне WordPress окружения, требует хукаАвтоматизация внутри сайта, кастомные триггеры
Плагины для управления заказамиПростота использования, GUIМогут замедлять сайт, не всегда гибкиеДля администраторов без навыков программирования
Как настроить загрузку изображений по деме в WordPress
11.04.2026
Как добавить поддержку PHP 8.2 в WordPress и решить проблемы с совместимостью
20.02.2026
WooCommerce: не работают упаковки товаров — как исправить
22.07.2026
Автоматическое создание изображений thumbnail в WordPress: практическое руководство
18.12.2025
Как использовать хук pre_get_posts для фильтрации контента в WordPress
17.03.2026