Диагностика проблемы: почему не проходит обновление статуса заказа через REST API
Частая ситуация — попытка обновить статус заказа через WooCommerce REST API завершается ошибкой 401 Unauthorized или 403 Forbidden. Это обычно связано с неправильной авторизацией или отсутствием необходимых прав у пользователя/API ключа. Другие причины — неверный формат запроса или неправильный endpoint.
Шаг 1: Настройка авторизации через токен (Basic Auth или OAuth 1.0a)
WooCommerce REST API по умолчанию поддерживает авторизацию по API ключам (Consumer Key и Consumer Secret), которые создаются в админке WooCommerce в разделе WooCommerce > Настройки > Advanced > REST API.
Для большинства задач рекомендуем использовать Basic Authentication с API ключами, так как OAuth 1.0a сложнее для настройки.
Пример заголовка с Basic Auth для запроса на PHP:
$consumer_key = 'ck_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$consumer_secret = 'cs_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$auth = base64_encode($consumer_key . ':' . $consumer_secret);
$headers = [
'Authorization: Basic ' . $auth,
'Content-Type: application/json'
];Шаг 2: Обновление статуса заказа через REST API
Для обновления статуса заказа используйте PUT запрос к endpoint:
https://example.com/wp-json/wc/v3/orders/{order_id}Тело запроса в формате JSON должно содержать поле status с новым статусом. Например, чтобы установить статус completed:
{
"status": "completed"
}Пример запроса на PHP с использованием cURL:
$order_id = 123;
$data = json_encode(['status' => 'completed']);
$ch = curl_init("https://example.com/wp-json/wc/v3/orders/" . $order_id);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code === 200) {
echo "Статус заказа обновлен успешно.";
} else {
echo "Ошибка обновления статуса: " . $response;
}Проверка результата после внедрения
- В ответе API должен быть JSON с обновленными данными заказа, в частности
statusдолжен совпадать с отправленным. - В админке WooCommerce в разделе заказов проверьте, что статус выбранного заказа действительно изменился.
- При возникновении ошибки смотрите HTTP код ответа и тело сообщения — там обычно указана причина.
Частые ошибки и как их исправить
- 401 Unauthorized: неверные ключи Consumer Key/Secret или неправильный формат авторизации. Проверьте базовую авторизацию и ключи.
- 403 Forbidden: недостаточно прав у пользователя API. Убедитесь, что API ключ создан с правами на запись (read/write).
- 404 Not Found: неверный endpoint или ID заказа. Проверьте URL и существование заказа.
- 400 Bad Request: неверный формат JSON или поле
statusсодержит неподдерживаемое значение. Используйте допустимые статусы:pending,processing,on-hold,completed,cancelled,refunded,failed.
Практические советы по безопасности и производительности
- Используйте HTTPS для всех запросов к REST API, чтобы защитить ключи и данные.
- Ограничьте права API ключа только необходимым минимумом (например, только на запись заказов).
- Не храните ключи прямо в коде — используйте переменные окружения или wp-config.php.
- Для массового обновления статусов заказов используйте пакетные запросы или очереди, чтобы не перегружать сервер.
Чек-лист для успешного обновления статуса заказа через WooCommerce REST API
- Созданы API ключи с правами read/write в WooCommerce.
- Используется HTTPS и Basic Authentication с правильным кодированием ключей.
- Правильно сформирован PUT запрос на endpoint
/wp-json/wc/v3/orders/{order_id}. - В теле запроса JSON с корректным полем
statusи значением. - Обработка ответа API для проверки успешности запроса.
- Логирование ошибок для последующего анализа.