WP All Import. Эпизод 5. Импорт товаров с использованием API поставщика

По правильному, тут проще использовать API напрямую, написать плагин и тд. Но иногда можно использовать WP All Import, как дополнительный костыль при импорте по API стороннего поставщика.

Важно! Это вполне конкретный пример. У вас могут быть другие исходные данные.

Итак. Существует некий поставщик, который предоставляtт файл выгрузки и API. Так как, в файле выгрузки нет всех необходимых данных, то будем их получать дополнительно.

к содержанию

Шаг первый

Делаем стандартный импорт для полученного файла поставщика.

WP All Import. Эпизод 5. Импорт товаров с использованием API поставщика • 1 • Финты WordPress

Указываем все данные, которые можно вытащить из файла.

к содержанию

Шаг второй

Теперь делаем запрос в API для получения токена перед основным импортом.

/**
 * Получения токена из API
 *
 * @param  int $import_id идентификатор импорта
 *
 * @throws \JsonException
 *
 * @sourcecode    https://wpruse.ru/courses/plugin-serial-wp-all-import/wp-all-import-epizod-5/
 * @author        Artem Abramovich
 */
function art_before_xml_import( $import_id ) {

   // Проверяем на ID импорта.
   if ( (string) 21 === $import_id ) {
      $url  = 'http://api.brain.com.ua/auth';
      $args = [
         'timeout'     => 45,
         'redirection' => 5,
         'httpversion' => '1.0',
         'blocking'    => true,
         'headers'     => [],
         'body'        => [
            'login'    => '',
            'password' => '',
         ],
         'cookies'     => [],
      ];

      $key  = 'products_auth';
      $auth = get_transient( $key );

      if ( false === $auth ) {
         // Получаем HTML
         $response = wp_remote_post( $url, $args );

         // Проверим на ошибки
         if ( is_wp_error( $response ) ) {
            return;
         }

         // Получим тело
         $auth = json_decode( wp_remote_retrieve_body( $response ), true, 512, JSON_THROW_ON_ERROR );

         // Запишем полученный запрос в транзитную опцию на 24 часа
         set_transient( $key, $auth['result'], DAY_IN_SECONDS, );
      }

   }

}

add_action( 'pmxi_before_xml_import', 'art_before_xml_import', 1, 1 );
Внимание!
Весь код необходимо добавлять в файл functions.php через дочернюю тему или например пустой плагин. Прежде чем, вносить какие либо изменения, сделайте бекап сайта.

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

к содержанию

Шаг третий

Теперь можно получать нужные данные и записывать их при импорте. В качестве примера, запишем описание товара.

В Functions Editor добавляем функцию получения данных описания

/**
 * Функция получения описания
 *
 * @param  int $id Идентификатор продукта из прайса
 *
 * @return mixed
 * @throws \JsonException
 *
 * @sourcecode    https://wpruse.ru/courses/plugin-serial-wp-all-import/wp-all-import-epizod-5/
 * @author        Artem Abramovich
 */
function art_get_desc_remote( $id ) {

   $auth = get_transient( 'products_auth' );

   $source_url = 'http://api.brain.com.ua/product';

   $url = sprintf(
      "%s/%s/%s",
      $source_url,
      $id,
      $auth
   );

   $response = wp_remote_get(
      $url,
      [
         'timeout'     => 120,
         'redirection' => 5,
         'httpversion' => '1.0',
         'blocking'    => true,
         'headers'     => [],
         'cookies'     => [],
         'body'        => null,
         'compress'    => false,
         'decompress'  => true,
         'sslverify'   => true,
         'stream'      => false,
         'filename'    => null,
      ]
   );

   $body = json_decode( wp_remote_retrieve_body( $response ), true, 512, JSON_THROW_ON_ERROR );

   return $body['result']['description'];
}

Важно! В функцию необходимо передать ID товара из файла.

WP All Import. Эпизод 5. Импорт товаров с использованием API поставщика • 2 • Финты WordPress
к содержанию

Выводы

Данный способ абсолютно наркоманский и не верный. Но он рабочий и когда не хватает скилов вполне может использоваться.

Исходники файлов

0 0 голоса
Рейтинг статьи

Подписаться
Уведомить о
guest
0 комментарев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x