Connettore Odoo — Guida completa
Installare, configurare e gestire la sincronizzazione in tempo reale PrestaShop ⇄ Odoo (prodotti e combinazioni, scorte, clienti, ordini, fatture, spedizioni) per PrestaShop 8 e 9 e Odoo da 14 a 20.
Il Connettore Odoo sincronizza in tempo reale e in entrambe le direzioni i tuoi prodotti e le combinazioni, le scorte, i clienti, gli ordini, le fatture e le spedizioni tra PrestaShop e Odoo. Questa guida copre l’installazione, la connessione, ogni scheda delle impostazioni, la sincronizzazione iniziale, il cron, i webhook Odoo e la risoluzione dei problemi.
Requisiti
- PrestaShop da 8.0 a 9.x.
- PHP da 7.4 a 8.5 con l’estensione cURL.
- Odoo da 14 a 20, self-hosted, Odoo.sh o Odoo Online, raggiungibile dal tuo server PrestaShop. Su Odoo Online, il tuo piano deve includere l’accesso all’API esterna.
- Le applicazioni Odoo Vendita e Magazzino, più Fatturazione se crei le fatture. L’applicazione Consegna è necessaria per rinviare il numero di tracciamento a PrestaShop.
- Un utente Odoo dedicato, con i diritti su Vendite, Magazzino e Fatturazione, e una chiave API.
Il modulo comunica con Odoo tramite JSON-RPC. L’estensione PHP xmlrpc, rimossa in PHP 8, non è necessaria.
Installa l’applicazione Magazzino in Odoo prima di inviare i tuoi prodotti. Da Odoo 18, la gestione delle scorte di un prodotto dipende da questa applicazione: i prodotti creati senza di essa non verrebbero gestiti a magazzino.
Installazione e aggiornamento
- Nel back office, apri Moduli > Gestore moduli, fai clic su Carica un modulo e rilascia il file zip del modulo.
- Apri poi la configurazione tramite il pulsante Configura o il menu Odoo Connector.
Per aggiornare, carica la nuova versione nello stesso modo: PrestaShop avvia l’aggiornamento e le tue impostazioni, la chiave API e le mappature vengono conservate.
Generare una chiave API in Odoo
- Accedi a Odoo con l’utente dedicato alla sincronizzazione.
- Fai clic sul tuo avatar, poi su Il mio profilo (o Preferenze), scheda Sicurezza account, e su Nuova chiave API.
- Copia la chiave: viene mostrata una sola volta.
Un utente dedicato (ad esempio «PrestaShop Sync») invece di un account amministratore personale ti offre una cronologia chiara in Odoo e permette di revocare l’accesso in qualsiasi momento.
Scheda Connessione
- URL Odoo: l’indirizzo della tua istanza, che inizia con
https://(ohttp://), ad esempiohttps://mia-azienda.odoo.com. - Database: il nome esatto del database Odoo.
- Login: il login (spesso l’e-mail) dell’utente dedicato.
- Chiave API: memorizzata in forma cifrata. Lascia il campo vuoto per mantenere la chiave attuale.
Fai clic su Verifica la connessione: il modulo mostra la versione di Odoo, l’utente e l’azienda. Fai poi clic su Carica elenchi da Odoo per scegliere da un elenco l’azienda, il magazzino, l’ubicazione, il team di vendita, l’addetto vendite e il registro pagamenti. Salva, quindi spunta Abilita la sincronizzazione.
Per sicurezza, la chiave API salvata non viene mai inviata a un indirizzo, database o login diversi da quelli salvati: per testare un altro server, inserisci la sua chiave API.
La stessa scheda propone anche l’elaborazione in tempo reale (le modifiche partono subito dopo la visualizzazione della pagina al visitatore; se disattivata, è il cron a inviarle), la modalità test, il log dettagliato, l’elenco di IP autorizzati per il webhook e l’attivazione di ciascun flusso: clienti, prodotti, scorte, ordini.

Scheda Prodotti
- Direzione dei prodotti: da PrestaShop a Odoo, da Odoo a PrestaShop, o in entrambi i sensi.
- Immagine di copertina, albero delle categorie (con la categoria Odoo padre) e prezzo d’acquisto inviato come costo (da disattivare se Odoo calcola i costi con costo medio ponderato o FIFO).
- Archivia le varianti Odoo assenti in PrestaShop.
- Mappatura campi aggiuntivi: una riga per campo, nel formato
odoo_field=prestashop_field. - Da Odoo a PrestaShop: prezzo, nome, riferimento ed EAN13, stato attivo, a scelta.
- Importa i nuovi prodotti Odoo: i prodotti vendibili creati in Odoo vengono creati in PrestaShop, con le loro varianti come combinazioni, nella categoria e con la regola tasse scelte, attivati o meno.

