WooCommerce REST API: распространённые ошибки и как их исправить

Почему возникают ошибки при работе с WooCommerce REST API?

WooCommerce REST API — мощный инструмент для интеграции и автоматизации, но часто разработчики сталкиваются с ошибками, связанными с авторизацией, форматом запросов, правами доступа и лимитами API. Понимание источника ошибок помогает быстро исправить проблему и избежать простоев.

Диагностика проблем с API

Для начала определим, с чего начать диагностику:

  • Проверить статус ответа API (HTTP-код).
  • Изучить тело ответа на наличие сообщений об ошибках.
  • Проверить настройки ключей доступа и прав пользователя.
  • Логировать запросы и ответы для анализа.
add_action('rest_api_init', function () {
    register_rest_route('custom/v1', '/log', [
        'methods' => 'POST',
        'callback' => function ($request) {
            error_log(print_r($request->get_params(), true));
            return new WP_REST_Response('Logged', 200);
        },
        'permission_callback' => '__return_true',
    ]);
});

Этот код поможет логировать параметры запросов для отладки.

Частые ошибки при работе с WooCommerce REST API и их исправления

1. Ошибка 401 Unauthorized — проблемы с аутентификацией

Причина: неверные ключи API, неправильный метод передачи, отсутствие SSL при использовании OAuth.

Решение:

  • Проверьте правильность Consumer Key и Consumer Secret.
  • Используйте базовую аутентификацию через HTTPS или OAuth 1.0a.
  • Обязательно включите SSL (https://) на сайте, иначе WooCommerce откажет в доступе.
// Пример базовой авторизации в PHP c использованием cURL
$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_URL => 'https://example.com/wp-json/wc/v3/orders',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD => 'consumer_key:consumer_secret',
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;

2. Ошибка 403 Forbidden — недостаточно прав пользователя

Причина: пользователь, к которому привязаны ключи, не имеет нужных ролей или прав.

Решение: назначьте пользователю роль «Shop Manager» или «Administrator» в WordPress. Для проверки и изменения ролей используйте плагин User Role Editor или код:

$user = new WP_User($user_id);
$user->set_role('shop_manager');

3. Ошибка 400 Bad Request — неверный формат запроса

Причина: неправильные параметры, отсутствующие обязательные поля, ошибки в JSON.

Решение: внимательно сверяйте тело запроса с документацией API: https://woocommerce.github.io/woocommerce-rest-api-docs/#create-an-order

Пример правильного JSON для создания заказа:

{
  "payment_method": "bacs",
  "payment_method_title": "Direct Bank Transfer",
  "set_paid": true,
  "billing": {
    "first_name": "Иван",
    "last_name": "Иванов",
    "address_1": "ул. Ленина, 1",
    "city": "Москва",
    "postcode": "123456",
    "country": "RU",
    "email": "ivan@example.com",
    "phone": "1234567890"
  },
  "line_items": [
    {
      "product_id": 93,
      "quantity": 2
    }
  ]
}

Как проверить, что ошибка устранена

После корректировки ключей и запросов выполните простой GET-запрос для получения списка заказов:

curl -X GET https://example.com/wp-json/wc/v3/orders \
    -u consumer_key:consumer_secret

Если ответ приходит с HTTP 200 и JSON-массивом заказов, значит, настройка успешна.

Чек-лист для отладки WooCommerce REST API

  • Проверить, что сайт работает по HTTPS.
  • Убедиться, что ключи API активны и соответствуют нужному пользователю.
  • Проверить роль пользователя (shop_manager или выше).
  • Проверить формат и обязательные поля в теле запроса.
  • Логировать запросы и ответы для детального анализа.
  • Проверить настройки сервера, которые могут блокировать запросы (например, mod_security).

Частые ошибки и их причины

  • Ошибка 401 при правильных ключах: отсутствие SSL или неправильный способ передачи авторизации.
  • Ошибка 403 при адекватных правах: конфликт плагинов безопасности или ограничение на уровне сервера.
  • Ошибка 400 при валидном JSON: неверный endpoint или устаревшая версия API.
  • Проблемы с CORS при фронтенд-запросах: отсутствуют нужные заголовки на сервере.

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

  • Используйте HTTPS для всех API-запросов.
  • Регулярно обновляйте WooCommerce и WordPress до последних версий.
  • Ограничьте права ключей API только необходимыми для задачи.
  • Включите логирование запросов при разработке и отключайте в продакшене.
  • Для массовых операций используйте пагинацию и batch-запросы, чтобы избежать перегрузки сервера.
  • Проверяйте лимиты API и настройки хостинга на максимальное время выполнения скриптов.

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

МетодПлюсыМинусыКогда использовать
Basic Auth (Consumer Key/Secret)Просто настроить, поддерживается из коробкиТребует HTTPS, передача ключей в заголовкахСервер поддерживает SSL, интеграции с backend
OAuth 1.0aБезопасный, не требует HTTPSСложнее в настройке и реализацииКогда SSL недоступен, сложные интеграции
JWT (через сторонние плагины)Гибкая авторизация, подходит для SPA и мобильныхТребует дополнительной настройки и плагиновФронтенд приложения, мобильные клиенты

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