Importación de Feeds de Proveedores & Dropshipping para PrestaShop 8 y 9
Instalar, configurar y automatizar la importación multiproveedor (CSV, XML, JSON), los márgenes, las combinaciones y la sincronización del stock.
Presentación
El módulo Importación de Feeds de Proveedores y Dropshipping (nombre técnico dfsupplierfeed) importa y sincroniza automáticamente los catálogos de tus proveedores en PrestaShop 8 y 9. Gestiona varios proveedores y feeds en CSV, XML y JSON, aplica tus reglas de margen, construye las combinaciones, sincroniza el stock mediante cron y arbitra los EAN13 duplicados con una prioridad por proveedor.
El módulo no sustituye la importación CSV nativa de PrestaShop (pensada para una carga manual única): industrializa importaciones recurrentes desde varias fuentes, con márgenes, combinaciones y sincronización automáticos.
Instalación
- En el back office, ve a Módulos > Gestor de módulos y luego Subir un módulo.
- Selecciona el archivo
dfsupplierfeed.zipy confirma. - Una vez instalado, haz clic en Configurar.
Al instalarse, el módulo crea cinco tablas (dfsf_supplier, dfsf_feed, dfsf_rule, dfsf_product, dfsf_log) y genera un token de cron único.
Visión general de la interfaz
- Dashboard — contadores y aviso sobre los feeds cuya importación está en curso.
- Suppliers — proveedores y prioridades.
- Feeds — feeds, análisis, mapeo de campos y opciones.
- Margin rules — reglas de cálculo de los precios de venta.
- Logs — historial detallado de importaciones.
- Settings & Cron — ajustes generales, catálogos grandes, URLs de cron.
Paso 1 — Crear tus proveedores
En la pestaña Suppliers, añade un proveedor con:
- Nombre del proveedor.
- Prioridad — entero, siendo
1la más alta. Resuelve los EAN13 duplicados. - Activo — un proveedor inactivo es ignorado por el cron.
- Crear el proveedor nativo de PrestaShop — recomendado: también rellena el coste de compra en
product_supplier.
Asigna las mejores prioridades (números más bajos) a tus proveedores más fiables o más baratos: serán los que «posean» los productos compartidos.
Paso 2 — Crear el feed y dejar que el módulo lo analice
En la pestaña Feeds, crea el feed con su proveedor, su tipo de origen (URL remota o archivo local dentro del directorio de la tienda) y su formato. Guarda y haz clic en el botón lupa de la fila del feed.
El módulo descarga una muestra y muestra:
- el
items_pathdetectado para los feeds XML y JSON; - la lista de todos los campos realmente presentes, con valores de ejemplo;
- un mapeo completo prerrellenado, editable antes de aplicarlo.
Los nombres de columna se reconocen en español, inglés, francés, alemán e italiano, con una comprobación de coherencia sobre los valores: un campo llamado «precio» pero con texto no se propondrá como coste.
Comprueba siempre la propuesta antes de aplicarla. Muchos proveedores envían un precio de venta recomendado donde el módulo espera un coste de compra: tu margen se aplicaría entonces sobre un precio ya marginado.
Paso 3 — El mapeo de campos
El mapeo es un objeto JSON que relaciona las columnas o nodos del feed con campos normalizados. Los 16 campos canónicos son:
name reference ean13 mpn cost quantity description description_short category manufacturer weight tax_rate image images group_reference attributes
Solo reference o ean13 es obligatorio: son las dos claves de correspondencia. Una fila sin ninguno de los dos se rechaza.
CSV
Relaciona cada campo con una cabecera de columna o con un índice de columna desde 0 cuando las cabeceras no son utilizables. El delimitador se detecta automáticamente, los campos multilínea entrecomillados se gestionan y se aceptan tanto 1 234,56 como 1,234.75.
{
"fields": {
"name": "product_name",
"reference": "sku",
"ean13": "ean",
"cost": "price",
"quantity": "stock",
"category": "category",
"image": "image_url"
}
}
Mapeo por índice, para un archivo sin cabecera utilizable:
{
"fields": { "reference": "0", "ean13": "1", "name": "2", "cost": "3", "quantity": "4" }
}
XML
items_path apunta al nodo repetido, a cualquier profundidad. Las rutas de los campos son relativas a ese nodo y @nombre lee un atributo.
{
"items_path": "products/product",
"fields": {
"reference": "@sku",
"name": "title",
"ean13": "ean",
"cost": "pricing/wholesale",
"quantity": "stock/quantity",
"image": "images/image"
}
}
Al ser las rutas relativas al artículo, un valor presente solo en un nodo antecesor no puede leerse: no existe la navegación ... Si tu feed XML coloca la referencia del padre por encima de las variantes, pide al proveedor una exportación plana.
JSON
items_path usa notación con puntos hasta el array de artículos. Un segmento numérico lee una entrada del array: images.0 es la primera imagen. Deja items_path vacío si el archivo empieza directamente por [.
{
"items_path": "data.products",
"fields": {
"reference": "sku",
"name": "name",
"ean13": "barcode",
"cost": "prices.cost",
"quantity": "inventory.available",
"image": "images.0"
}
}
La pestaña Feeds contiene trece ejemplos comentados que cubren las estructuras más habituales.
Paso 4 — Definir tus márgenes
En la pestaña Margin rules, cada regla calcula el precio de venta sin IVA a partir del coste de compra sin IVA:
- Porcentaje —
coste × (1 + valor/100). - Coeficiente —
coste × valor. - Adición fija —
coste + valor.
Después se aplica un redondeo psicológico opcional: x.99, x.95, x.90 o redondeo al entero superior.
Alcance y resolución
Una regla puede apuntar a un proveedor, una categoría, ambos o ser global. Gana la más específica, en este orden: proveedor + categoría, luego solo proveedor, luego solo categoría, luego la regla global. Las reglas de categoría se aplican también a las subcategorías, prevaleciendo la más cercana al producto. Sin ninguna regla se usa el margen por defecto de los ajustes.
La prioridad EAN entre fuentes
Cuando el mismo ean13 aparece en varios feeds:
- el proveedor con mejor prioridad posee el producto; precios, stock y coste vienen de su feed;
- las demás fuentes se ignoran para esa referencia;
- si un proveedor con mejor prioridad aporta después ese EAN, toma automáticamente la propiedad.
Las combinaciones
Activa Construir las combinaciones en el feed y mapea dos campos adicionales:
group_reference— idéntico para todas las variantes de un mismo producto;attributes— las opciones de la variante, por ejemploTalla:M|Color:Rojo.
Se aceptan los separadores |, , y ; entre pares, y : o = entre nombre y valor. El módulo crea el producto padre a partir de la primera variante encontrada y luego una combinación por variante con su referencia, EAN, coste y stock. Los grupos de atributos y atributos que falten se crean automáticamente.
El feed debe enviar una línea por variante. El precio del padre sirve de referencia y cada combinación lleva la diferencia de precio calculada desde su propio coste.
Lo que el feed puede sobrescribir
Cinco casillas por feed deciden qué campos se sincronizan: precios, stock, nombre, descripciones, imágenes. Por defecto solo precios y stock están marcados.
Si ajustas tus tarifas a mano, desmarca los precios: el feed solo sincronizará el stock, sin dejar de registrar el coste de compra del proveedor.
Las imágenes se reimportan solo cuando las URL del feed han cambiado realmente, lo que evita volver a descargar todo el catálogo en cada pasada.
Productos retirados del catálogo del proveedor
Cada feed elige su comportamiento: no hacer nada, poner el stock a cero, desactivarlos o ambas cosas. La acción se aplica al final de una importación completa terminada y solo a los productos que ese feed había creado o vinculado.
Categorías y divisas
El campo category acepta un nombre simple o una ruta completa, por ejemplo Inicio > Oficina > Sillas. El separador es configurable por feed y la opción Crear las categorías que faltan crea los niveles ausentes.
Si el proveedor factura en otra divisa, selecciónala en el feed: los costes se convierten a la divisa por defecto de la tienda antes de aplicar los márgenes.
Catálogos grandes
Los feeds se leen en streaming: la memoria utilizada no depende del tamaño del archivo. Además el procesamiento se divide en lotes reanudables. Dos ajustes, en la pestaña Settings & Cron:
- Punto de control cada N artículos (2000 por defecto) — la posición se guarda con regularidad, así un proceso interrumpido por el alojamiento reanuda desde el último punto, no desde el principio.
- Presupuesto de tiempo por pasada (120 s por defecto) — una pasada se detiene tras ese plazo y guarda su posición; la siguiente llamada del cron se reanuda exactamente en el mismo artículo.
Un catálogo muy grande simplemente necesita varias pasadas del cron y se termina solo. La lista de feeds muestra el progreso, y el informe JSON del cron indica el pico de memoria y el artículo de reanudación.
El archivo descargado se guarda en caché mientras la importación no ha terminado: una reanudación no vuelve a descargar nada y el orden de los artículos se mantiene estable.
Lanzar una importación manualmente
- Importación completa (icono play) — actualiza los productos vinculados y crea los que faltan si el feed lo permite.
- Sync stock (icono refrescar) — actualiza solo precios y cantidades de los productos ya vinculados.
Desde el back office una pasada se limita deliberadamente a 45 segundos para no agotar el tiempo del servidor web. Si el feed es grande, un mensaje indica el artículo alcanzado: relanza o deja que el cron termine.
Automatizar con el cron
# Sync stock cada hora
0 * * * * curl -sL "https://tutienda.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=TU_TOKEN&mode=stock" > /dev/null
# Importación completa cada noche
30 3 * * * curl -sL "https://tutienda.tld/index.php?fc=module&module=dfsupplierfeed&controller=cron&token=TU_TOKEN&mode=full" > /dev/null
Parámetros opcionales: &id_feed=N para procesar un solo feed, &budget=600 para permitir una ejecución más larga.
Si regeneras el token en los ajustes, actualiza tus tareas cron: la URL antigua devolverá un error 403.
Ajustes generales
- Productos creados activos de inmediato — desactivado por defecto, para revisarlos antes de publicar.
- Desactivar los productos sin stock en el proveedor, con reactivación al volver el stock.
- Margen por defecto cuando ninguna regla coincide.
- Retención de registros y purga automática.
- Al desinstalar — eliminar los datos o conservarlo todo para una reinstalación.
- Vaciar la caché de feeds y los cursores en el panel de mantenimiento.
Seguimiento y registros
La pestaña Logs lista cada ejecución: feed, modo, artículos procesados, creados, actualizados, omitidos, con error, desaparecidos, indicador de finalización con el punto de reanudación, tiempo de ejecución y detalle de los primeros errores.
Resolución de problemas
«Feed file not found or outside shop directory»
Para un origen de archivo, la ruta debe apuntar a un archivo legible dentro del directorio de la tienda. Usa una ruta relativa a la raíz o una URL.
El análisis no encuentra artículos
Indica items_path manualmente en el mapeo y vuelve a lanzar el análisis: partirá de esa ruta.
Los productos se crean pero no se ven en el front
Es el comportamiento por defecto: los productos creados están desactivados. Revísalos y actívalos, o activa la publicación automática en los ajustes.
Un proveedor nunca sobrescribe un producto compartido
Su prioridad probablemente sea peor que la del proveedor propietario. Ajusta las prioridades en la pestaña Suppliers.
Los precios parecen demasiado altos o bajos
Comprueba si el feed proporciona costes con IVA (opción y tipo), si la divisa del feed es correcta y qué regla de margen se aplica realmente según el orden de resolución. Verifica también que el campo mapeado en cost sea un coste de compra y no un precio de venta recomendado.
Las combinaciones no se crean
Comprueba que la opción está activada en el feed, que group_reference y attributes están mapeados y que el feed envía una línea por variante.
La importación nunca termina
Es normal en un feed muy grande: avanza por pasadas. La columna Estado indica el artículo de reanudación. Si el avance es demasiado lento, aumenta el presupuesto de tiempo por pasada.
Compatibilidad
- PrestaShop 8.0 a 9.x, PHP 7.4 a 8.3.
- Sin sobrescritura del núcleo de PrestaShop.
- Multitienda: los productos creados se asocian a las tiendas del contexto.
- Interfaz traducida al inglés y al francés.