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

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

  1. Созданы API ключи с правами read/write в WooCommerce.
  2. Используется HTTPS и Basic Authentication с правильным кодированием ключей.
  3. Правильно сформирован PUT запрос на endpoint /wp-json/wc/v3/orders/{order_id}.
  4. В теле запроса JSON с корректным полем status и значением.
  5. Обработка ответа API для проверки успешности запроса.
  6. Логирование ошибок для последующего анализа.

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