Диагностика проблемы: почему обновление статуса заказа через 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 на успешное обновление
- Логи ошибок включены для отладки