Introduccion

Automatizar la publicación de productos en PrestaShop mediante una API es una de las soluciones más eficientes cuando gestionamos catálogos desde sistemas externos (ERP, proveedores, marketplaces, dropshipping, etc.). Este tipo de integración permite ahorrar tiempo, reducir errores manuales y mantener el inventario sincronizado de forma dinámica.

En este artículo, aprenderás cómo automatizar la creación de productos en PrestaShop consumiendo una API externa, paso a paso, con ejemplos de código en PHP, manejo de imágenes, categorías y stock.

  1. ¿Qué tipo de API vamos a consumir?

Para este ejemplo, trabajaremos con una API REST externa (JSON), que podría ser:

  • Una API de proveedor que ofrece productos con nombre, precio, stock e imágenes
  • Un middleware que consolida datos de varias fuentes
  • Una hoja de cálculo publicada vía API (Google Sheets, Airtable, etc.)

Ejemplo de respuesta JSON:

[
  {
    "sku": "CAM-001",
    "name": "Camiseta Azul",
    "price": 14.95,
    "stock": 25,
    "category": "Camisetas",
    "image_url": "https://cdn.tienda.com/img/cam001.jpg"
  }
]
  1. Requisitos previos en PrestaShop
  • Acceso al entorno con PHP y base de datos
  • Categorías ya creadas (puedes crear dinámicamente si es necesario)
  • Conocimiento de estructuras de PrestaShop: ps_product, ps_product_lang, ps_product_shop, ps_category_product, ps_image, ps_stock_available
  1. Crear el script PHP para importar desde API

<?php

require(dirname(__FILE__).’/config/config.inc.php’);

require(dirname(__FILE__).’/init.php’);

 

$api_url = ‘https://api.proveedor.com/productos’;

$response = Tools::file_get_contents($api_url);

$productos = json_decode($response, true);

 

foreach ($productos as $item) {

  $product = new Product();

  $product->reference = $item[‘sku’];

  $product->price = $item[‘price’];

  $product->id_tax_rules_group = 1;

  $product->active = 1;

  $product->id_category_default = 5; // ID de categoría ya existente

 

  foreach (Language::getLanguages() as $lang) {

    $product->name[$lang[‘id_lang’]] = $item[‘name’];

    $product->link_rewrite[$lang[‘id_lang’]] = Tools::link_rewrite($item[‘name’]);

  }

 

  $product->add();

 

  // Relación categoría

  $product->addToCategories([5]);

 

  // Stock

  StockAvailable::setQuantity($product->id, 0, $item[‘stock’]);

 

  // Imagen

  if (!empty($item[‘image_url’])) {

    $image = new Image();

    $image->id_product = $product->id;

    $image->position = Image::getHighestPosition($product->id) + 1;

    $image->cover = true;

    $image->add();

 

    $image_path = $image->getPathForCreation().’.jpg’;

    file_put_contents($image_path, file_get_contents($item[‘image_url’]));

    ImageManager::resize($image_path, $image->getPathForCreation().’-large_default.jpg’, 800, 800);

  }

}

 

echo «Productos importados correctamente.»;

?>

  1. Automatizar la ejecución con cron

Puedes ejecutar el script con una tarea programada para que se actualice cada día:

0 3 * * * php /var/www/html/importar_api.php

Esto te permite modificar precios solo de productos que cumplen con ciertos metadatos personalizados.

  1. Validaciones y controles adicionales
  • Verifica si el producto ya existe por reference antes de crearlo
  • Implementa logs de errores o registros de importación
  • Puedes usar Tools::log() o escribir en un archivo de texto
if (Product::getIdByReference($item['sku'])) {
continue; // Ya existe, saltar
}
  1. Casos avanzados y mejoras

Mejora

Descripción

Creación dinámica de categorías

Verificar si existe y crear con Category()

Múltiples imágenes por producto

Iterar y agregar imágenes extra

Precios por combinación

Usar ProductAttribute si hay tallas, colores

Logs a base de datos

Registrar procesos en una tabla custom_log

Sincronización bidireccional

Si tu tienda envía datos al sistema externo

  1. Consideraciones de rendimiento
  • Usa paginación si la API devuelve muchos productos
  • Cachea las imágenes si vienen de CDN lentos
  • Usa índices en reference para acelerar validaciones
  • Evita timeouts: divide la carga en bloques si hay muchos productos

Conclusión

Automatizar la publicación de productos en PrestaShop mediante una API es una estrategia ideal para tiendas que dependen de fuentes externas de inventario o que actualizan su catálogo con frecuencia.

Con un simple script en PHP que consuma una API JSON y utilice las clases nativas de PrestaShop, puedes mantener sincronizado tu catálogo sin esfuerzo manual. Además, puedes escalar este sistema fácilmente con validaciones, cron jobs, logs y adaptaciones según tu flujo de negocio.

Ir al contenido