Диагностика задачи: зачем использовать 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 | Могут быть тяжёлыми, ограничены функционалом | Управление заказами через админку, отчёты |