wp-lessons.ru wordpress WP-Lessons

Как использовать WooCommerce REST API для управления заказами

Диагностика задачи: зачем использовать WooCommerce REST API для заказов

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

Основы работы с WooCommerce REST API для заказов

1. Получение ключей API

Для доступа к REST API нужно создать ключи в админке WordPress: WooCommerce > Настройки > Продвинутые > REST API. Создайте нового пользователя с минимально необходимыми правами и получите Consumer Key и Consumer Secret. Они понадобятся для аутентификации.

2. Аутентификация и базовый запрос

WooCommerce поддерживает OAuth 1.0a и Basic Auth (через HTTPS). Для PHP обычно проще использовать Basic Auth с библиотекой Guzzle или cURL.

 $url = 'https://example.com/wp-json/wc/v3/orders';
 $consumer_key = 'ck_xxxxx';
 $consumer_secret = 'cs_xxxxx';

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_USERPWD, $consumer_key . ':' . $consumer_secret);
 $response = curl_exec($ch);
 curl_close($ch);

 $orders = json_decode($response, true);
 print_r($orders); 

Пошаговое решение: получение, обновление и фильтрация заказов

Шаг 1. Получить список заказов с фильтрацией по статусу

Для получения заказов с определённым статусом (например, "processing") используйте параметр status в запросе.

 $url = 'https://example.com/wp-json/wc/v3/orders?status=processing'; 

Пример запроса с использованием cURL аналогичен предыдущему, только меняется URL.

Шаг 2. Обновить статус заказа

Для изменения статуса заказа нужно отправить PATCH-запрос с нужным полем status.

 $order_id = 1234;
 $url = "https://example.com/wp-json/wc/v3/orders/{$order_id}";
 $data = json_encode(['status' => 'completed']);

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_USERPWD, $consumer_key . ':' . $consumer_secret);
 curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

 $response = curl_exec($ch);
 curl_close($ch);

 $updated_order = json_decode($response, true);
 print_r($updated_order); 

Шаг 3. Создать заказ через API

Для создания нового заказа отправьте POST-запрос с минимальным набором данных.

 $url = 'https://example.com/wp-json/wc/v3/orders';
 $order_data = [
     'payment_method' => 'bacs',
     'payment_method_title' => 'Direct Bank Transfer',
     'set_paid' => true,
     'billing' => [
         'first_name' => 'Иван',
         'last_name' => 'Иванов',
         'email' => 'ivan@example.com',
         'phone' => '1234567890'
     ],
     'line_items' => [
         [
             'product_id' => 93,
             'quantity' => 1
         ]
     ]
 ];

 $data = json_encode($order_data);

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_USERPWD, $consumer_key . ':' . $consumer_secret);
 curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

 $response = curl_exec($ch);
 curl_close($ch);

 $new_order = json_decode($response, true);
 print_r($new_order); 

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

  • Проверьте HTTP-код ответа (должен быть 200 для GET, 201 для POST).
  • Убедитесь, что данные возвращаются корректно (например, статус заказов соответствует фильтру).
  • После обновления заказа проверьте изменения в админке WooCommerce.
  • Для создания заказа проверьте, что новый заказ появился в списке и содержит нужные данные.

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

  • 401 Unauthorized: Проверьте правильность ключей Consumer Key/Secret и используйте HTTPS.
  • 404 Not Found: Проверьте URL API, правильность версии (например, /wc/v3/) и наличие WooCommerce.
  • 400 Bad Request: Проверьте формат JSON и обязательные поля в запросе.
  • Ошибка «Method Not Allowed»: используйте правильный HTTP-метод (GET, POST, PUT).
  • Проблемы с CORS при вызове API с фронтенда – используйте серверный прокси или настройте заголовки.

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

  • Используйте HTTPS для всех запросов к API.
  • Создавайте отдельного пользователя с ограниченными правами для API-ключей.
  • Ограничьте IP-доступ к API, если возможно.
  • Кешируйте результаты GET-запросов для снижения нагрузки.
  • Обрабатывайте ошибки и исключения в коде, чтобы избежать сбоев.

Сравнение способов работы с заказами WooCommerce

МетодПлюсыМинусыПример использования
REST APIСтандартизовано, работает удалённо, подходит для интеграцийТребует аутентификации, ограничена скорость запросовАвтоматическое обновление статусов, интеграция с CRM
WP функции (PHP)Прямой доступ к данным, без сетевых запросовРаботает только внутри сайта, требует загрузки WP средыАвтоматизация внутри темы или плагина
ПлагиныУпрощают работу, дают UIМогут быть тяжёлыми, ограничены функционаломУправление заказами через админку, отчёты
×
ABC
Pagination
Улучшай навигацию на сайте за секунды!
-15%

на ABC Pagination плагин WordPress

Сделать красиво ⋙