J’ai développé un connecteur PrestaShop/Odoo open source — voici comment il fonctionne

Published by David on






PrestaShop Connector Basic — Synchroniser PrestaShop 1.7 et Odoo 17 sans usine à gaz


PrestaShop Connector Basic — Synchroniser PrestaShop 1.7 et Odoo 17 sans usine à gaz

Quand on gère une (ou plusieurs) boutiques PrestaShop et qu’on utilise Odoo comme ERP, la question de la synchronisation finit toujours par arriver. Les connecteurs existants sont soit hors de prix, soit surdimensionnés pour le besoin. J’avais besoin d’un truc qui fait le job sans toucher à ce qu’il ne devrait pas toucher.

J’ai donc développé PrestaShop Connector Basic : un module Odoo 17 open source (LGPL-3) qui synchronise les clients, les adresses et les consentements newsletter entre PrestaShop 1.7+ et Odoo 17. Pas de dépendance externe, pas de complexité inutile.

Le problème

Si vous avez plusieurs sites PrestaShop (par exemple shop-fr.example.com, shop-en.example.com), vous voulez :

  • Retrouver tous vos clients dans Odoo, avec leur provenance (quel site)
  • Que les adresses de livraison suivent en temps réel
  • Que les inscriptions newsletter soient synchronisées dans les listes Email Marketing d’Odoo
  • Que quand quelqu’un se désinscrit dans Odoo, ça se propage dans PrestaShop
  • Que tout ça fonctionne sans intervention manuelle

Et surtout : ne pas réinscrire quelqu’un qui s’est désinscrit, ne pas écraser des données, ne pas envoyer de doublons.

Architecture en 30 secondes

Le module se compose de deux parties :

  1. Côté Odoo : le module prestashop_connector_basic (Python, ~2 500 lignes)
  2. Côté PrestaShop : le module prestashopodoo (PHP) qui envoie les webhooks

Fonctionnalités

Import clients

Import incrémental par ID PrestaShop. Déduplication par email. Support des comptes invités. Tag automatique par site d’origine.

Sync adresses

Adresses importées comme sous-contacts (type « Livraison »). Déduplication par signature d’adresse. Webhook temps réel + cron hebdo en filet de sécurité.

Consentements marketing

Sync bidirectionnelle des champs newsletter et optin. Une liste de diffusion par site. Intégration Email Marketing native.

Multi-backend

Un backend par site PrestaShop. Tags, listes, mappings et logs séparés. Blacklist globale partagée.

Le principe de revocation-only

Odoo ne pousse jamais newsletter=1 vers PrestaShop. Uniquement newsletter=0.

Concrètement : quand un contact se désinscrit dans Odoo (opt-out, clic sur le lien de désinscription, ou ajout en blacklist), l’info est propagée immédiatement à PrestaShop. Mais l’inverse — réinscrire quelqu’un — ne passe que par PrestaShop. Ça évite les boucles de sync et ça respecte le RGPD.

La propagation fonctionne en trois couches :

Déclencheur Mécanisme Délai
Opt-out manuel dans Odoo Hook sur mailing.contact.write() Temps réel
Clic lien désinscription Hook contrôleur asynchrone ~1 seconde
Ajout en blacklist Hook sur mail.blacklist.create() Temps réel
Filet de sécurité Cron toutes les 15 min 15 min max

Les webhooks

Le module PrestaShop prestashopodoo s’accroche à 8 hooks natifs de PrestaShop :

  • actionCustomerAccountAdd/Update — création/modification de compte client
  • actionObjectAddressAdd/Update/DeleteAfter — CRUD des adresses
  • actionNewsletterRegistrationAfter — inscription newsletter (visiteurs sans compte)

Chaque webhook est signé en HMAC-SHA256 avec un secret partagé. Côté Odoo, trois endpoints :

Le backend est identifié automatiquement par backend_id ou par matching du shop_url.

Les crons

Tous désactivés par défaut (activables dans Settings > Technical > Scheduled Actions) :

Cron Intervalle Rôle
Import Customers 6h Import incrémental des nouveaux clients
Sync Consents (PS → Odoo) 2h Sync newsletter/optin vers les listes de diffusion
Sync Consents (Odoo → PS) 1h Push des désinscriptions vers PrestaShop
Full Scan Addresses 1 semaine Resync complète des adresses (filet de sécurité)
Note : Les webhooks assurent la synchronisation temps réel. Les crons sont un filet de sécurité pour rattraper ce qui aurait pu être manqué (timeout réseau, redémarrage serveur, etc.).

