Strona śledzenia zamówień dla wielu przewoźników — Kompletny przewodnik (dftracking)
Instalacja, konfiguracja i użytkowanie modułu dftracking: konektory Colissimo, Mondial Relay, Chronopost i DHL, strona śledzenia w Twoich barwach, pamięć podręczna i cron.
dftracking dodaje do Twojego sklepu PrestaShop stronę śledzenia zamówień w barwach Twojej marki. Moduł odpytuje bezpośrednio API przewoźników (Colissimo, Mondial Relay, Chronopost, DHL), normalizuje ich niejednorodne statusy do wspólnego słownika i prezentuje je na czteroetapowej osi czasu wraz ze szczegółową historią zdarzeń każdej paczki.
Ta dokumentacja dotyczy wersji 1.0.0 modułu, zgodnej z PrestaShop 8.0.0 do 9.x oraz PHP 7.4 do 8.3. Bez nadpisywania klas, bez zależności Composera.
Instalacja
- W panelu administracyjnym PrestaShop otwórz Moduły > Menedżer modułów.
- Kliknij Wgraj moduł i upuść plik
dftracking.zip. - Po zakończeniu instalacji kliknij Konfiguruj.
Podczas instalacji moduł tworzy tabelę pamięci podręcznej ps_dftracking_shipment, generuje losowy token crona i rejestruje się na czterech hookach: moduleRoutes (przyjazny adres /order-tracking), displayOrderDetail (przycisk „Śledź moją paczkę” w szczegółach zamówienia), displayCustomerAccount (link w koncie klienta) oraz actionFrontControllerSetMedia (arkusz stylów strony).
Dane uwierzytelniające API przewoźników
Każdy przewoźnik ma własny sposób uwierzytelniania. Wypełnij tylko te, z których faktycznie korzystasz: nieskonfigurowany przewoźnik po prostu nie jest odpytywany, a moduł korzysta wtedy z publicznego linku do śledzenia.
Colissimo / La Poste
Konektor korzysta z API Suivi v2 na platformie Okapi. Załóż bezpłatne konto na developer.laposte.fr, wykup subskrypcję API „Suivi” i wklej klucz Okapi w pole Colissimo / La Poste — klucz API Okapi.
Mondial Relay
Konektor korzysta z usługi WSI2_TracingColisDetaille. Wprowadź swój kod Enseigne (zwykle 8 znaków, np. BDTEST13 w środowisku testowym) oraz klucz prywatny — oba znajdziesz w umowie z Mondial Relay lub w Connect Hub. Moduł automatycznie wylicza podpis MD5 oczekiwany przez usługę.
Chronopost
Nie są wymagane żadne dane uwierzytelniające: konektor korzysta z publicznego punktu końcowego TrackingServiceWS, który przyjmuje numery przesyłek bez uwierzytelniania. Pola konta i hasła istnieją na potrzeby szczególnych konfiguracji, ale pozostają opcjonalne.
DHL
Konektor korzysta z API Shipment Tracking – Unified. Załóż konto na developer.dhl.com, wykup subskrypcję tego API i wklej klucz w pole DHL — klucz API. Zwróć uwagę na limity planu bezpłatnego: pamięć podręczna i cron modułu zostały zaprojektowane właśnie po to, by je oszczędzać.
Mapowanie przewoźników
Sekcja Mapowanie przewoźników wyświetla wszystkich przewoźników Twojego sklepu i pozwala przypisać każdemu z nich konektor. Działają tu dwa mechanizmy:
- Mapowanie jawne — wybierasz konektor z listy rozwijanej. To metoda zalecana, zwłaszcza gdy Twoi przewoźnicy noszą własne nazwy handlowe („Dostawa ekspresowa 24h”, „Odbiór w punkcie”…).
- Automatyczne wykrywanie — dla przewoźników pozostawionych jako „Nieśledzony” moduł szuka słów kluczowych w nazwie przewoźnika (
colissimo,la poste,mondial relay,point relais,chronopost,dhl…) i stosuje odpowiedni konektor.
Mapowanie opiera się na referencji przewoźnika (id_reference), a nie na identyfikatorze technicznym, dlatego przetrwa duplikaty przewoźników, które PrestaShop tworzy przy każdej zmianie cennika.
Personalizacja strony śledzenia
Sekcja Wygląd i wyświetlanie steruje wyglądem strony front-office:
- Kolor podstawowy — nagłówki, bieżący etap osi czasu, linki przewoźnika. Domyślnie
#2c3e50. - Kolor akcentu — etapy ukończone i status „Doręczono”. Domyślnie
#27ae60. - Własny nagłówek — zastępuje domyślny tytuł „Śledź swoje zamówienie” u góry strony.
- Pokaż produkty z zamówienia — dodaje pod osią czasu listę pozycji z miniaturami i ilościami.
- Czas życia pamięci podręcznej (minuty) — patrz następna sekcja.
Kolory są wstrzykiwane jako zmienne CSS w kontener strony: reszta układu naturalnie dziedziczy z Twojego szablonu.
Pamięć podręczna i odświeżanie
Każda śledzona paczka zajmuje jeden wiersz tabeli ps_dftracking_shipment, w którym przechowywany jest znormalizowany status, zdarzenia w formacie JSON, adres śledzenia u przewoźnika oraz znacznik czasu ostatniej aktualizacji.
Dane utrzymują aktualność dzięki dwóm mechanizmom:
- Zadanie cron — mechanizm główny. Wybiera paczki bez statusu końcowego, których dane przekroczyły czas życia pamięci podręcznej, odświeża je partiami i przy okazji rejestruje nowe przesyłki z zamówień z ostatnich 60 dni.
- Odświeżanie przy odwiedzinach — zabezpieczenie awaryjne. Jeśli klient otworzy stronę śledzenia, gdy dane są przeterminowane, API zostanie odpytane natychmiast.
W obu przypadkach paczka ze statusem Doręczono lub Zwrot do nadawcy nie jest już nigdy odpytywana: te stany uznaje się za ostateczne.
Konfiguracja crona
Adres crona wraz z tokenem jest wyświetlany u góry strony konfiguracji modułu. Zaplanuj jego wywołanie co 30–60 minut:
*/30 * * * * curl -s "https://twojsklep.pl/index.php?fc=module&module=dftracking&controller=cron&token=TWOJ_TOKEN" > /dev/null
Opcjonalny parametr &limit=100 ogranicza liczbę wywołań API na jedno uruchomienie (domyślnie 50, maksymalnie 200). Punkt końcowy odpowiada w formacie JSON: {"ok":true,"refreshed":12,"errors":0,"time":"…"}.
Token jest jedynym zabezpieczeniem tego punktu końcowego. Nie publikuj go, a w razie podejrzenia wycieku wygeneruj nowy przyciskiem Wygeneruj nowy token crona — pamiętaj wtedy o aktualizacji zaplanowanego zadania nowym adresem.
Strona śledzenia od strony klienta
Strona jest dostępna pod adresem /order-tracking (adres można zmienić w Ustawienia sklepu > Ruch i SEO po instalacji).
- Zalogowany klient — przycisk „Śledź moją paczkę” pojawia się w szczegółach każdego zamówienia, a w koncie klienta dodawany jest link „Śledzenie zamówienia”. Moduł zawsze sprawdza, czy zamówienie należy do zalogowanego klienta.
- Gość — formularz prosi o numer referencyjny zamówienia i adres e-mail. Oba muszą się zgadzać, aby zamówienie zostało wyświetlone; w razie niepowodzenia komunikat błędu pozostaje celowo ogólny i nigdy nie ujawnia, czy dana referencja istnieje.
Globalna oś czasu odzwierciedla najbardziej zaawansowaną paczkę z zamówienia. Poniżej każda przesyłka ma własną kartę: nazwę przewoźnika, numer przesyłki, kolorową plakietkę statusu, szczegółową historię zdarzeń (data, opis, miejsce) oraz link do oficjalnego śledzenia u przewoźnika.
Znormalizowane statusy
Oznaczenia właściwe dla każdego przewoźnika są przekształcane w siedem wspólnych statusów, co pozwala na jednolitą prezentację niezależnie od paczki:
- Oczekuje na odbiór przez przewoźnika — etykieta utworzona, paczka jeszcze niezeskanowana.
- W transporcie — paczka przemieszcza się w sieci.
- W doręczeniu — ostatni etap, dzisiejsza trasa kuriera.
- Dostępna w punkcie odbioru — paczka czeka w punkcie lub oddziale.
- Doręczono — status końcowy.
- Problem z doręczeniem — nieprawidłowość zgłoszona przez przewoźnika.
- Zwrot do nadawcy — status końcowy.
Zamówienia z wieloma paczkami
Moduł odczytuje tabelę order_carrier: każdy numer przesyłki powiązany z zamówieniem jest traktowany jako niezależna wysyłka, z własnym konektorem, statusem i historią. W starszych sklepach, gdzie numer przesyłki zapisany jest wyłącznie na zamówieniu (shipping_number), zgodność zapewnia mechanizm awaryjny.
Dodawanie przewoźnika
Architektura jest celowo otwarta. Aby zintegrować kolejnego przewoźnika:
- Utwórz klasę w katalogu
src/Adapter/, rozszerzającąDftrackingAbstractCarrierAdapter. - Zaimplementuj metody
getCode(),getLabel(),isConfigured(),getPublicUrl(),getNameKeywords()ifetch(). Ta ostatnia zwraca tablicęstatus/events/tracking_url, korzystając z pomocnikówhttpRequest(),event()iresult()klasy abstrakcyjnej. - Dodaj klasę do tablicy w
DftrackingAdapterRegistry::all()oraz odpowiednirequire_oncew plikudftracking.php.
Nowy konektor pojawi się automatycznie na listach mapowania w panelu administracyjnym.
Rozwiązywanie problemów
- Strona pokazuje „Twoje zamówienie nie zostało jeszcze wysłane” — zamówienie nie ma numeru przesyłki. Dodaj go w karcie zamówienia w panelu administracyjnym, w zakładce Wysyłka.
- Status się nie aktualizuje — najpierw sprawdź, czy zadanie cron się wykonuje, wywołując jego adres ręcznie w przeglądarce: odpowiedź JSON podaje liczbę odświeżonych paczek i błędów. Następnie zajrzyj do Zaawansowane > Dzienniki: nieudane wywołania API są tam zapisywane wraz z komunikatem zwróconym przez przewoźnika.
- Błąd „tracking number not found” — normalny w godzinach po utworzeniu etykiety: przewoźnik jeszcze nie zarejestrował paczki. Moduł ponowi próbę w kolejnym cyklu.
- Przewoźnik nie jest rozpoznawany — automatyczne wykrywanie nie znalazło słowa kluczowego w jego nazwie. Przypisz go jawnie w sekcji Mapowanie przewoźników.
- Formularz dla gościa nie znajduje zamówienia — referencja i e-mail muszą dokładnie odpowiadać danym zamówienia. Uwaga na zamówienia złożone z innym adresem e-mail niż adres konta klienta.
- Strona nie używa moich kolorów — po zmianie wyczyść pamięć podręczną PrestaShop (Zaawansowane > Wydajność), ponieważ arkusz stylów jest buforowany przez szablon.
Deinstalacja
Deinstalacja usuwa tabelę ps_dftracking_shipment oraz wszystkie klucze konfiguracji, w tym Twoje dane uwierzytelniające API. Zachowaj ich kopię, jeśli planujesz ponowną instalację modułu.