Module psimport ES
Módulo psimport
Presentación
psimport es un módulo para Dolibarr ERP/CRM publicado por Atoo-Net.
Incluye herramientas de línea de comandos para migrar una tienda PrestaShop a Dolibarr: categorías, terceros/direcciones, productos (con el IVA resuelto y la imagen de portada), archivos descargables de productos virtuales, galerías de imágenes y pedidos. La migración se basa en la API REST Webservice de PrestaShop, con tablas intermedias (llx_psimport_*) que permiten revisar y corregir los datos antes de la importación final en Dolibarr, y repetir una importación sin volver a consultar la API.
Todos los productos se importan como servicio (Product::TYPE_SERVICE), ya que son módulos desmaterializados, independientemente del tipo configurado en PrestaShop.
| Propiedad | Valor |
|---|---|
| Autor | Philippe Grand — Atoo-Net |
| Versión | 1.0 |
| Licencia | GNU GPL v3+ |
| Dolibarr mínimo | v24.0 |
| PHP mínimo | v8.1 |
| PrestaShop compatible | v1.6 a 9.x (API Webservice) |
¿Por qué usar psimport?
psimport permite trasladar todos los datos de una tienda PrestaShop existente a Dolibarr, sin conexión directa a la base de datos MySQL de PrestaShop (salvo un paso opcional y puntual para los archivos descargables). Cada paso pasa por una tabla intermedia que se puede revisar antes de la importación final.
Casos de uso
Migración completa de una tienda PrestaShop
Recuperación de categorías, terceros/direcciones, productos (con el IVA resuelto mediante los grupos de reglas fiscales de PrestaShop) y pedidos, a través de la API REST Webservice, sin instalación adicional en PrestaShop más allá de activar el Webservice.
Revisión antes de la importación final
Cada recurso se recupera primero en una tabla intermedia (llx_psimport_*) donde los datos pueden revisarse y corregirse antes de la importación real en Dolibarr. Esto evita volver a consultar la API de PrestaShop en caso de error.
Reintento selectivo tras corregir errores
Cada fila de la tabla intermedia tiene un estado (import_status). Las filas en error pueden restablecerse a "por importar" (botón "Restablecer errores" o una consulta SQL) y reprocesarse, sin tener que reimportar todo desde cero.
Recuperación de archivos descargables de módulos
La API Webservice de PrestaShop no expone los archivos adjuntos a los "productos virtuales/descargables" (limitación confirmada por el ticket oficial de GitHub PrestaShop/PrestaShop#27834). Un módulo "bridge" de PrestaShop incluido con psimport evita este problema, en modo solo lectura.
Galería completa de imágenes de producto
Además de la imagen de portada (recuperada junto con el producto), psimport también puede recuperar la galería completa de imágenes de cada producto a través del subendpoint de la API products/{id}/images.
Instalación
Requisitos en el lado de PrestaShop:
- Activar el Webservice: Parámetros avanzados > Webservice > Activar el webservice de PrestaShop → Sí
- Crear una clave API ("Añadir una nueva clave de webservice") con permisos GET sobre:
categories,customers,addresses,countries,products,images,tax_rule_groups,tax_rules,taxes,orders,order_details - Anotar la URL del sitio y la clave API generada
Requisitos en el lado de Dolibarr:
- Módulos activados: Terceros, Productos, Servicios, Categorías, Pedidos, Facturas
- Activar el módulo psimport en Inicio → Configuración → Módulos/Aplicaciones (familia "Otros")
Al activar el módulo se crean automáticamente las tablas intermedias llx_psimport_* mediante el mecanismo estándar de activación de módulos de Dolibarr — no es necesaria ninguna importación SQL manual.
El módulo psimport no tiene menú ni permisos propios. Su única pantalla es la página de configuración (Configuración > Módulos/Aplicaciones > psimport > icono de llave inglesa), donde se introducen la URL de la tienda PrestaShop y la clave API del Webservice (constantes PSIMPORT_API_URL y PSIMPORT_API_KEY), utilizadas por defecto por los scripts CLI cuando no se pasa ningún parámetro en la línea de comandos. Toda la migración se controla después desde la línea de comandos mediante los scripts de la carpeta scripts/.
Configuración
Conexión a la API de PrestaShop
| Constante | Descripción |
|---|---|
PSIMPORT_API_URL |
URL base de la API Webservice de PrestaShop (p. ej. https://www.yourshop.com/api)
|
PSIMPORT_API_KEY |
Clave API del Webservice de PrestaShop |
Solución de problemas: HTTP 403 en la API (alojamiento detrás de Cloudflare)
Si la prueba de conexión (o cualquier script fetch-*/import-*) falla con un error del tipo HTTP 403 Forbidden con el cuerpo de respuesta vacío y sin ninguna redirección detectada, mientras que la misma llamada funciona en un navegador, el bloqueo probablemente no proviene de PrestaShop sino de un firewall de aplicación situado por delante (Cloudflare, ModSecurity, etc.) que rechaza la solicitud antes de que llegue al sitio.
Caso detectado y confirmado en un alojamiento Cloudflare (plan gratuito): el Bot Fight Mode gratuito de Cloudflare detecta las llamadas cURL del módulo (sin navegador, sin JS, User-Agent no estándar) como tráfico de bots y responde con un "Managed Challenge" — que en el módulo se traduce en un 403 con cuerpo vacío.
Para confirmarlo: en el panel de Cloudflare, Security > Analytics > Events, filtrar los últimos minutos tras una prueba reciente. Si la entrada bloqueada muestra Service = "Bot fight mode" y Action = "Managed Challenge", se trata de este caso.
En el plan gratuito, este Bot Fight Mode no se puede omitir de forma selectiva por ruta URL. La única opción es desactivar el interruptor globalmente: Security > Settings > "Bot fight mode" → Desactivado mientras se ejecutan los scripts de importación, y reactivarlo después si es necesario.
En un plan de Cloudflare de pago (Pro y superiores), Super Bot Fight Mode permite una omisión más precisa mediante una regla de seguridad "Skip" dirigida a /api*.
Uso
Orden de ejecución
# 1. Categorías php scripts/fetch-categories.php https://www.yourshop.com/api ABCDEF... 0 0 php scripts/import-categories.php 0 # 2. Clientes + direcciones php scripts/fetch-customers.php https://www.yourshop.com/api ABCDEF... 0 0 php scripts/import-customers.php 0 # 3. Productos (IVA resuelto mediante tax_rules_groups, imagen de portada descargada) php scripts/fetch-products.php https://www.yourshop.com/api ABCDEF... 0 0 php scripts/import-products.php https://www.yourshop.com/api ABCDEF... 0 # 4. Archivos descargables de módulos (requiere el módulo PrestaShop "Psimport Bridge") php scripts/fetch-product-files.php https://www.yourshop.com/api ABCDEF... 0 0 php scripts/import-product-files.php https://www.yourshop.com/api ABCDEF... 0 # 4b. Galería completa de imágenes de producto php scripts/fetch-product-images.php https://www.yourshop.com/api ABCDEF... 0 0 php scripts/import-product-images.php https://www.yourshop.com/api ABCDEF... 0 # 5. Pedidos (configurar $importable_state_ids y $payment_module_map al inicio del script antes de la primera ejecución) php scripts/fetch-orders.php https://www.yourshop.com/api ABCDEF... 0 0 php scripts/import-orders.php 0
Parámetros comunes:
limit= 0 para recuperar/importar todo, o un número para probar con una muestraclean_all_before_fetch= 1 para vaciar la tabla intermedia antes de una nueva recuperación (por defecto 0 = acumular/actualizar)
Repetir una importación tras corregir errores
Cada tabla intermedia tiene una columna import_status:
0= por importar1= importado correctamente (fk_dolibarrcontiene el id del objeto creado en Dolibarr)2= en error (detalles enimport_error)
Para reprocesar solo las filas en error tras corregirlas, usar el botón "Restablecer errores" en la pestaña de gestión de importación, o:
UPDATE llx_psimport_product SET import_status = 0 WHERE import_status = 2;
y después volver a ejecutar el script de importación correspondiente.
Archivos descargables de módulos
La API Webservice de PrestaShop no expone los archivos de los "productos virtuales/descargables" (confirmado por el ticket oficial de GitHub PrestaShop/PrestaShop#27834 y varios hilos del foro de PrestaShop). Esto se soluciona con un módulo "bridge" de PrestaShop instalado una vez en la tienda.
Recomendado: módulo Psimport Bridge (un solo clic, igual que el resto de importaciones):
- Instalar el módulo incluido en
bridge/psimportbridge/en la tienda PrestaShop (subir el zip desde el back office, o copiarlo por FTP/SFTP amodules/e instalarlo) - No requiere configuración adicional: reutiliza la misma clave API del Webservice ya configurada (
PSIMPORT_API_KEY) - En la pestaña Gestión de importación, usar los botones ↓ Recuperar e → Importar en la fila "Archivos de producto", exactamente igual que para cualquier otro recurso
- Una vez finalizada la migración, el módulo puede desinstalarse sin riesgo (solo lectura, sin escrituras en base de datos ni en disco en PrestaShop)
Este módulo solo permite descargar archivos ya referenciados en ps_product_download (protege contra la lectura de archivos arbitrarios).
Alternativa (si no se puede instalar el módulo bridge): una exportación CSV manual de ps_product_download desde phpMyAdmin/Adminer, junto con una copia local de la carpeta download/ de PrestaShop, y después php scripts/import-product-files.php /path/to/export.csv /path/to/download/.
Galería completa de imágenes de producto
fetch-product-images.php / import-product-images.php recuperan todas las imágenes de cada producto de PrestaShop (no solo la portada), a través del subendpoint del Webservice products/{id}/images, en una tabla intermedia dedicada llx_psimport_productimage.
Puntos a comprobar en la primera ejecución:
- La posición de cada imagen en la galería de Dolibarr se deriva del orden devuelto por la API — comprobar visualmente el orden tras la importación y reordenar manualmente si es necesario
- Para evitar mostrar la misma imagen dos veces (portada + galería), los duplicados exactos se detectan y se omiten silenciosamente
- La forma exacta de la respuesta JSON puede variar según la versión de PrestaShop: probar primero con
limit=5sobre una muestra
Comprobaciones tras cada paso
- Revisar el contenido de las tablas
llx_psimport_*(consistencia de los datos, IVA correctamente resuelto) - En la interfaz de Dolibarr, comprobar: árbol de categorías, fichas de terceros (dirección, contacto), fichas de producto (precio sin/con impuestos, IVA, imagen, archivo adjunto), pedidos (líneas, totales, estado)
- Comparar los recuentos (número de categorías/clientes/productos/pedidos) entre PrestaShop, la tabla intermedia y Dolibarr
Preguntas frecuentes
¿Necesito acceso directo a la base de datos MySQL de PrestaShop?
No. Toda la migración pasa por la API REST Webservice de PrestaShop, salvo un paso opcional y puntual (exportación CSV manual) si no se puede instalar el módulo bridge para los archivos descargables.
¿Qué versiones de PrestaShop son compatibles?
De PrestaShop 1.6 a 9.x, a través de la API Webservice estándar. El módulo bridge (en el lado de PrestaShop) declara él mismo este rango de compatibilidad.
¿Qué hacer si la importación de un recurso falla parcialmente?
Corregir los datos subyacentes (en la tabla intermedia o en PrestaShop), restablecer las filas en error a import_status = 0 (botón "Restablecer errores" o una consulta SQL) y después volver a ejecutar solo el script de importación correspondiente.
Ver la sección Solución de problemas HTTP 403: normalmente se trata de un firewall de aplicación (Cloudflare Bot Fight Mode) que bloquea las llamadas cURL, no de PrestaShop en sí.
¿El módulo Psimport Bridge modifica datos en PrestaShop?
No, es de solo lectura: sin escrituras en base de datos ni en disco en PrestaShop, y solo permite descargar archivos ya referenciados en ps_product_download.