J’ai développé un connecteur PrestaShop/Odoo open source — voici comment il fonctionne
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
|
1 2 3 4 5 6 7 8 9 10 11 12 |
PrestaShop 1.7+ Odoo 17 +-----------------------+ +---------------------------+ | | Webservice | | | Clients | ------------> | res.partner | | Adresses | ------------> | res.partner (enfants) | | Newsletter / Optin | ------------> | mailing.list + tags | | | | | | newsletter=0 | <------------ | Désinscription / BL | | optin=0 | (revocation) | (temps réel + cron) | | | | | | Module PHP webhook | -- webhook -> | /prestashop/webhook/* | +-----------------------+ +---------------------------+ |
Le module se compose de deux parties :
- Côté Odoo : le module
prestashop_connector_basic(Python, ~2 500 lignes) - 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=1vers PrestaShop. Uniquementnewsletter=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 clientactionObjectAddressAdd/Update/DeleteAfter— CRUD des adressesactionNewsletterRegistrationAfter— inscription newsletter (visiteurs sans compte)
Chaque webhook est signé en HMAC-SHA256 avec un secret partagé. Côté Odoo, trois endpoints :
|
1 2 3 |
GET /prestashop/webhook/ping # Health check POST /prestashop/webhook/consents # Newsletter + optin POST /prestashop/webhook/addresses # Adresses (create/update/delete) |
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é) |
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
- Cloner le repo dans le dossier
extra-addonsd’Odoo - Mettre à jour la liste des modules (Apps > Update Apps List)
- Installer « PrestaShop Connector (Basic) »
- Configurer
web.base.urldans les paramètres système (sans slash final) - Créer un backend avec l’URL PrestaShop, la clé API et le secret webhook
- Tester la connexion avec le bouton « Test »
- Activer les crons souhaités
Côté PrestaShop
- Copier le module
prestashopodoodans/modules/ - Installer depuis le back-office (Modules > Module Manager)
- Configurer l’URL webhook Odoo, le secret partagé et l’ID backend
- Activer le Webservice (Advanced Parameters > Webservice)
- 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 | — |
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