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

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

При работе с WooCommerce REST API часто возникает задача обновить статус заказа программно. Однако многие разработчики сталкиваются с ошибками авторизации или недостатком прав, из-за чего запросы на изменение статуса возвращают 401 Unauthorized или 403 Forbidden. Основные причины:

  • Неправильный способ авторизации — использован базовый ключ или устаревший метод.
  • Отсутствие необходимых прав у API пользователя для редактирования заказов.
  • Неверный формат запроса — не переданы обязательные заголовки или тело запроса.

Для успешного обновления статуса заказа через REST API нужно использовать OAuth 1.0a, Basic Auth с HTTPS или JWT-токены, если установлен соответствующий плагин. В этой статье рассмотрим авторизацию с использованием токена и пример обновления статуса.

Как правильно настроить авторизацию с токеном в WooCommerce REST API

1. Получение токена (JWT) для доступа к API

WooCommerce по умолчанию не поддерживает JWT, поэтому нужно установить плагин, например Clearfy Pro или JWT Authentication for WP REST API. После установки и активации плагина:

  1. Отправьте POST-запрос на /wp-json/jwt-auth/v1/token с параметрами username и password пользователя, который имеет права редактирования заказов.
  2. В ответе получите token — JWT токен.
POST https://site.com/wp-json/jwt-auth/v1/token
Content-Type: application/json

{
  "username": "apiuser",
  "password": "securepassword"
}

Ответ:

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
  "user_email": "apiuser@example.com",
  "user_nicename": "apiuser",
  "user_display_name": "API User"
}

2. Добавление токена в заголовок запроса

Далее для запросов к WooCommerce REST API в заголовках нужно передавать авторизацию:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...

Практическое решение: обновление статуса заказа через REST API с токеном

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

PUT https://site.com/wp-json/wc/v3/orders/123
Content-Type: application/json
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...

{
  "status": "completed"
}

Где:

  • 123 — ID заказа в WooCommerce.
  • completed — новый статус заказа. Возможные статусы: pending, processing, on-hold, completed, cancelled, refunded, failed.

Обратите внимание:

  • Запрос должен быть HTTPS для безопасности.
  • Пользователь, от имени которого получен токен, должен иметь роль с правами изменять заказы (обычно shop_manager или administrator).

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

Чтобы убедиться, что обновление прошло успешно:

  • Отправьте GET-запрос на /wp-json/wc/v3/orders/123 с тем же токеном.
  • Проверьте поле status в ответе — оно должно совпадать с тем, что вы установили.
GET https://site.com/wp-json/wc/v3/orders/123
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...

Ответ:

{
  "id": 123,
  "status": "completed",
  ...
}

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

  • 401 Unauthorized — неверный токен или он не передан. Проверьте заголовок Authorization и срок действия токена.
  • 403 Forbidden — недостаточно прав у пользователя. Проверьте роль и capabilities пользователя, используемого для аутентификации.
  • 400 Bad Request — неверный формат JSON или неправильное поле в теле запроса. Используйте валидатор JSON и документацию WooCommerce REST API.
  • SSL-ошибки — запросы должны идти по HTTPS, иначе авторизация не будет работать.

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

  • Всегда используйте HTTPS для вызовов REST API — это защищает токены и данные.
  • Создайте отдельного пользователя с минимально необходимыми правами для API-запросов, чтобы ограничить риски.
  • Ротация токенов: меняйте токены регулярно, чтобы избежать компрометации.
  • Логируйте ошибки и успешные обновления для аудита и мониторинга.
  • Для массового обновления заказов делайте запросы пакетно, чтобы снизить нагрузку на сервер.

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

  1. Установлен и настроен JWT или другой метод авторизации с поддержкой токенов.
  2. Получен валидный токен доступа.
  3. Пользователь с необходимыми правами для редактирования заказов.
  4. Запросы отправляются по HTTPS с заголовком Authorization: Bearer <token>.
  5. Тело запроса содержит правильный JSON с новым статусом.
  6. Проверена корректность ID заказа и существующий статус.
  7. Проверен результат через GET-запрос.

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

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

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