Как получить самые недавно обновленные заказы через REST API?

Вопрос или проблема

У меня есть скрипт, который экспортирует заказы WooCommerce (которые иногда изменяются) и синхронизирует их с внешней базой данных. Я часто запускаю этот скрипт, и он использует устаревший REST API v3.

Я собираюсь разработать постоянно работающий процесс, который будет поддерживать синхронизацию базы данных все время. Обновления будут инициироваться двумя способами. В основном я буду использовать вебхуки для мгновенных триггеров.

Однако иногда процесс синхронизации не будет работать, и в этом случае некоторые триггеры вебхуков будут упущены, поэтому мне нужен способ получить последние обновленные заказы для синхронизации после перезапуска процесса синхронизации.

Возможно запросить последние пару обновленных заказов через устаревший REST API v3, отфильтровав или отсортировав по дате последнего обновления, но на этот раз я бы предпочел использовать новый REST API v3, который, похоже, не позволяет этого.

Мой лучший вариант, похоже, это плагин WP REST filter, который позволяет это делать через фильтрацию, но он не работает, согласно моим тестам.

Есть идеи?

Как выяснилось, запросить заказы после определенного времени можно только с помощью устаревшего REST API v3 WooCommerce с параметром filter[updated_at_min], но не с помощью нового REST API v3 WooCommerce.

Я также хочу запросить клиентов, которые недавно обновили свои данные, что невозможно ни с одной из версий WooCommerce REST API, насколько мне известно.

Возможно расширение WooCommerce REST API, но я устал от ограничений и медлительности REST API, и мне также не нравится PHP, поэтому я, вероятно, в конечном итоге буду напрямую запрашивать базу данных MySQL WordPress из нашей ERP, которая использует node.js.

Этот пост достаточно хорошо описывает связанные таблицы MySQL.

Ответ или решение

Чтобы получить недавно обновленные заказы через REST API WooCommerce, особенно учитывая ваши специфические требования к синхронизации с внешней базой данных и ограничения существующей системы, следует рассмотреть несколько решений, каждый из которых может быть адаптирован под ваши нужды.

1. Использование Legacy v3 REST API

Хотя вы желаете перейти на новую версию API, старый Legacy v3 API по-прежнему предоставляет возможности, которые вам могут понадобиться. Когда ваш процесс синхронизации был временно приостановлен, можно использовать параметр filter[updated_at_min], чтобы запросить заказы, обновленные после определенного времени. Пример запроса:

GET /wp-json/wc/v3/orders?filter[updated_at_min]=2023-10-01T00:00:00

Замените временной параметр на нужную временную метку. Этот способ поможет вам получить обновленные заказы, не теряя важной информации.

2. Переход на новый v3 REST API

Новый v3 REST API не поддерживает фильтрацию по дате обновления так, как это было в Legacy API. Однако вы можете использовать параметры сортировки и найма, которые доступны для пользовательских нужд. Например:

GET /wp-json/wc/v3/orders?orderby=modified&order=desc&per_page=10

Эта команда вернет последние 10 заказов, отсортированных по дате изменения.

3. Вебхуки

Как вы упомянули, вебхуки — это мощный инструмент для получения событий в реальном времени. Рекомендуется настроить их для получения уведомлений о создании, обновлении и удалении заказов. Пример настройки вебхука для обновлений заказов:

{
    "name": "Order Updates",
    "topic": "order.updated",
    "delivery_url": "https://your-external-db-endpoint.com/webhook",
    "status": "active"
}

Это решение поможет минимизировать количество обращений к API и позволит быстро получать последние обновления.

4. Прямой доступ к базе данных MySQL

Как вы уже отметили, можно также напрямую взаимодействовать с базой данных MySQL, что даст вам возможность более гибко и быстро извлекать нужные данные. Примечание: данный подход требует хорошего понимания структуры базы данных WooCommerce.

Пример запроса для получения недавно обновленных заказов:

SELECT * FROM wp_posts 
WHERE post_type = 'shop_order' 
AND post_modified > '2023-10-01 00:00:00' 
ORDER BY post_modified DESC;

Этот запрос вернет все заказы, измененные после указанной даты.

Заключение

Каждый из этих методов имеет свои преимущества и недостатки. Если вы нацелены на производительность и гибкость, доступ к базе данных может быть наиболее подходящим вариантом, особенно с учетом ваших предпочтений в программировании и желании избегать PHP. Если же вы решите продолжать использовать API, интеграция вебхуков в сочетании с использованием параметров сортировки в новом v3 API может значительно упростить вашу задачу.

Надеюсь, эти рекомендации окажутся полезными для вас в реализации вашего проекта по синхронизации базы данных WooCommerce!

Оцените материал
Добавить комментарий

Капча загружается...