Konektor Odoo: kompletny przewodnik
Instalacja, konfiguracja i praca z synchronizacją w czasie rzeczywistym PrestaShop ⇄ Odoo (produkty i kombinacje, stan magazynowy, klienci, zamówienia, faktury, wysyłki) dla PrestaShop 8 i 9 oraz Odoo 14 do 20.
Konektor Odoo synchronizuje w czasie rzeczywistym i w obu kierunkach Twoje produkty i kombinacje, stan magazynowy, klientów, zamówienia, faktury i wysyłki między PrestaShop a Odoo. Ten przewodnik obejmuje instalację, połączenie, każdą zakładkę ustawień, synchronizację początkową, cron, webhooki Odoo i rozwiązywanie problemów.
Wymagania
- PrestaShop 8.0 do 9.x.
- PHP 7.4 do 8.5 z rozszerzeniem cURL.
- Odoo 14 do 20, self-hosted, Odoo.sh lub Odoo Online, dostępne z Twojego serwera PrestaShop. W przypadku Odoo Online Twój plan musi obejmować dostęp do zewnętrznego API.
- Aplikacje Odoo Sprzedaż i Magazynowanie, a także Fakturowanie, jeśli tworzysz faktury. Aplikacja Dostawa jest potrzebna do przesyłania numeru śledzenia do PrestaShop.
- Dedykowany użytkownik Odoo z uprawnieniami do Sprzedaży, Magazynu i Fakturowania oraz klucz API.
Moduł komunikuje się z Odoo przez JSON-RPC. Rozszerzenie PHP xmlrpc, usunięte z PHP 8, nie jest potrzebne.
Zainstaluj aplikację Magazynowanie w Odoo przed wysłaniem produktów. Od Odoo 18 śledzenie stanu magazynowego produktu zależy od tej aplikacji: produkty utworzone bez niej nie byłyby śledzone w magazynie.
Instalacja i aktualizacja
- W panelu administracyjnym otwórz Moduły > Menedżer modułów, kliknij Wgraj moduł i wskaż plik zip modułu.
- Następnie otwórz konfigurację przyciskiem Konfiguruj lub z menu Odoo Connector.
Aby zaktualizować moduł, wgraj nową wersję w ten sam sposób: PrestaShop uruchomi aktualizację, a Twoje ustawienia, klucz API i mapowania zostaną zachowane.
Generowanie klucza API w Odoo
- Zaloguj się do Odoo jako użytkownik przeznaczony do synchronizacji.
- Kliknij swój awatar, a następnie Mój profil (lub Preferencje), zakładkę Bezpieczeństwo konta i Nowy klucz API.
- Skopiuj klucz: jest wyświetlany tylko raz.
Dedykowany użytkownik (na przykład „PrestaShop Sync”) zamiast osobistego konta administratora zapewnia czytelną historię w Odoo i pozwala w każdej chwili cofnąć dostęp.
Zakładka Połączenie
- URL Odoo: adres Twojej instancji, zaczynający się od
https://(lubhttp://), na przykładhttps://mycompany.odoo.com. - Baza danych: dokładna nazwa bazy Odoo.
- Login: login (zwykle e-mail) dedykowanego użytkownika.
- Klucz API: przechowywany w postaci zaszyfrowanej. Pozostaw pole puste, aby zachować obecny klucz.
Kliknij Testuj połączenie: moduł wyświetli wersję Odoo, użytkownika i firmę. Następnie kliknij Wczytaj listy z Odoo, aby wybrać z list firmę, magazyn, lokalizację, zespół sprzedaży, sprzedawcę i dziennik płatności. Zapisz, a następnie zaznacz Włącz synchronizację.
Ze względów bezpieczeństwa zapisany klucz API nigdy nie jest wysyłany na inny adres, do innej bazy ani dla innego loginu niż zapisane: aby przetestować inny serwer, wprowadź jego klucz API.
Ta sama zakładka zawiera także przetwarzanie w czasie rzeczywistym (zmiany są wysyłane zaraz po wyświetleniu strony odwiedzającemu; gdy jest wyłączone, wysyła je cron), tryb testowy, szczegółowy log, listę dozwolonych adresów IP dla webhooka oraz włączanie poszczególnych przepływów: klienci, produkty, stany magazynowe, zamówienia.
Zakładka Produkty
- Kierunek produktów: z PrestaShop do Odoo, z Odoo do PrestaShop lub w obie strony.
- Zdjęcie główne, drzewo kategorii (z nadrzędną kategorią Odoo) oraz cena zakupu wysyłana jako koszt (wyłącz, jeśli Odoo oblicza koszty metodą średniej ważonej lub FIFO).
- Archiwizuj warianty Odoo, których brak w PrestaShop.
- Dodatkowe mapowanie pól: jedna linia na pole, w formacie
odoo_field=prestashop_field. - Z Odoo do PrestaShop: cena, nazwa, referencja (indeks) i EAN13, status aktywności, do wyboru.
- Importuj nowe produkty Odoo: produkty przeznaczone do sprzedaży utworzone w Odoo są tworzone w PrestaShop, a ich warianty jako kombinacje, w wybranej kategorii i z wybraną regułą podatkową, jako włączone lub nie.
Zakładka Stan magazynowy
- System nadrzędny dla stanów: Odoo (zalecane), PrestaShop lub oba. Ruchy związane z zamówieniami nigdy nie są liczone podwójnie.
- Ilość wysyłana do PrestaShop: ilość dostępna (po odjęciu rezerwacji, zalecane, aby uniknąć sprzedaży ponad stan) lub ilość na stanie.
- Magazyn Odoo, stosowany również do zamówień, oraz opcjonalna konkretna lokalizacja.
Zakładka Zamówienia
- Wysyłanie zamówień do Odoo: od razu po złożeniu lub dopiero po opłaceniu, z datą, przed którą zamówienia są ignorowane.
- Potwierdź ofertę Odoo przy złożeniu zamówienia lub przy płatności: potwierdzenie tworzy zlecenie dostawy w Odoo.
- Podatki: stawki PrestaShop (używane są podatki Odoo o tej samej stawce, a sumy się zgadzają) lub pozwól Odoo obliczyć (podatki produktów i pozycje fiskalne Odoo).
- Statusy PrestaShop, które anulują zamówienie w Odoo, zespół sprzedaży i sprzedawca.
- Dostawy w Odoo aktualizują PrestaShop: po zatwierdzeniu dostawy zamówienie otrzymuje wybrany status (domyślnie Wysłane) z numerem śledzenia, a klient dostaje e-mail o wysyłce.
- Anulowania w Odoo aktualizują PrestaShop.
Każda pozycja zamówienia wskazuje wariant Odoo odpowiadający kombinacji. Wysyłka, opakowanie prezentowe i rabaty są dodawane jako osobne pozycje, przy czym rabaty są rozbijane według stawki podatku. Moduł porównuje sumę w Odoo z sumą w PrestaShop i zgłasza każdą rozbieżność w logu.
Zakładka Fakturowanie
- Faktury Odoo: nie twórz, utwórz jako szkic lub utwórz i zaksięguj. Faktura jest tworzona na podstawie potwierdzonego zamówienia, przy złożeniu zamówienia lub przy płatności.
- Zarejestruj płatność w Odoo: zaksięgowana faktura opłaconego zamówienia jest oznaczana jako opłacona w odpowiednim dzienniku.
- Domyślny dziennik płatności oraz dziennik dla modułu płatności: jedna linia na moduł, w formacie
module_name=journal_id, na przykładstripe_official=7.
Bez skonfigurowanego dziennika płatność nie jest rejestrowana: log sygnalizuje to ostrzeżeniem wskazującym dany moduł płatności.
Synchronizacja początkowa
W istniejącym sklepie zasil Odoo z zakładki Narzędzia, w tej kolejności:
- Wyślij wszystkich klientów.
- Wyślij wszystkie produkty.
- Importuj cały stan magazynowy Odoo, jeśli Odoo jest systemem nadrzędnym dla stanów.
- Wyślij zamówienia złożone od wybranej daty.
Zadania są wysyłane partiami przez cron. Jeśli Twój katalog lub klienci już istnieją w Odoo, są odnajdywani zamiast tworzeni od nowa: klienci po adresie e-mail, adresy po referencji, produkty proste po referencji (lub PS-<id>, gdy brak referencji), produkty z kombinacjami po referencjach ich wariantów, a zamówienia po dokumencie źródłowym.
Zacznij z włączonym trybem testowym: każda operacja jest zapisywana w logu, ale nic nie jest zapisywane w Odoo. Wyłącz go po sprawdzeniu wyniku.
Cron
Cron przetwarza kolejkę i odczytuje zmiany wprowadzone w Odoo (stany magazynowe, produkty, dostawy, anulowania). Zaplanuj go co 1 do 5 minut, używając adresu URL wyświetlanego na pulpicie:
curl -s "https://twoj-sklep.pl/module/dfodooconnect/cron?token=TWOJ_TOKEN"
lub, bez limitu czasu HTTP, z wiersza poleceń na serwerze:
php /sciezka/do/prestashop/modules/dfodooconnect/cron.php
Dwa uruchomienia nigdy nie działają jednocześnie. Przycisk Synchronizuj teraz na pulpicie uruchamia natychmiastowe przetwarzanie.
Webhooki Odoo (czas rzeczywisty z Odoo)
Bez webhooka cron odczytuje zmiany z Odoo przy każdym uruchomieniu. Aby otrzymywać je natychmiast, od Odoo 17 utwórz bez kodu jedną regułę na model w Ustawienia > Techniczne > Reguły automatyzacji:
- Modele: Produkt, Wariant produktu, Ilości lub Ruch magazynowy, Transfer, Zamówienie sprzedaży.
- Wyzwalacz: Przy zapisie.
- Akcja: Wysyłaj powiadomienia Webhook na adres URL webhooka wyświetlany na pulpicie.
Token jest obowiązkowy: adres URL webhooka wyświetlany na pulpicie już go zawiera (?token=). W przypadku własnych skryptów można go też przesłać w nagłówku X-DF-Token. Otrzymana treść nigdy nie jest stosowana bezpośrednio: wskazuje jedynie, który rekord się zmienił, a moduł odczytuje go ponownie z Odoo przez API.
Żądanie bez prawidłowego tokenu jest odrzucane z kodem 403. Dodatkowo możesz ograniczyć dozwolone adresy IP w zakładce Połączenie.
Pulpit i monitorowanie
Pulpit pokazuje stan systemu (ostatnie uruchomienie crona, ostatnie udane wywołanie Odoo, najstarsze oczekujące zadanie, błędy i ostrzeżenia z 24 h), liczniki kolejki (Oczekujące, Ponawianie, W kwarantannie, Zakończone) oraz liczbę powiązanych rekordów. Zakładki Kolejka, Mapowania i Log można filtrować, a panel Odoo na kartach zamówienia, produktu i klienta zawiera przycisk Synchronizuj teraz.
Odporna kolejka
Każda zmiana trafia do kolejki przetwarzanej po wysłaniu strony do klienta: proces zamówienia nigdy nie czeka na Odoo. W razie niepowodzenia zadanie jest ponawiane z rosnącym odstępem (od 1 minuty do 24 godzin); po skonfigurowanej liczbie prób (domyślnie 8) trafia do kwarantanny i można je ponowić jednym kliknięciem. Jeśli Odoo przestaje odpowiadać, bezpiecznik wstrzymuje wywołania i zachowuje zadania bez zużywania ich prób, a synchronizacja wznawia się samoczynnie po powrocie Odoo.
Zmiana bazy Odoo
Jeśli przechodzisz z jednej bazy Odoo na inną (z bazy testowej na produkcyjną, migracja), moduł wykrywa to dzięki unikalnemu identyfikatorowi bazy. Zapomina wtedy mapowania i ustawienia właściwe dla poprzedniej bazy (firma, magazyn, lokalizacja, zespół, sprzedawca, dziennik) i informuje o tym komunikatem: wczytaj ponownie listy z Odoo i sprawdź ustawienia. Przy następnej synchronizacji rekordy w nowej bazie są odnajdywane po referencjach.
Synchronizowane pola
Klienci
Kontakt Odoo z nazwą (lub firmą), adresem e-mail, numerem VAT, numerem SIRET, krajem, regionem, językiem i telefonem. Adresy do faktury i dostawy stają się kontaktami podrzędnymi w momencie wysyłania zamówień. Numer VAT odrzucony przez Odoo nie blokuje wysyłki: kontakt jest tworzony bez numeru VAT, a do logu dodawane jest ostrzeżenie.
Produkty i kombinacje
Nazwa, cena netto, koszt, waga przeliczona na kg, referencja, kod kreskowy, podatek o tej samej stawce (podatek od usług dla produktów wirtualnych), kategoria i zdjęcie. Każda kombinacja jest powiązana z wariantem Odoo; atrybuty i ich wartości są tworzone w razie potrzeby. Niezmieniony produkt nie jest ponownie zapisywany w Odoo.
Stan magazynowy
Per kombinacja, w wybranym magazynie lub lokalizacji.
Zamówienia
Klient, adresy do faktury i dostawy, pozycje per wariant, wysyłka, opakowanie prezentowe, rabaty, waluta przez cennik, magazyn, zespół i sprzedawca.
Rozwiązywanie problemów
- „Authentication refused by Odoo”: login lub klucz API jest nieprawidłowy albo klucz został unieważniony. Wygeneruj nowy klucz.
- „Odoo closed the connection: check the database name”: wskazana baza danych nie istnieje na tym serwerze.
- „Odoo redirects this URL”: użyj adresu podanego w komunikacie (zwykle wersji
https://). - „No Odoo sale tax at 20%”: utwórz w Odoo podatek sprzedaży o podanej stawce, procentowy i nieuwzględniony w cenie.
- „No Odoo payment journal for payment module…”: wybierz domyślny dziennik płatności lub dziennik dla modułu w zakładce Fakturowanie.
- Numer śledzenia nie wraca: zainstaluj aplikację Dostawa w Odoo. Status Wysłane działa bez niej.
- „Total mismatch”: suma w Odoo różni się od sumy w PrestaShop; sprawdź podatki Odoo odpowiadające stawkom zamówienia.
- Stany magazynowe lub dostawy nie wracają: sprawdź, czy cron się wykonuje (data ostatniego uruchomienia crona na pulpicie) oraz skonfigurowany kierunek.
- Zadanie jest w kwarantannie: przeczytaj jego komunikat w zakładce Kolejka, usuń przyczynę, a następnie ponów zadanie.
Deinstalacja
Deinstalacja usuwa tabele mapowań, kolejki i logu, a także ustawienia modułu. Twoje dane w Odoo nie są modyfikowane. W przypadku ponownej instalacji rekordy istniejące w Odoo są odnajdywane po referencjach, bez duplikatów.