Multi-backend : un module, plusieurs boutiques

Chaque backend Odoo représente un site PrestaShop. Chaque backend a ses propres :

  • Credentials API + webhook secret
  • Tag client (« Client Prestashop — shop.example.com »)
  • Listes de diffusion (« Newsletter Prestashop — shop.example.com »)
  • Mappings (client, adresse, produit, commande)
  • Logs de synchronisation

La blacklist email est globale : un email blacklisté dans Odoo sera désabonné de tous les backends PrestaShop.

Logging intégré

Chaque opération de sync est loguée dans un modèle dédié (prestashop.sync.log) avec :

  • Type d’opération (import, sync, webhook…)
  • Statut (OK, warning, erreur) avec code couleur
  • ID PrestaShop concerné
  • Durée d’exécution
  • Détails complets en cas d’erreur

Le tout est filtrable, groupable, et purgeable depuis l’interface backend Odoo.

Installation

Côté Odoo

  1. Cloner le repo dans le dossier extra-addons d’Odoo
  2. Mettre à jour la liste des modules (Apps > Update Apps List)
  3. Installer « PrestaShop Connector (Basic) »
  4. Configurer web.base.url dans les paramètres système (sans slash final)
  5. Créer un backend avec l’URL PrestaShop, la clé API et le secret webhook
  6. Tester la connexion avec le bouton « Test »
  7. Activer les crons souhaités

Côté PrestaShop

  1. Copier le module prestashopodoo dans /modules/
  2. Installer depuis le back-office (Modules > Module Manager)
  3. Configurer l’URL webhook Odoo, le secret partagé et l’ID backend
  4. Activer le Webservice (Advanced Parameters > Webservice)
  5. Créer une clé API avec les permissions : GET (customers, addresses, countries, states, languages), PUT (customers)

Roadmap v2

Le module est en production depuis mars 2026. La v2 est prévue pour mai 2026, après un mois de stabilisation de la partie newsletter :

  • Phase 1 — Import produits (PS → Odoo) : catalogue, déclinaisons, images
  • Phase 2 — Import commandes (l’infra existe déjà, à activer)
  • Phase 3 — Sync stock (Odoo → PS)
  • Phase 4 — Mapping TVA

Stack technique

Composant Techno Version
ERP Odoo Community 17.0
E-commerce PrestaShop 1.7+
Module Odoo Python ~2 500 lignes
Module PrestaShop PHP ~800 lignes
API PrestaShop Webservice (XML/REST) Basic Auth
Webhooks JSON + HMAC-SHA256 3 endpoints
Licence LGPL-3
Retour d’expérience : si vous utilisez le database manager d’Odoo pour faire des backups et que vous avez plusieurs bases (ou des copies de backup), désactivez les crons sur les bases secondaires. Sinon les crons d’envoi de mail tournent sur chaque base et vos newsletters partent en double (ou triple). On a appris ça à la dure.

Conclusion

Ce module ne remplace pas un connecteur PrestaShop/Odoo complet avec gestion des commandes et du stock (ça, c’est la v2). Il se concentre sur un périmètre précis — clients, adresses et consentements marketing — et il le fait correctement. En temps réel, sans doublons, et pour zéro euro de licence.

Téléchargement

Les deux modules sont open source (LGPL-3) et disponibles sur GitHub :

Module Côté Lien
PrestaShop Connector Basic Odoo 17 github.com/smkerz/odoo-prestashop-sync
PrestaShop Odoo Webhook PrestaShop 1.7+ github.com/smkerz/prestashop-odoo-webhook

Le module Odoo gère toute la logique de synchronisation (import clients, adresses, consentements, crons, logs). Le module PrestaShop est son compagnon côté e-commerce : il envoie les webhooks temps réel à chaque modification de client, d’adresse ou de consentement newsletter. Les deux fonctionnent ensemble mais le module Odoo peut aussi tourner seul avec les crons, sans webhooks.

Si vous avez des questions ou si vous voulez contribuer, n’hésitez pas.

Odoo 17
PrestaShop 1.7
Docker
Webhook
Email Marketing
RGPD
Open Source



0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *