# Importación de Feeds de Proveedores & Dropshipping para PrestaShop 8 y 9

> Guía completa del módulo Importación de Feeds de Proveedores y Dropshipping para PrestaShop 8 y 9: análisis automático, varias fuentes por campo, división de variantes, segundo eje de combinación y productos relacionados.

- Página: <https://www.datafirefly.com/es/documentation/import-fournisseurs-dropshipping-prestashop/>
- Idioma: es
- Actualizado el: 2026-09-18
- Otros idiomas: [fr](https://www.datafirefly.com/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [en](https://www.datafirefly.com/en/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [it](https://www.datafirefly.com/it/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/import-fournisseurs-dropshipping-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/import-fournisseurs-dropshipping-prestashop/index.md)
- Índice: <https://www.datafirefly.com/es/documentation/llms.txt>

## 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, relaciona los productos entre sí, sincroniza el stock por cron y arbitra los EAN13 duplicados con una prioridad por proveedor.

El módulo no sustituye la importación CSV nativa de PrestaShop: industrializa importaciones _recurrentes_ desde varias fuentes, con márgenes, combinaciones y sincronización automáticos.

## Instalación

1. En el back office, ve a **Módulos > Gestor de módulos** y luego **Subir un módulo**.
2. Selecciona el archivo `dfsupplierfeed.zip` y confirma.
3. 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 su **nombre**, su **prioridad** (entero, `1` es la más alta, resuelve los EAN13 duplicados), su estado **activo**, y la opción **Crear el proveedor nativo de PrestaShop**, recomendada porque rellena también 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_path` detectado para los feeds XML y JSON, la lista de todos los campos realmente presentes con valores de ejemplo, y un mapeo completo prerrellenado editable antes de aplicarlo.

Las columnas de fotos numeradas (`image_1`, `image_2`...) se agrupan automáticamente, las columnas de tallas empaquetadas, de color y de referencias relacionadas se reconocen, y los nombres de columna se identifican en español, inglés, francés, alemán e italiano.

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 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 21 campos canónicos son:

`name` `reference` `ean13` `mpn` `cost` `quantity` `description` `description_short` `category` `manufacturer` `weight` `tax_rate` `image` `images` `group_reference` `attributes` `variants_stock` `variants_ean` `variants_reference` `variant_attribute` `related`

Solo `reference` o `ean13` es obligatorio: son las dos claves de correspondencia.

### Varias fuentes para un mismo campo

El valor de un campo puede ser una lista. Un proveedor que reparte sus fotos en varias columnas se mapea así:

```
{
  "fields": {
    "reference": "id",
    "name": "name",
    "cost": "wholesale_price",
    "images": ["image_1", "image_2", "image_3", "image_4"]
  }
}
```

Para el campo `images` se importan todas las columnas rellenadas. Para cualquier otro campo se conserva el primer valor no vacío, lo que permite escribir una cadena de reserva: `"cost": ["precio_oferta", "precio_neto"]`.

### CSV

Relaciona cada campo con una **cabecera de columna** o con un **índice de columna** desde 0. 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"
  }
}
```

Una fila cuyo número de columnas no coincide con la cabecera se **rechaza** y se cuenta como error. Sin este control, todos los valores siguientes se desplazarían e importarían en silencio.

### 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 `..`.

### JSON

`items_path` usa notación con puntos hasta el array de artículos. Un segmento numérico lee una entrada: `images.0` es la primera imagen. Deja `items_path` vacío si el archivo empieza 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 dieciséis ejemplos comentados.

## 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`) o **adición fija** (`coste + valor`). Después se aplica un **redondeo psicológico** opcional.

### 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, solo proveedor, solo categoría, regla global. Las reglas de categoría se aplican también a las subcategorías. Sin ninguna regla se usa el **margen por defecto**.

## La prioridad EAN entre fuentes

Cuando el mismo `ean13` aparece en varios feeds, el proveedor con mejor prioridad **posee** el producto, las demás fuentes se **ignoran** para esa referencia, y si un proveedor con mejor prioridad aporta después ese EAN, **toma automáticamente** la propiedad.

## Las combinaciones

Se gestionan dos estructuras de feed.

### Una línea por variante

Activa **Construir las combinaciones** y mapea `group_reference` (idéntico para todas las variantes de un producto) y `attributes` (las opciones, por ejemplo `Talla:M|Color:Rojo`). Se aceptan `|`, `,` y `;` entre pares, y `:` o `=` entre nombre y valor.

### Una línea por producto, tallas empaquetadas en una columna

Es la estructura más extendida entre los mayoristas textiles y de lencería:

```
sizes_stock : EU 70C | FR 85C:4,EU 70D | FR 85D:2,EU 75A | FR 90A:1
ean_codes   : EU 70C | FR 85C:5901741925360,EU 70D | FR 85D:5901741925377
```

Activa **Dividir las variantes empaquetadas** y mapea `variants_stock`, más `variants_ean` y `variants_reference` si el feed los proporciona. El módulo divide la línea en una combinación por talla y empareja stock, EAN y referencia **por etiqueta**. Tres ajustes acompañan la casilla: el **nombre del grupo de atributos** (`Taille` por defecto), el **separador entre entradas** (`,`) y el **separador entre etiqueta y valor** (`:`).

La división etiqueta/valor se hace en la **última** aparición del separador, de modo que una etiqueta como `EU 70C | FR 85C` sigue siendo legible.

Marca la casilla **antes** de la primera importación. Si importas primero sin ella, los productos se crean sin `group_reference`: al activar después la división, el módulo no encuentra esos padres y crea otros nuevos, duplicando tu catálogo. Si ocurre, elimina los productos creados y vacía los cursores desde el panel de mantenimiento.

### Un segundo eje desde una columna del feed

Muchos proveedores envían el color en una columna aparte mientras las tallas están empaquetadas. Relaciona `variant_attribute` con esa columna:

```
{
  "fields": {
    "reference": "id",
    "name": "name",
    "cost": "wholesale_price",
    "variant_attribute": "color",
    "variants_stock": "sizes_stock",
    "variants_ean": "ean_codes"
  }
}
```

Cada combinación del producto gana entonces un segundo eje, bajo el **grupo de atributos de la columna adicional** definido en el feed (`Couleur` por defecto). Obtienes combinaciones de Talla y Color, utilizables por los filtros por facetas.

Como cada línea del feed es un producto de un solo color, el grupo Color solo tiene un valor por producto. Los colores no se fusionan en una ficha única con selector: para navegar entre ellos, usa los productos relacionados.

## Productos relacionados

Cuando el feed lista los otros colores o los modelos asociados en una columna de referencias, marca **Importar los productos relacionados** y mapea `related`:

```
{
  "fields": {
    "reference": "id",
    "related": "other_colors"
  }
}
```

La columna contiene una lista de referencias de proveedor separadas por comas. Los enlaces se crean como **accesorios de PrestaShop**, y aparecen en el bloque de productos relacionados de tu tema.

La resolución tiene lugar **una vez leído todo el feed**, porque una referencia apunta muy a menudo a un producto situado más adelante en el archivo. Tres comportamientos a conocer:

- una referencia que apunta al propio producto se ignora, algo frecuente ya que muchos proveedores listan el grupo completo en cada miembro;
- una referencia que apunta a un producto ausente del feed se ignora **sin contar como error**: en una exportación filtrada por categoría, esto supone habitualmente una quinta parte de las referencias;
- los accesorios existentes **nunca se eliminan**, así que los enlaces añadidos a mano sobreviven. A cambio, un agrupamiento modificado por el proveedor deja enlaces antiguos en su sitio.

El número de enlaces creados aparece en el mensaje de fin de importación y en la columna dedicada del registro.

## 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 reescribes las fichas para el posicionamiento, desmarca nombre y descripciones tras la primera importación.

## 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 de ese feed.

En dropshipping, poner el stock a cero es lo más seguro: el producto deja de venderse pero conserva su URL y su posicionamiento.

## 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. Una ruta que empieza por el separador se interpreta correctamente.

Si el proveedor factura en otra divisa, selecciónala en el feed: los costes se convierten a la divisa por defecto de la tienda.

## Catálogos grandes

Los feeds se leen en streaming: la memoria usada no depende del tamaño del archivo. 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) y **presupuesto de tiempo por pasada** (120 s por defecto).

