<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dolibarr.org/index.php?action=history&amp;feed=atom&amp;title=Module_psimport_FR</id>
	<title>Module psimport FR - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dolibarr.org/index.php?action=history&amp;feed=atom&amp;title=Module_psimport_FR"/>
	<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;action=history"/>
	<updated>2026-11-02T07:29:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;diff=66659&amp;oldid=prev</id>
		<title>Grandoc: /* Autres langues */</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;diff=66659&amp;oldid=prev"/>
		<updated>2026-07-10T09:28:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Autres langues&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 09:28, 10 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l202&quot;&gt;Line 202:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 202:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Module_psimport_EN|English documentation for the psimport module]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Module_psimport_EN|English documentation for the psimport module]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Module_psimport_DE|Deutsche Dokumentation für das Modul psimport]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Module_psimport_ES|Documentación en español del módulo psimport]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* [[Module_psimport_IT|Documentazione in italiano del modulo psimport]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[en:Module_psimport_EN]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[en:Module_psimport_EN]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[de:Module_psimport_DE]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[es:Module_psimport_ES]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[it:Module_psimport_IT]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki_test:diff::1.12:old-66648:rev-66659 --&gt;
&lt;/table&gt;</summary>
		<author><name>Grandoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;diff=66648&amp;oldid=prev</id>
		<title>Grandoc at 08:54, 10 July 2026</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;diff=66648&amp;oldid=prev"/>
		<updated>2026-07-10T08:54:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:54, 10 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l93&quot;&gt;Line 93:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 93:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Utilisation==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Utilisation==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[File:psimport_admin.png|center|thumb|800px|gestion de l&#039;import]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Ordre d&amp;#039;exécution===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;===Ordre d&amp;#039;exécution===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key mediawiki_test:diff::1.12:old-66645:rev-66648 --&gt;
&lt;/table&gt;</summary>
		<author><name>Grandoc</name></author>
	</entry>
	<entry>
		<id>https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;diff=66645&amp;oldid=prev</id>
		<title>Grandoc: Created page with &quot;Category:Modules Category:AtooNet  =Module psimport=  ==Présentation==  Le module &#039;&#039;&#039;psimport&#039;&#039;&#039; est une extension pour Dolibarr ERP/CRM éditée par [https://www.ato...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.dolibarr.org/index.php?title=Module_psimport_FR&amp;diff=66645&amp;oldid=prev"/>
		<updated>2026-07-10T08:42:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;a href=&quot;/index.php?title=Category:Modules&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:Modules (page does not exist)&quot;&gt;Category:Modules&lt;/a&gt; &lt;a href=&quot;/index.php?title=Category:AtooNet&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Category:AtooNet (page does not exist)&quot;&gt;Category:AtooNet&lt;/a&gt;  =Module psimport=  ==Présentation==  Le module &amp;#039;&amp;#039;&amp;#039;psimport&amp;#039;&amp;#039;&amp;#039; est une extension pour Dolibarr ERP/CRM éditée par [https://www.ato...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Modules]]&lt;br /&gt;
[[Category:AtooNet]]&lt;br /&gt;
&lt;br /&gt;
=Module psimport=&lt;br /&gt;
&lt;br /&gt;
==Présentation==&lt;br /&gt;
&lt;br /&gt;
Le module &amp;#039;&amp;#039;&amp;#039;psimport&amp;#039;&amp;#039;&amp;#039; est une extension pour Dolibarr ERP/CRM éditée par [https://www.atoo-net.com Atoo-Net].&lt;br /&gt;
&lt;br /&gt;
Il regroupe des outils en ligne de commande permettant de &amp;#039;&amp;#039;&amp;#039;migrer une boutique PrestaShop vers Dolibarr&amp;#039;&amp;#039;&amp;#039; : catégories, tiers/adresses, produits (avec TVA résolue et image de couverture), fichiers téléchargeables des produits virtuels, galerie d&amp;#039;images et commandes. La migration s&amp;#039;appuie sur l&amp;#039;API Webservice REST de PrestaShop, avec des tables de staging intermédiaires (&amp;lt;code&amp;gt;llx_psimport_*&amp;lt;/code&amp;gt;) qui permettent d&amp;#039;inspecter et de corriger les données avant l&amp;#039;import définitif dans Dolibarr, et de rejouer un import sans re-solliciter l&amp;#039;API.&lt;br /&gt;
&lt;br /&gt;
Tous les produits sont importés en tant que &amp;#039;&amp;#039;&amp;#039;service&amp;#039;&amp;#039;&amp;#039; (&amp;lt;code&amp;gt;Product::TYPE_SERVICE&amp;lt;/code&amp;gt;), car il s&amp;#039;agit de modules dématérialisés, indépendamment du type saisi côté PrestaShop.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Propriété!!Valeur&lt;br /&gt;
|-&lt;br /&gt;
|Auteur||Philippe Grand — Atoo-Net&lt;br /&gt;
|-&lt;br /&gt;
|Version||1.0&lt;br /&gt;
|-&lt;br /&gt;
|Licence||GNU GPL v3+&lt;br /&gt;
|-&lt;br /&gt;
|Dolibarr minimum||v24.0&lt;br /&gt;
|-&lt;br /&gt;
|PHP minimum||v8.1&lt;br /&gt;
|-&lt;br /&gt;
|PrestaShop pris en charge||v1.6 à 9.x (API Webservice)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pourquoi utiliser psimport ?==&lt;br /&gt;
&lt;br /&gt;
psimport permet de rapatrier dans Dolibarr l&amp;#039;ensemble des données d&amp;#039;une boutique PrestaShop existante, sans connexion directe à la base MySQL de PrestaShop (hormis une étape ponctuelle et optionnelle pour les fichiers téléchargeables). Chaque étape passe par une table de staging que vous pouvez contrôler avant l&amp;#039;import définitif.&lt;br /&gt;
&lt;br /&gt;
===Cas d&amp;#039;utilisation===&lt;br /&gt;
&lt;br /&gt;
====Migration complète d&amp;#039;une boutique PrestaShop====&lt;br /&gt;
Récupérez catégories, tiers/adresses, produits (avec résolution de la TVA via les groupes de règles de taxes de PrestaShop) et commandes, via l&amp;#039;API Webservice REST, sans installation supplémentaire côté PrestaShop hormis l&amp;#039;activation du Webservice.&lt;br /&gt;
&lt;br /&gt;
====Contrôle avant import définitif====&lt;br /&gt;
Chaque ressource est d&amp;#039;abord récupérée dans une table de staging (&amp;lt;code&amp;gt;llx_psimport_*&amp;lt;/code&amp;gt;) où les données peuvent être inspectées, corrigées, avant l&amp;#039;import réel dans Dolibarr. Ceci évite de resolliciter l&amp;#039;API PrestaShop en cas d&amp;#039;erreur.&lt;br /&gt;
&lt;br /&gt;
====Réimport ciblé après correction d&amp;#039;erreurs====&lt;br /&gt;
Chaque ligne de staging porte un statut (&amp;lt;code&amp;gt;import_status&amp;lt;/code&amp;gt;). Les lignes en erreur peuvent être remises à &amp;quot;à importer&amp;quot; (bouton &amp;quot;Réinitialiser les erreurs&amp;quot; ou requête SQL) puis rejouées, sans tout réimporter depuis le début.&lt;br /&gt;
&lt;br /&gt;
====Récupération des fichiers téléchargeables de modules====&lt;br /&gt;
L&amp;#039;API Webservice de PrestaShop n&amp;#039;expose pas les fichiers attachés aux &amp;quot;Produits virtuels/téléchargeables&amp;quot; (limitation confirmée par le ticket officiel PrestaShop/PrestaShop#27834). Un module PrestaShop &amp;quot;bridge&amp;quot; fourni avec psimport contourne cette limitation en lecture seule.&lt;br /&gt;
&lt;br /&gt;
====Galerie complète des images produits====&lt;br /&gt;
Au-delà de l&amp;#039;image de couverture (récupérée avec le produit), psimport peut aussi rapatrier la galerie complète de chaque produit via le sous-endpoint &amp;lt;code&amp;gt;products/{id}/images&amp;lt;/code&amp;gt; de l&amp;#039;API.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prérequis côté PrestaShop&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
#Activer le Webservice : &amp;#039;&amp;#039;&amp;#039;Paramètres avancés &amp;gt; Webservice &amp;gt; Activer le service web PrestaShop&amp;#039;&amp;#039;&amp;#039; → Oui&lt;br /&gt;
#Créer une clé API (&amp;quot;Ajouter une nouvelle clé de webservice&amp;quot;) avec les permissions GET sur : &amp;lt;code&amp;gt;categories&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;customers&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;addresses&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;countries&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;products&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;images&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tax_rule_groups&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tax_rules&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;taxes&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;orders&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;order_details&amp;lt;/code&amp;gt;&lt;br /&gt;
#Noter l&amp;#039;URL du site et la clé API générée&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Prérequis côté Dolibarr&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&lt;br /&gt;
#Modules activés : Tiers, Produits, Services, Catégories, Commandes, Factures&lt;br /&gt;
#Activer le module &amp;#039;&amp;#039;&amp;#039;psimport&amp;#039;&amp;#039;&amp;#039; dans &amp;#039;&amp;#039;&amp;#039;Accueil → Configuration → Modules/Applications&amp;#039;&amp;#039;&amp;#039; (famille &amp;quot;Autres&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;activation du module crée automatiquement les tables de staging &amp;lt;code&amp;gt;llx_psimport_*&amp;lt;/code&amp;gt; par le mécanisme standard d&amp;#039;activation de module Dolibarr — aucun import SQL manuel n&amp;#039;est nécessaire.&lt;br /&gt;
&lt;br /&gt;
Le module psimport &amp;#039;&amp;#039;&amp;#039;n&amp;#039;a ni menu, ni permission&amp;#039;&amp;#039;&amp;#039;. Son seul écran est la page de configuration (Configuration &amp;gt; Modules/Applications &amp;gt; psimport &amp;gt; icône clé à molette), qui permet de saisir l&amp;#039;URL de la boutique PrestaShop et la clé du Webservice API (constantes &amp;lt;code&amp;gt;PSIMPORT_API_URL&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;PSIMPORT_API_KEY&amp;lt;/code&amp;gt;), utilisées par défaut par les scripts CLI lorsqu&amp;#039;aucun paramètre n&amp;#039;est fourni en ligne de commande. Toute la migration se pilote ensuite depuis la ligne de commande via les scripts du dossier &amp;lt;code&amp;gt;scripts/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
&lt;br /&gt;
===Connexion API PrestaShop===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Constante!!Description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;PSIMPORT_API_URL&amp;lt;/code&amp;gt;||URL de base de l&amp;#039;API Webservice PrestaShop (ex. &amp;lt;code&amp;gt;https://www.monsite.com/api&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;PSIMPORT_API_KEY&amp;lt;/code&amp;gt;||Clé du Webservice API PrestaShop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Dépannage : HTTP 403 sur l&amp;#039;API (hébergement derrière Cloudflare)===&lt;br /&gt;
&lt;br /&gt;
Si le test de connexion (ou n&amp;#039;importe quel script &amp;lt;code&amp;gt;fetch-*&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;import-*&amp;lt;/code&amp;gt;) échoue avec une erreur du type &amp;lt;code&amp;gt;HTTP 403 Forbidden&amp;lt;/code&amp;gt; &amp;#039;&amp;#039;&amp;#039;avec un corps de réponse vide&amp;#039;&amp;#039;&amp;#039; et sans redirection détectée, alors que le même appel fonctionne dans un navigateur, le blocage n&amp;#039;est probablement pas dû à PrestaShop mais à un pare-feu applicatif en amont (Cloudflare, ModSecurity, etc.) qui rejette la requête avant qu&amp;#039;elle n&amp;#039;atteigne le site.&lt;br /&gt;
&lt;br /&gt;
Cas rencontré et confirmé sur un hébergement &amp;#039;&amp;#039;&amp;#039;Cloudflare (plan Free)&amp;#039;&amp;#039;&amp;#039; : le &amp;#039;&amp;#039;&amp;#039;Bot Fight Mode&amp;#039;&amp;#039;&amp;#039; gratuit de Cloudflare détecte les appels cURL du module (pas de navigateur, pas de JS, User-Agent non standard) comme du trafic de bot et répond par un &amp;quot;Managed Challenge&amp;quot; — ce qui se traduit côté module par un 403 à corps vide.&lt;br /&gt;
&lt;br /&gt;
Pour confirmer : dans le dashboard Cloudflare, &amp;#039;&amp;#039;&amp;#039;Security &amp;gt; Analytics &amp;gt; Events&amp;#039;&amp;#039;&amp;#039;, filtrer sur les dernières minutes après un nouveau test. Si l&amp;#039;entrée bloquée indique &amp;#039;&amp;#039;&amp;#039;Service = &amp;quot;Bot fight mode&amp;quot;&amp;#039;&amp;#039;&amp;#039; et &amp;#039;&amp;#039;&amp;#039;Action = &amp;quot;Managed Challenge&amp;quot;&amp;#039;&amp;#039;&amp;#039;, c&amp;#039;est ce cas de figure.&lt;br /&gt;
&lt;br /&gt;
Sur le plan Free, ce Bot Fight Mode &amp;#039;&amp;#039;&amp;#039;ne peut pas être contourné sélectivement par chemin d&amp;#039;URL&amp;#039;&amp;#039;&amp;#039;. La seule solution est de désactiver le toggle &amp;#039;&amp;#039;&amp;#039;globalement&amp;#039;&amp;#039;&amp;#039; : &amp;#039;&amp;#039;&amp;#039;Security &amp;gt; Settings &amp;gt; &amp;quot;Bot fight mode&amp;quot;&amp;#039;&amp;#039;&amp;#039; → Off le temps de faire tourner les scripts d&amp;#039;import, puis réactivation ensuite si besoin.&lt;br /&gt;
&lt;br /&gt;
Sur un plan Cloudflare payant (Pro et plus), le Super Bot Fight Mode permet un contournement plus fin via une Security Rule &amp;quot;Skip&amp;quot; ciblée sur &amp;lt;code&amp;gt;/api*&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
&lt;br /&gt;
===Ordre d&amp;#039;exécution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1. Catégories&lt;br /&gt;
php scripts/fetch-categories.php https://www.monsite.com/api ABCDEF... 0 0&lt;br /&gt;
php scripts/import-categories.php 0&lt;br /&gt;
&lt;br /&gt;
# 2. Clients + adresses&lt;br /&gt;
php scripts/fetch-customers.php https://www.monsite.com/api ABCDEF... 0 0&lt;br /&gt;
php scripts/import-customers.php 0&lt;br /&gt;
&lt;br /&gt;
# 3. Produits (TVA résolue via tax_rules_groups, image de couverture téléchargée)&lt;br /&gt;
php scripts/fetch-products.php https://www.monsite.com/api ABCDEF... 0 0&lt;br /&gt;
php scripts/import-products.php https://www.monsite.com/api ABCDEF... 0&lt;br /&gt;
&lt;br /&gt;
# 4. Fichiers téléchargeables des modules (nécessite le module PrestaShop &amp;quot;Psimport Bridge&amp;quot;)&lt;br /&gt;
php scripts/fetch-product-files.php https://www.monsite.com/api ABCDEF... 0 0&lt;br /&gt;
php scripts/import-product-files.php https://www.monsite.com/api ABCDEF... 0&lt;br /&gt;
&lt;br /&gt;
# 4b. Galerie complète des images produits&lt;br /&gt;
php scripts/fetch-product-images.php https://www.monsite.com/api ABCDEF... 0 0&lt;br /&gt;
php scripts/import-product-images.php https://www.monsite.com/api ABCDEF... 0&lt;br /&gt;
&lt;br /&gt;
# 5. Commandes (configurer $importable_state_ids et $payment_module_map en tête du script avant le premier lancement)&lt;br /&gt;
php scripts/fetch-orders.php https://www.monsite.com/api ABCDEF... 0 0&lt;br /&gt;
php scripts/import-orders.php 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Paramètres communs :&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; = 0 pour tout récupérer/importer, ou un nombre pour un test sur un échantillon&lt;br /&gt;
*&amp;lt;code&amp;gt;clean_all_before_fetch&amp;lt;/code&amp;gt; = 1 pour vider la table de staging avant un nouveau fetch (0 par défaut = on accumule/met à jour)&lt;br /&gt;
&lt;br /&gt;
===Rejouer un import après correction d&amp;#039;erreurs===&lt;br /&gt;
&lt;br /&gt;
Chaque table de staging a une colonne &amp;lt;code&amp;gt;import_status&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; = à importer&lt;br /&gt;
*&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; = importé avec succès (&amp;lt;code&amp;gt;fk_dolibarr&amp;lt;/code&amp;gt; contient l&amp;#039;id de l&amp;#039;objet Dolibarr créé)&lt;br /&gt;
*&amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; = en erreur (le détail est dans &amp;lt;code&amp;gt;import_error&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Pour rejouer uniquement les lignes en erreur après correction, utilisez le bouton &amp;quot;Réinitialiser les erreurs&amp;quot; de l&amp;#039;onglet Gestion de l&amp;#039;import, ou :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
UPDATE llx_psimport_product SET import_status = 0 WHERE import_status = 2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
puis relancer le script d&amp;#039;import correspondant.&lt;br /&gt;
&lt;br /&gt;
===Fichiers téléchargeables des modules===&lt;br /&gt;
&lt;br /&gt;
L&amp;#039;API Webservice de PrestaShop &amp;#039;&amp;#039;&amp;#039;n&amp;#039;expose pas&amp;#039;&amp;#039;&amp;#039; les fichiers de &amp;quot;Produit virtuel/téléchargeable&amp;quot; (confirmé par le ticket GitHub officiel PrestaShop/PrestaShop#27834 et plusieurs fils du forum PrestaShop). Cette limitation est contournée par un module PrestaShop &amp;quot;bridge&amp;quot; à installer une seule fois sur la boutique.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution recommandée : module Psimport Bridge&amp;#039;&amp;#039;&amp;#039; (1 clic, comme les autres imports) :&lt;br /&gt;
&lt;br /&gt;
#Installez le module fourni dans &amp;lt;code&amp;gt;bridge/psimportbridge/&amp;lt;/code&amp;gt; sur votre boutique PrestaShop (import du zip depuis le back-office, ou copie FTP/SFTP dans &amp;lt;code&amp;gt;modules/&amp;lt;/code&amp;gt; puis installation)&lt;br /&gt;
#Aucune configuration supplémentaire : le module réutilise la même clé Webservice API déjà renseignée (&amp;lt;code&amp;gt;PSIMPORT_API_KEY&amp;lt;/code&amp;gt;)&lt;br /&gt;
#Dans l&amp;#039;onglet &amp;#039;&amp;#039;&amp;#039;Gestion de l&amp;#039;import&amp;#039;&amp;#039;&amp;#039;, utilisez les boutons &amp;#039;&amp;#039;&amp;#039;↓ Fetch&amp;#039;&amp;#039;&amp;#039; puis &amp;#039;&amp;#039;&amp;#039;→ Importer&amp;#039;&amp;#039;&amp;#039; sur la ligne « Fichiers produits », comme pour les autres ressources&lt;br /&gt;
#Une fois la migration terminée, le module peut être désinstallé sans risque (lecture seule, aucune écriture en base ni sur le disque de PrestaShop)&lt;br /&gt;
&lt;br /&gt;
Ce module n&amp;#039;autorise le téléchargement que des fichiers déjà référencés dans &amp;lt;code&amp;gt;ps_product_download&amp;lt;/code&amp;gt; (protection contre la lecture de fichiers arbitraires).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Solution alternative&amp;#039;&amp;#039;&amp;#039; (si le module bridge ne peut pas être installé) : export CSV manuel de &amp;lt;code&amp;gt;ps_product_download&amp;lt;/code&amp;gt; depuis phpMyAdmin/Adminer, plus une copie locale du dossier &amp;lt;code&amp;gt;download/&amp;lt;/code&amp;gt; de PrestaShop, puis &amp;lt;code&amp;gt;php scripts/import-product-files.php /chemin/export.csv /chemin/download/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Galerie complète des images produits===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fetch-product-images.php&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;import-product-images.php&amp;lt;/code&amp;gt; récupèrent &amp;#039;&amp;#039;&amp;#039;toutes&amp;#039;&amp;#039;&amp;#039; les images de chaque produit PrestaShop (pas seulement la couverture), via le sous-endpoint &amp;lt;code&amp;gt;products/{id}/images&amp;lt;/code&amp;gt; de l&amp;#039;API Webservice, dans une table de staging dédiée &amp;lt;code&amp;gt;llx_psimport_productimage&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Points à vérifier lors du premier lancement :&lt;br /&gt;
&lt;br /&gt;
*La position de chaque image dans la galerie Dolibarr est déduite de l&amp;#039;ordre renvoyé par l&amp;#039;API — vérifiez visuellement l&amp;#039;ordre après import et réordonnez manuellement si besoin&lt;br /&gt;
*Pour éviter d&amp;#039;afficher deux fois la même photo (couverture + galerie), les doublons exacts sont détectés et ignorés silencieusement&lt;br /&gt;
*La forme exacte de la réponse JSON peut varier selon les versions de PrestaShop : testez d&amp;#039;abord avec &amp;lt;code&amp;gt;limit=5&amp;lt;/code&amp;gt; sur un échantillon&lt;br /&gt;
&lt;br /&gt;
===Vérifications après chaque étape===&lt;br /&gt;
&lt;br /&gt;
#Inspecter le contenu des tables &amp;lt;code&amp;gt;llx_psimport_*&amp;lt;/code&amp;gt; (cohérence des données, TVA résolue correctement)&lt;br /&gt;
#Dans l&amp;#039;UI Dolibarr, vérifier : arborescence des catégories, fiches tiers (adresse, contact), fiches produits (prix HT/TTC, TVA, image, fichier joint), commandes (lignes, totaux, statut)&lt;br /&gt;
#Comparer les comptages (nombre de catégories/clients/produits/commandes) entre PrestaShop, la table de staging, et Dolibarr&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
&lt;br /&gt;
===Faut-il un accès direct à la base MySQL de PrestaShop ?===&lt;br /&gt;
Non. Toute la migration passe par l&amp;#039;API Webservice REST de PrestaShop, à l&amp;#039;exception d&amp;#039;une étape ponctuelle et optionnelle (export CSV manuel) si le module bridge ne peut pas être installé pour les fichiers téléchargeables.&lt;br /&gt;
&lt;br /&gt;
===Quelles versions de PrestaShop sont compatibles ?===&lt;br /&gt;
De PrestaShop 1.6 à 9.x, via l&amp;#039;API Webservice standard. Le module bridge (côté PrestaShop) déclare lui-même cette plage de compatibilité.&lt;br /&gt;
&lt;br /&gt;
===Que faire si une ressource échoue partiellement à l&amp;#039;import ?===&lt;br /&gt;
Corriger la donnée en cause (dans la table de staging ou côté PrestaShop), remettre les lignes en erreur à &amp;lt;code&amp;gt;import_status = 0&amp;lt;/code&amp;gt; (bouton &amp;quot;Réinitialiser les erreurs&amp;quot; ou requête SQL), puis relancer uniquement le script d&amp;#039;import concerné.&lt;br /&gt;
&lt;br /&gt;
===Le test de connexion échoue avec un 403 alors que l&amp;#039;URL fonctionne dans un navigateur===&lt;br /&gt;
Voir la section [[#Dépannage : HTTP 403 sur l&amp;#039;API (hébergement derrière Cloudflare)|Dépannage HTTP 403]] : c&amp;#039;est généralement un pare-feu applicatif (Cloudflare Bot Fight Mode) qui bloque les appels cURL, pas PrestaShop lui-même.&lt;br /&gt;
&lt;br /&gt;
===Le module Psimport Bridge modifie-t-il des données sur PrestaShop ?===&lt;br /&gt;
Non, il est en lecture seule : aucune écriture en base ni sur le disque de PrestaShop, et il n&amp;#039;autorise le téléchargement que des fichiers déjà référencés dans &amp;lt;code&amp;gt;ps_product_download&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Voir aussi==&lt;br /&gt;
&lt;br /&gt;
*[https://www.atoo-net.com Atoo-Net — Éditeur du module]&lt;br /&gt;
*[https://framagit.org/grandoc/psimport Dépôt du module]&lt;br /&gt;
*[https://wiki.dolibarr.org/index.php/Module_UltimateMarketPlace_FR Module UltimateMarketPlace]&lt;br /&gt;
&lt;br /&gt;
==Autres langues==&lt;br /&gt;
&lt;br /&gt;
* [[Module_psimport_EN|English documentation for the psimport module]]&lt;br /&gt;
&lt;br /&gt;
[[en:Module_psimport_EN]]&lt;/div&gt;</summary>
		<author><name>Grandoc</name></author>
	</entry>
</feed>