Получение списка товаров (Woocommerce Web API, C#)

Получение списка товаров (Woocommerce Web API, C#)

В этой статье я расскажу, как можно получить список товаров на С# используя Woocommerce Rest Api (ссылка на документацию).  Основной внимание будет уделено именно аутентификации, шифрованию и построению запроса с использование ключей cs_* и ck_*, получение которых мы рассмотрели в предыдущей статье.

WooCommerce ( далее WC) полностью интегрирован с API-интерфейсом WordPress REST. Это позволяет создавать, считывать, обновлять и удалять данные WC, используя запросы в формате JSON, также используя методы проверки API REST API.

Обратите внимание, что вам не требуется устанавливать плагин WP REST API.

Сперва настроим постоянные ссылки

Предварительно необходимо настроить постоянные ссылки WordPress (далее WP), для чего в WP выбираем пункт «Настройки» и подпункт «Постоянные ссылки» и в Общих настройках делаем активным пункт «Название записи»:

Создаем модель Product

Функционал API для работы с товарами, позволяет: создавать, просматривать, обновлять и удалять товары, а также делать это всё одновременно. Пройдя по ссылки на документацию Woocommerc Rest Api, вы можете найти все атрибуты товара(их несколько десятков), здесь я не буду вдаваться в подробное описание свойств товара. Поэтому объявим класс Product с тремя атрибутами:

HTTP Метод для отправки запроса — GET.

Конечной точкой URL адреса для получения товаров будет http://www.ИмяВашегоСайта.ru/wp-json/wc/v2/products, для получения заказов соответвенно: http://www.ИмяВашегоСайта.ru/wp-json/wc/v2/orders  и т.д.

Обратите внимание на добавленный, в соответствии с документацией, знак амперсанд (&) в конец строки с секретным ключем.

Список параметров передаваемых методом GET

При обращении к WC Rest Api необходимо передать следующие параметры:

  • oauth_consumer_key — это первый из сгенерированных в WP нами клачей;
  • oauth_nonce — случайно сгенерированная 32-символьная(рекомендуется) строка, уникальная для ключа пользователя;
  • oauth_signature_method — метод создания подписи(алгоритм хеширования HMAC-SHA1 или HMAC-SHA256), используя базовую строку подписи и секретный ключ с символом «&«;
  • oauth_timestamp — это Unix-время. REST API будет отклонять любые запросы, превышающие 15 минутное расхождение.

Для справки. Unix-время система описания моментов времени, принятая в Unix, представляет собой количество секунд, прошедших с полуночи, т.е. с 00:00:00 UTC 1 января 1970 года(четверга), время с этого момента называют «эрой Unix».

Теперь сама функция получения значения для параметра oauth_timestamp:

И функция создания подписи с помощью алгоритма хэширования HMAC-SHA256, которая будет использоваться в программе:

Создание подписи

Процесс создания строки подписи весьма специфичен, а именно:

  1. Строка должна начинаться с наименования HTTP метода в верхнем регистре, т.е. GET;
  2. Далее добавляется символ & (амперсанд);
  3. Преобразуем строку с URL адресом в её escape-представление;
  4. Затем снова добавляем символ & (амперсанд);
  5. И, наконец, преобразуем строку передаваемых параметров в её escape-представление.

Следуя данной инструкции должна получится вот такая строка кода:

Далее формируем параметры для передачи в запросе по следующей схеме:

  • Необходимо преобразовать все ключи и значения параметров в escape-представление(или ещё говорят URL-кодирование);
  • Отсортировать по алфавиту ключи параметров;
  • Для каждой пары ключ/значение, нужно:
      • добавить в конец строки преобразованный в escape(или URL-кодирование) ключ(имя параметра);
      • добавить в конец строки знак «=»;
      • добавить в конец строки преобразованное в escape-значение параметр;
      • при наличии ещё одной пары ключ/значение, добавляем в конец строки амперсанд(&).

Теперь посмотрим как это выглядит на практике:

Далее добавляем параметр подписи:

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

И выполнить сам запрос:

REST API предоставляет ответ в JSON формате, поэтому десериализуем полученную строку в ранее описанный класс Product:

Заметьте, что мы передали REST API только обязательные параметры аутентификации, поэтому по умолчанию мы получили 10 товаров. Для того чтобы получить, например 20 товаров, нужно также передать параметр per_page, т.е. конечная точка будет /products?per_page=15.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *