Диагностика задачи: зачем нужен WooCommerce REST API для заказов
WooCommerce REST API предоставляет мощный инструмент для интеграции и автоматизации управления заказами на вашем сайте WordPress. Часто возникает необходимость программно получать данные по заказам, обновлять статусы, создавать или удалять заказы без захода в админку. Это особенно актуально при синхронизации с внешними CRM, ERP-системами или при разработке мобильных приложений для управления магазином.
Если вы столкнулись с задачей автоматизации работы с заказами, но не знаете, как корректно использовать API, эта статья подробно разберет практические сценарии и покажет, как обойти распространённые ошибки.
Как получить доступ к WooCommerce REST API
Создание ключей API
Для работы с заказами через REST API необходимо создать ключи доступа с нужными правами:
В админке WordPress перейдите в <strong>WooCommerce > Настройки > Дополнительно > REST API</strong>.
Нажмите «Добавить ключ». Задайте описание, выберите пользователя и права доступа «Чтение/Запись».
Сохраните и сохраните сгенерированные Consumer Key и Consumer Secret.Эти ключи будут использоваться при запросах для аутентификации через Basic Auth или OAuth 1.0.
Проверка подключения
Самый простой способ проверить доступ — сделать GET-запрос к API заказов:
curl -X GET https://example.com/wp-json/wc/v3/orders \
-u consumer_key:consumer_secretЕсли получите JSON с заказами — подключение работает.
Работа с заказами через API: основные методы
Получение списка заказов с фильтрацией
API позволяет не просто получить все заказы, но и фильтровать их по статусу, дате, клиенту и т.д. Пример запроса на получение всех заказов со статусом "processing":
GET https://example.com/wp-json/wc/v3/orders?status=processingПример PHP-кода с использованием Guzzle для получения заказов:
use GuzzleHttp\Client;
$client = new Client(['base_uri' => 'https://example.com']);
$response = $client->request('GET', '/wp-json/wc/v3/orders', [
'auth' => ['consumer_key', 'consumer_secret'],
'query' => ['status' => 'processing']
]);
$orders = json_decode($response->getBody(), true);
print_r($orders);Обновление статуса заказа
Чтобы изменить статус заказа, используйте PUT-запрос с указанием нового статуса:
PUT https://example.com/wp-json/wc/v3/orders/12345
{
"status": "completed"
}Пример кода для обновления заказа 12345 на PHP:
$response = $client->request('PUT', '/wp-json/wc/v3/orders/12345', [
'auth' => ['consumer_key', 'consumer_secret'],
'json' => ['status' => 'completed']
]);
$order = json_decode($response->getBody(), true);
echo "Статус обновлен: " . $order['status'];Пошаговое решение: автоматизация обновления статусов заказов
Шаг 1. Настройка API ключей
Создайте ключи с правами чтения/записи, как описано выше.
Шаг 2. Создание PHP-скрипта для запуска по cron
Напишите скрипт, который получает заказы со статусом "processing" и переводит их в "completed" после проверки условий (например, оплаты):
use GuzzleHttp\Client;
require 'vendor/autoload.php';
$client = new Client(['base_uri' => 'https://example.com']);
// Получаем заказы со статусом processing
$response = $client->request('GET', '/wp-json/wc/v3/orders', [
'auth' => ['consumer_key', 'consumer_secret'],
'query' => ['status' => 'processing']
]);
$orders = json_decode($response->getBody(), true);
foreach ($orders as $order) {
$order_id = $order['id'];
// Дополнительная логика проверки оплаты
// Если оплата подтверждена — обновляем статус
$client->request('PUT', "/wp-json/wc/v3/orders/{$order_id}", [
'auth' => ['consumer_key', 'consumer_secret'],
'json' => ['status' => 'completed']
]);
echo "Заказ #{$order_id} обновлен на completed\n";
}Шаг 3. Запуск скрипта по cron
Добавьте в crontab задачу:
*/15 * * * * /usr/bin/php /path/to/update-orders.php >> /var/log/update-orders.log 2>&1Проверка результата после внедрения
- Запустите скрипт вручную и убедитесь, что заказы обновляются корректно.
- Проверьте логи сервера и ошибок PHP.
- В админке WooCommerce убедитесь, что статус заказов изменился.
- Для запроса GET https://example.com/wp-json/wc/v3/orders?status=completed убедитесь, что новые заказы отображаются.
Частые ошибки и их устранение
- 401 Unauthorized — неверные ключи или недостаточные права. Проверьте права доступа ключа и правильность аутентификации.
- 404 Not Found — неправильный endpoint или неактивирован WooCommerce REST API. Проверьте URL и включен ли REST API в WooCommerce.
- 429 Too Many Requests — превышен лимит запросов. Добавьте задержки или кеширование.
- Неверный формат JSON — убедитесь, что тело запроса корректно сформировано и заголовки Content-Type установлены в application/json.
Практические советы по безопасности и производительности
- Используйте HTTPS для всех запросов к API.
- Не храните ключи API в общедоступных местах, используйте переменные окружения или конфигурационные файлы вне веб-директории.
- Ограничьте права ключей по необходимости — если нужен только просмотр заказов, выдавайте права только на чтение.
- Для высоконагруженных сайтов реализуйте кеширование ответов API, чтобы снизить нагрузку на сервер WooCommerce.
- Используйте библиотеку Guzzle (или аналог) для удобной работы с REST API вместо самописных curl-запросов.
Сравнение вариантов работы с заказами WooCommerce
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| REST API | Гибкость, интеграции, автоматизация, стандартизованный интерфейс | Требуется настройка авторизации, может быть медленнее при большом объеме | Интеграция с внешними системами, автоматизация процессов |
| WP CLI | Быстрое выполнение команд на сервере, подходит для массовых операций | Требуется SSH доступ, не подходит для внешних интеграций | Администрирование и массовое обновление заказов вручную или скриптами |
| Прямой доступ к базе данных | Максимальная скорость | Риск нарушения целостности данных, сложность поддержки | Очень специфичные задачи, когда API не подходит |