La división multiplica el volumen: un feed de 7.300 productos con variantes produce más de 33.000 combinaciones, unos 41.000 objetos en la primera importación completa. Prevé varias pasadas y prueba en una tienda de pruebas.

## 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 a 45 segundos para no agotar el tiempo del servidor web.

## 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` y `&budget=600`.

Si regeneras el token, actualiza tus tareas cron: la URL antigua devolverá un error 403.

## Ajustes generales

- **Productos creados activos de inmediato** — desactivado por defecto.
- **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.
- **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, enlaces de productos creados, indicador de finalización con el punto de reanudación, tiempo y detalle de los primeros errores.

## Resolución de problemas

### "Malformed CSV row: 23 columns instead of 22"

La fila contiene un separador o una comilla sin escapar dentro de un campo de texto. Se rechaza para no importar valores desplazados.

### "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.

### El análisis no encuentra artículos

Indica `items_path` manualmente en el mapeo y vuelve a lanzar el análisis.

### Los productos se crean pero no se ven en el front

Es el comportamiento por defecto: los productos creados están desactivados.

### Las combinaciones no se crean

Comprueba que la casilla correspondiente está marcada, que los campos necesarios están mapeados y que los separadores coinciden con el archivo.

### Mi catálogo se ha duplicado tras activar la división

La importación se lanzó antes de marcar la casilla. Elimina los productos creados por ese feed, vacía los cursores y vuelve a lanzar.

### Pocos o ningún enlace de productos relacionados

Los enlaces solo se resuelven al final de una importación completa **terminada**: en un feed grande procesado en varias pasadas, aparecen en la última. Comprueba también que las referencias de la columna corresponden al campo mapeado en `reference`.

### Los precios parecen demasiado altos o bajos

Comprueba los costes con IVA, la divisa, qué regla de margen se aplica y que el campo mapeado en `cost` sea un coste de compra.

### La importación nunca termina

Es normal en un feed muy grande: avanza por pasadas.

## 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.
