WooCommerce REST API: авторизация и обновление статуса заказов без ошибок

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

Частая проблема при работе с WooCommerce REST API — невозможность обновить статус заказа из-за ошибок авторизации или неверного формата запроса. Ошибки типа 401 Unauthorized, 403 Forbidden или 400 Bad Request встречаются из-за неправильной настройки ключей API, недостаточных прав пользователя или ошибки в теле запроса.

Для диагностики первым делом проверьте:

  • Правильность API ключей (Consumer Key и Consumer Secret);
  • Права пользователя, к которому привязаны ключи (рекомендуется роль shop_manager или administrator);
  • Формат запроса: URL, HTTP-метод и тело запроса;
  • Настройки WooCommerce по REST API (включен ли API и разрешены ли необходимые методы);
  • Ошибки сервера в логах (wp-content/debug.log при включенном WP_DEBUG).

Пошаговое решение: корректная авторизация и обновление статуса заказа

1. Генерация API ключей с нужными правами

В админке WooCommerce перейдите в WooCommerce > Settings > Advanced > REST API, нажмите «Add key». Выберите пользователя с ролью shop_manager или administrator, выставьте права Read/Write. Сохраните и скопируйте Consumer Key и Consumer Secret.

2. Формирование запроса на обновление статуса заказа

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

https://example.com/wp-json/wc/v3/orders/<order_id>

Где <order_id> — ID заказа. Тело запроса должно быть JSON с полем status:

{
  "status": "completed"
}

Для авторизации используйте базовую авторизацию с Consumer Key и Secret в качестве логина и пароля, или добавьте их в URL:

https://consumer_key:consumer_secret@example.com/wp-json/wc/v3/orders/123

Пример curl-запроса:

curl -X PUT https://consumer_key:consumer_secret@example.com/wp-json/wc/v3/orders/123 \
-H "Content-Type: application/json" \
-d '{"status": "completed"}'

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

После выполнения запроса проверьте статус HTTP 200 OK и ответ с обновленными данными заказа. В ответе в поле status должен быть новый статус (например, completed).

Также зайдите в админку WooCommerce и убедитесь, что заказ действительно получил новый статус.

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

  • 401 Unauthorized — ключи API неверны или пользователь не имеет прав. Проверьте ключи, роль пользователя и что REST API включён.
  • 403 Forbidden — недостаточно прав для обновления заказа. Убедитесь, что ключи имеют права Read/Write.
  • 400 Bad Request — неверный формат JSON или попытка установить несуществующий статус. Проверьте, что статус из списка pending, processing, on-hold, completed, cancelled, refunded, failed.
  • SSL Ошибки — если используется HTTPS, убедитесь, что SSL-сертификат корректен и сервер поддерживает TLS 1.2+.

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

  • Не храните ключи API в открытом коде — используйте переменные окружения или безопасные хранилища.
  • Ограничьте права API ключа строго необходимыми для задачи.
  • Используйте HTTPS для всех запросов к REST API.
  • Для массовых изменений статусов используйте пакетные запросы с лимитами, чтобы избежать ошибок 429 Too Many Requests.
  • Логируйте ответы API и ошибки для последующего анализа.

Сравнение вариантов авторизации WooCommerce REST API

МетодПлюсыМинусы
Basic Auth с Consumer Key/SecretПрост в реализации, поддерживается по умолчаниюНеобходим HTTPS, ключи передаются в каждом запросе
OAuth 1.0aБолее безопасен, поддерживает подпись запросовСложнее реализовать, требуется дополнительная настройка
JWT (через плагины)Удобен для SPA и мобильных приложенийТребует установки и настройки плагинов

Чек-лист для обновления статуса заказа через WooCommerce REST API

  • Созданы API ключи с правами Read/Write
  • Пользователь API имеет роль shop_manager или выше
  • Используется HTTPS для запросов
  • Формат запроса корректен (метод PUT, JSON с полем status)
  • Статус заказа в списке допустимых значений
  • Проверен ответ API на успешное обновление
  • Логи ошибок включены для отладки

Шаблоны для WP Плагины для WP