Диагностика проблемы с обновлением статуса заказа через 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, чтобы исключить ошибки клиентского кода.
Пошаговое решение проблемы
- Проверьте аутентификацию: используйте базовую аутентификацию с ключами consumer_key и consumer_secret, либо OAuth 1.0a.
- Используйте правильный HTTP-метод: для обновления — PUT или PATCH.
- Передайте корректный статус: допустимые значения:
pending,processing,on-hold,completed,cancelled,refunded,failed. - Проверьте, не блокирует ли сервер методы PUT/PATCH: настройте .htaccess или серверные правила, чтобы разрешить эти методы.
- Отключите плагины безопасности временно: чтобы исключить блокировку REST API запросов.
- Проверьте, не переопределяет ли статус плагин: временно переключитесь на дефолтную тему и отключите дополнительные плагины.
Как проверить, что обновление статуса сработало
- В ответе 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 | Могут замедлять сайт, не всегда гибкие | Для администраторов без навыков программирования |