Scheda Stock
- Master dello stock: Odoo (consigliato), PrestaShop, o entrambi. I movimenti legati agli ordini non vengono mai conteggiati due volte.
- Quantità inviata a PrestaShop: la quantità vendibile (al netto delle riservazioni, consigliata per evitare la vendita oltre la disponibilità) o la quantità in magazzino.
- Magazzino Odoo, applicato anche agli ordini, e ubicazione specifica facoltativa.

Scheda Ordini
- Invio degli ordini a Odoo: appena vengono creati o solo una volta pagati, con una data prima della quale gli ordini vengono ignorati.
- Conferma il preventivo Odoo all’ordine o al pagamento: la conferma crea l’ordine di consegna in Odoo.
- Tasse: aliquote PrestaShop (vengono usate le imposte Odoo con la stessa aliquota e i totali coincidono) o lascia calcolare a Odoo (imposte dei prodotti e posizioni fiscali di Odoo).
- Stati PrestaShop che annullano l’ordine Odoo, team di vendita e addetto vendite.
- Le consegne Odoo aggiornano PrestaShop: alla convalida della consegna, l’ordine assume lo stato scelto (Spedito per impostazione predefinita) con il numero di tracciamento e il cliente riceve l’e-mail di spedizione.
- Gli annullamenti Odoo aggiornano PrestaShop.
Ogni riga d’ordine punta alla variante Odoo della combinazione. La spedizione, la confezione regalo e gli sconti vengono aggiunti su righe distinte, con gli sconti suddivisi per aliquota d’imposta. Il modulo confronta il totale Odoo con quello di PrestaShop e segnala qualsiasi differenza nel log.


Scheda Fatturazione
- Fatture Odoo: non creare, creare come bozza, oppure creare e confermare. La fattura viene creata a partire dall’ordine confermato, all’ordine o al pagamento.
- Registra il pagamento in Odoo: la fattura confermata di un ordine pagato viene segnata come pagata nel registro corrispondente.
- Registro pagamenti predefinito e registro per modulo di pagamento: una riga per modulo, nel formato
module_name=journal_id, ad esempiostripe_official=7.
Senza un registro configurato, il pagamento non viene registrato: il log lo segnala con un avviso che indica il modulo di pagamento interessato.


Sincronizzazione iniziale
Su un negozio esistente, popola Odoo dalla scheda Strumenti, in quest’ordine:
- Invia tutti i clienti.
- Invia tutti i prodotti.
- Importa tutto lo stock Odoo se Odoo è il master dello stock.
- Invia gli ordini effettuati dal giorno scelto.
Le attività partono a lotti tramite il cron. Se il tuo catalogo o i tuoi clienti esistono già in Odoo, vengono ritrovati invece di essere ricreati: i clienti tramite la loro e-mail, gli indirizzi tramite il loro riferimento, i prodotti semplici tramite il loro riferimento (o PS-<id> senza riferimento), i prodotti con combinazioni tramite i riferimenti delle loro varianti e gli ordini tramite la loro origine.
Inizia con la modalità test attiva: ogni operazione viene registrata nel log senza scrivere nulla in Odoo. Disattivala una volta verificato il risultato.

Cron
Il cron elabora la coda e legge le modifiche fatte in Odoo (scorte, prodotti, consegne, annullamenti). Pianificalo ogni 1-5 minuti con l’URL mostrato nella dashboard:
curl -s "https://tuo-negozio.com/module/dfodooconnect/cron?token=TUO_TOKEN"
oppure, senza limite di durata HTTP, dalla riga di comando del server:
php /percorso/di/prestashop/modules/dfodooconnect/cron.php
Due esecuzioni non girano mai contemporaneamente. Il pulsante Sincronizza ora della dashboard avvia un’esecuzione immediata.
Webhook Odoo (tempo reale da Odoo)
Senza webhook, il cron legge le modifiche di Odoo a ogni esecuzione. Per un ritorno immediato, da Odoo 17, crea senza codice una regola per modello in Impostazioni > Funzioni tecniche > Regole di automazione:
- Modelli: Prodotto, Variante prodotto, Quantitativi o Movimento di magazzino, Trasferimento, Ordine di vendita.
- Attivazione: Al momento del salvataggio.
- Azione: Invia notifica Webhook verso l’URL del webhook mostrato nella dashboard.
Il token è obbligatorio: l’URL del webhook mostrato nella dashboard lo contiene già (?token=). Per i tuoi script, può anche essere inviato nell’intestazione X-DF-Token. Il contenuto ricevuto non viene mai applicato così com’è: indica soltanto quale record è cambiato, e il modulo lo rilegge in Odoo tramite l’API.
Una richiesta senza un token valido viene rifiutata con un codice 403. Puoi inoltre limitare gli indirizzi IP autorizzati nella scheda Connessione.
Dashboard e monitoraggio
La dashboard mostra lo stato di salute (ultima esecuzione del cron, ultima chiamata Odoo riuscita, attività in attesa più vecchia, errori e avvisi nelle ultime 24 h), i contatori della coda (in attesa, nuovo tentativo, in quarantena, completate) e il numero di record collegati. Le schede Coda, Mappature e Log sono filtrabili, e un riquadro Odoo nelle schede ordine, prodotto e cliente offre un pulsante Sincronizza ora.






