Автоматизация работы с заказами — одна из ключевых задач для сайтов на WordPress, особенно если ваша система должна интегрироваться с внешними сервисами или мобильными приложениями. В этой статье разберём, как создавать и обновлять заказы через REST API WordPress, используя кастомные эндпоинты и примеры кода для быстрого запуска.
Почему REST API — эффективное решение для работы с заказами в WordPress
REST API позволяет обмениваться данными между WordPress и внешними системами по стандартному протоколу HTTP. Это значит, что можно создавать, обновлять, получать и удалять заказы из других приложений, не заходя в админку. Такой подход экономит время, уменьшает ошибки при ручном вводе и открывает возможности для интеграции с CRM, складскими системами и мобильными приложениями.
Кроме того, REST API легко расширяется, и при необходимости можно создавать свои собственные маршруты для работы с заказами, включая необходимые проверки и логику.
Для примера рассмотрим работу с заказами WooCommerce, так как это самая популярная платформа для интернет-магазинов на WordPress. Если у вас кастомная реализация заказов, принципы будут аналогичны.
Создание собственного REST API эндпоинта для создания заказов
Чтобы расширить стандартный REST API WooCommerce или WordPress, добавим собственный маршрут, который позволит создавать заказы с нужной бизнес-логикой. Вот простой пример добавления такого эндпоинта в файл functions.php вашей темы или в отдельный плагин:
add_action('rest_api_init', function () {
register_rest_route('wporder/v1', '/create-order', array(
'methods' => 'POST',
'callback' => 'wporder_create_order',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
));
});
function wporder_create_order(WP_REST_Request $request) {
$params = $request->get_json_params();
if (empty($params['customer_id']) || empty($params['items'])) {
return new WP_Error('missing_data', 'Необходимо передать customer_id и items', array('status' => 400));
}
$order = wc_create_order(array('customer_id' => $params['customer_id']));
foreach ($params['items'] as $item) {
if (empty($item['product_id']) || empty($item['quantity'])) {
continue;
}
$order->add_product(wc_get_product($item['product_id']), $item['quantity']);
}
$order->calculate_totals();
$order->save();
return array('order_id' => $order->get_id(), 'status' => 'created');
}
В этом коде мы регистрируем маршрут wporder/v1/create-order, который принимает POST-запрос с JSON, содержащим ID клиента и массив товаров с их количеством. Создаётся заказ, добавляются товары, рассчитывается сумма и сохраняется заказ. В ответ возвращается ID созданного заказа и статус.
Обновление статусов заказов через REST API
Частая задача — менять статус заказа, например, после оплаты или обработки. Для этого создадим ещё один эндпоинт:
add_action('rest_api_init', function () {
register_rest_route('wporder/v1', '/update-order-status/(?P<id>\d+)', array(
'methods' => 'POST',
'callback' => 'wporder_update_order_status',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
));
});
function wporder_update_order_status(WP_REST_Request $request) {
$order_id = $request->get_param('id');
$params = $request->get_json_params();
if (empty($params['status'])) {
return new WP_Error('missing_status', 'Необходимо указать статус', array('status' => 400));
}
$order = wc_get_order($order_id);
if (!$order) {
return new WP_Error('order_not_found', 'Заказ не найден', array('status' => 404));
}
$valid_statuses = wc_get_order_statuses();
$new_status = sanitize_text_field($params['status']);
$status_key = 'wc-' . str_replace('wc-', '', $new_status);
if (!array_key_exists($status_key, $valid_statuses)) {
return new WP_Error('invalid_status', 'Неверный статус заказа', array('status' => 400));
}
$order->update_status($status_key, 'Статус обновлён через REST API');
return array('order_id' => $order_id, 'new_status' => $status_key, 'result' => 'success');
}
Этот эндпоинт принимает ID заказа в URL и новый статус в теле запроса. Статус проверяется на валидность, после чего обновляется. Таким образом можно интегрировать систему обновления заказов из внешних сервисов.
Безопасность и авторизация REST API запросов
При работе с заказами крайне важно обеспечить безопасность. В примерах выше для простоты используется проверка current_user_can('edit_posts'), но в реальных проектах рекомендуем использовать более надёжные методы:
- Использовать OAuth 2.0 или JWT авторизацию для REST API.
- Ограничивать доступ по IP, если возможно.
- Внедрять nonce-токены и шифрование, если API доступен публично.
- Логировать все запросы и ошибки для аудита.
Для WordPress существует много готовых плагинов для расширенной авторизации REST API, например, JWT Authentication for WP REST API.
Полезные плагины для работы с заказами и REST API
Помимо собственного кода, рекомендуем обратить внимание на следующие плагины, которые помогут автоматизировать и упростить работу с заказами:
- WooCommerce REST API Manager — расширяет возможности стандартного API для работы с заказами и товарами.
- Clearfy Pro — оптимизирует и защищает REST API, а также помогает убрать лишние запросы.
- My Popup — можно использовать для уведомлений клиентов о статусах заказов.
Все эти плагины доступны на wpshop.ru.
Заключение: практические рекомендации по интеграции REST API заказов
При внедрении автоматизации через REST API придерживайтесь следующих правил:
- Тестируйте API на тестовом стенде, чтобы избежать ошибок в работе магазина.
- Используйте валидаторы данных, чтобы не допускать некорректные заказы.
- Обратите внимание на обработку ошибок и отдавайте понятные сообщения клиенту.
- Обеспечьте защиту API от несанкционированного доступа.
Автоматизация создания и обновления заказов через REST API позволяет значительно сэкономить время и снизить количество ошибок при интеграции с внешними системами, а также расширяет возможности вашего сайта.