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

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:

  1. В админке WordPress перейдите в WooCommerce > Настройки > Продвинутые > REST API.
  2. Нажмите «Добавить ключ» и введите описание, выберите пользователя и права доступа (чтение, запись или чтение/запись).
  3. Сохраните и получите 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 и возможности плагинов.

⭐⭐⭐⭐⭐