La coda resiliente
Ogni modifica viene inserita in una coda elaborata dopo l’invio della pagina al cliente: il processo di acquisto non aspetta mai Odoo. In caso di errore, l’attività viene ritentata con un intervallo crescente (da 1 minuto a 24 ore); dopo il numero di tentativi configurato (8 per impostazione predefinita), passa in quarantena e si rilancia con un clic. Se Odoo non risponde più, un interruttore di sicurezza sospende le chiamate e conserva le attività senza consumare i loro tentativi, poi la sincronizzazione riprende da sola al ritorno di Odoo.

Cambiare database Odoo
Se passi da un database Odoo a un altro (database di test verso produzione, migrazione), il modulo lo rileva grazie all’identificativo univoco del database. Dimentica allora le mappature e le impostazioni specifiche del vecchio database (azienda, magazzino, ubicazione, team, addetto vendite, registro) e lo segnala con un messaggio: ricarica gli elenchi da Odoo e verifica le impostazioni. Alla sincronizzazione successiva, i record del nuovo database vengono ritrovati tramite i loro riferimenti.
Campi sincronizzati
Clienti
Contatto Odoo con nome (o azienda), e-mail, partita IVA, SIRET, paese, regione, lingua e telefono. Gli indirizzi di fatturazione e di consegna diventano contatti figli al momento dell’invio degli ordini. Una partita IVA rifiutata da Odoo non impedisce l’invio: il contatto viene creato senza partita IVA e viene aggiunto un avviso nel log.
Prodotti e combinazioni
Nome, prezzo al netto delle imposte, costo, peso convertito in kg, riferimento, codice a barre, imposta alla stessa aliquota (imposta sui servizi per i prodotti virtuali), categoria e immagine. Ogni combinazione è collegata a una variante Odoo; gli attributi e i loro valori vengono creati se necessario. Un prodotto invariato non viene riscritto in Odoo.

Scorte
Per combinazione, sul magazzino o sull’ubicazione scelti.
Ordini
Cliente, indirizzi di fatturazione e di consegna, righe per variante, spedizione, confezione regalo, sconti, valuta tramite listino prezzi, magazzino, team e addetto vendite.
Risoluzione dei problemi
- «Authentication refused by Odoo»: il login o la chiave API non sono corretti, oppure la chiave è stata revocata. Genera una nuova chiave.
- «Odoo closed the connection: check the database name»: il database indicato non esiste su questo server.
- «Odoo redirects this URL»: usa l’indirizzo indicato nel messaggio (spesso la versione
https://). - «No Odoo sale tax at 20%»: crea in Odoo un’imposta di vendita all’aliquota indicata, in percentuale e al netto delle imposte.
- «No Odoo payment journal for payment module…»: scegli un registro pagamenti predefinito o per modulo nella scheda Fatturazione.
- Il numero di tracciamento non arriva: installa l’applicazione Consegna in Odoo. Lo stato Spedito funziona anche senza.
- «Total mismatch»: il totale Odoo è diverso da quello di PrestaShop; verifica le imposte Odoo corrispondenti alle aliquote dell’ordine.
- Le scorte o le consegne non arrivano: verifica che il cron venga eseguito (data dell’ultima esecuzione del cron nella dashboard) e la direzione configurata.
- Un’attività è in quarantena: leggi il suo messaggio nella scheda Coda, correggi la causa, poi rilanciala.
Disinstallazione
La disinstallazione rimuove le tabelle di mappatura, di coda e di log, nonché le impostazioni del modulo. I tuoi dati in Odoo non vengono modificati. In caso di reinstallazione, i record esistenti in Odoo vengono ritrovati tramite i loro riferimenti, senza duplicati.