WooCommerce предоставляет мощный REST API, который позволяет разработчикам управлять заказами напрямую из внешних приложений или скриптов. В этой статье подробно рассмотрим, как с помощью REST API можно создавать, изменять и получать заказы WooCommerce, а также автоматизировать процессы управления заказами.
Что такое WooCommerce REST API и зачем он нужен для работы с заказами
REST API WooCommerce — это интерфейс программирования, который предоставляет доступ к данным магазина через HTTP-запросы. С его помощью можно управлять товарами, заказами, клиентами и другими сущностями без необходимости заходить в админку WordPress. Особенно полезен API для интеграций, автоматизации и создания кастомных решений.
Для заказов REST API позволяет:
- Получать список заказов с фильтрами;
- Создавать новые заказы программно;
- Обновлять статус, данные клиента, товары в заказе;
- Удалять заказы, если это необходимо.
Работать с API можно через любые HTTP-клиенты, например, Postman, curl, или средствами PHP, JavaScript и других языков.
Настройка доступа к WooCommerce REST API
Прежде чем начать работу, необходимо получить ключи доступа к WooCommerce API:
- В админке WordPress перейдите в WooCommerce > Настройки > Продвинутые > REST API.
- Нажмите «Добавить ключ» и введите описание, выберите пользователя и права доступа (чтение, запись или чтение/запись).
- Сохраните и получите Consumer Key и Consumer Secret — они понадобятся для аутентификации.
Для аутентификации используется базовая авторизация через HTTP или подпись запросов. В простых случаях можно использовать HTTPS и базовую авторизацию.
Примеры работы с заказами через REST API
Получение списка заказов
Для получения всех заказов отправим GET-запрос на /wp-json/wc/v3/orders. Пример с использованием PHP и библиотеки Guzzle:
function wpmarket_get_orders() {
$url = 'https://your-site.ru/wp-json/wc/v3/orders';
$consumer_key = 'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$consumer_secret = 'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', $url, [
'auth' => [$consumer_key, $consumer_secret]
]);
$orders = json_decode($response->getBody(), true);
return $orders;
}
В ответ мы получим массив заказов с полной информацией: ID, статус, список товаров, данные клиента и т.п.
Создание нового заказа
Для создания заказа отправляем POST-запрос с необходимыми параметрами. Пример тела запроса:
{
"payment_method": "bacs",
"payment_method_title": "Direct Bank Transfer",
"set_paid": true,
"billing": {
"first_name": "Иван",
"last_name": "Иванов",
"email": "ivanov@example.com",
"phone": "1234567890",
"address_1": "ул. Примерная, 1",
"city": "Москва",
"state": "MSK",
"postcode": "101000",
"country": "RU"
},
"line_items": [
{
"product_id": 93,
"quantity": 2
}
]
}
Пример создания заказа через PHP:
function wpmarket_create_order() {
$url = 'https://your-site.ru/wp-json/wc/v3/orders';
$consumer_key = 'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$consumer_secret = 'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$data = [
'payment_method' => 'bacs',
'payment_method_title' => 'Direct Bank Transfer',
'set_paid' => true,
'billing' => [
'first_name' => 'Иван',
'last_name' => 'Иванов',
'email' => 'ivanov@example.com',
'phone' => '1234567890',
'address_1' => 'ул. Примерная, 1',
'city' => 'Москва',
'state' => 'MSK',
'postcode' => '101000',
'country' => 'RU'
],
'line_items' => [
[
'product_id' => 93,
'quantity' => 2
]
]
];
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $url, [
'auth' => [$consumer_key, $consumer_secret],
'json' => $data
]);
return json_decode($response->getBody(), true);
}
Обновление статуса заказа
Для изменения статуса заказа отправляем PUT-запрос на /wp-json/wc/v3/orders/{order_id} с параметром status. Например, чтобы пометить заказ как выполненный:
{
"status": "completed"
}
Пример кода:
function wpmarket_update_order_status($order_id, $new_status) {
$url = "https://your-site.ru/wp-json/wc/v3/orders/{$order_id}";
$consumer_key = 'ck_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$consumer_secret = 'cs_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$data = [
'status' => $new_status
];
$client = new \GuzzleHttp\Client();
$response = $client->request('PUT', $url, [
'auth' => [$consumer_key, $consumer_secret],
'json' => $data
]);
return json_decode($response->getBody(), true);
}
Фильтрация и поиск заказов через REST API
API позволяет получать заказы с фильтрами, например, по статусу, дате, клиенту или сумме. Это удобно для создания отчетов или систем мониторинга.
Пример запроса с фильтром по статусу и дате создания:
GET /wp-json/wc/v3/orders?status=processing&after=2024-01-01T00:00:00
Также поддерживаются параметры:
before— дата до;customer— ID клиента;min_priceиmax_price— диапазон суммы;orderbyиorder— сортировка.
Так можно быстро получить нужный набор заказов без дополнительной обработки на стороне клиента.
Практические советы и рекомендации
1. Используйте HTTPS для защиты данных при работе с API.
2. Обрабатывайте ошибки и проверяйте коды ответа сервера, чтобы гарантировать корректную работу интеграции.
3. Минимизируйте количество запросов — если нужно получить много заказов, используйте пагинацию (per_page и page параметры).
4. Кэшируйте результаты, если данные не требуют мгновенного обновления, чтобы снизить нагрузку на сервер.
5. Для удобства и расширяемости можно создать собственный плагин с функциями-обертками вокруг REST API, например, wpmarket_get_orders(), wpmarket_create_order() и wpmarket_update_order_status(), которые приведены выше.
Интеграция с плагинами WPShop для расширения возможностей WooCommerce
Если вы используете продукты с wpshop.ru, например, WPRemark для отзывов или WPMarket для автоматизации импорта товаров, REST API становится еще более полезным инструментом для синхронизации данных и автоматизации процессов.
Например, можно автоматически создавать заказы, полученные из внешних CRM, или обновлять статусы в зависимости от действий в других системах, используя REST API и возможности плагинов.