PS PrestaShop Średnio zaawansowany

Order Dispatch: eksport zamówień do operatora logistycznego / 3PL

Automatyczny eksport zamówień do operatora logistycznego i ponowny import numerów przesyłek.

Zaktualizowano Wersja modułu 1.0.0

Wymagania i zgodność

Moduł Order Dispatch działa na PrestaShop 8.0 do 9.x, przy PHP minimum 7.2 (testowany do PHP 8.3), w trybie jednosklepowym i wielosklepowym.

  • Rozszerzenie PHP ftp jest wymagane dla transportu FTP oraz pobierania plików z numerami przesyłek przez FTP.
  • Rozszerzenie PHP ssh2 jest wymagane wyłącznie przy trybie SFTP. Bez niego użyj zwykłego FTP albo API HTTP.
  • Rozszerzenie curl jest wymagane dla transportu API HTTP oraz pobierania numerów przesyłek z adresu URL.
  • Dostęp do crontab na serwerze (lub zewnętrzna usługa cron) jest zalecany do automatyzacji eksportów.

Instalacja

  1. W panelu administracyjnym otwórz Moduły > Menedżer modułów.
  2. Kliknij Zainstaluj moduł i wskaż archiwum dforderdispatch-1.0.0.zip.
  3. Po zakończeniu instalacji kliknij Konfiguruj.

Podczas instalacji moduł tworzy własną tabelę dziennika, rejestruje hook actionOrderStatusPostUpdate i generuje unikalny token bezpieczeństwa dla adresów cron.

Deinstalacja usuwa tabelę dziennika oraz wszystkie klucze konfiguracyjne modułu. Zapisane wcześniej zamówienia i numery przesyłek pozostają nienaruszone.

Wybór formatu eksportu

Wybór formatu zależy od tego, co potrafi odczytać Twój operator logistyczny lub system WMS. W polu Format eksportu dostępne są trzy formaty.

CSV

Jeden wiersz na pozycję zamówienia, z nagłówkiem zamówienia powtórzonym w każdym wierszu. To najczęściej spotykany format u firm kompletujących przesyłki. Separator wybierasz między średnikiem a przecinkiem.

Generowane kolumny, w kolejności:

order_id ; reference ; date ; payment ; currency ; total_paid ;
shipping_cost ; carrier ; email ; firstname ; lastname ; company ;
phone ; address1 ; address2 ; postcode ; city ; country_iso ;
delivery_note ; sku ; ean13 ; product_name ; quantity ;
unit_price ; line_weight

Płaski plik EDI

Format z rekordami rozdzielonymi pionowymi kreskami i zakończeniami wierszy CRLF. Każde zamówienie tworzy rekord nagłówka H, po którym następuje jeden rekord L na pozycję zamówienia.

H|referencja|data|przewoznik|nazwisko|imie|adres1|adres2|kod|miasto|kraj|telefon|email|waga
L|referencja|sku|ean13|ilosc|nazwa

Konkretny przykład:

H|XKBKNABJK|2026-07-05 10:00:00|InPost|Kowalski|Jan|ul. Dluga 12||31-147|Krakow|PL|600100200|jan@przyklad.pl|1.2
L|XKBKNABJK|SKU-114|1234567890123|2|Skorzane sneakersy premium

Każda pionowa kreska obecna w danych (nazwa produktu, adres) jest automatycznie zamieniana na spację, żeby nie rozbić struktury pliku. Znaki końca wiersza w polach są neutralizowane w ten sam sposób.

API JSON

Ustrukturyzowany ładunek dopasowany do operatorów udostępniających nowoczesne API. Cała partia jest wysyłana w jednym obiekcie zawierającym datę wygenerowania i tablicę zamówień, każde z nagłówkiem, danymi klienta, adresem dostawy i pozycjami.

Wybór transportu

Pole Transport określa, w jaki sposób wygenerowany plik trafia do Twojego dostawcy usług.

Pobranie

Brak automatycznej wysyłki. Przycisk Eksportuj teraz generuje plik i pobiera go bezpośrednio w przeglądarce. Przydatne do przetestowania formatu albo dla dostawcy, który odbiera pliki ręcznie.

FTP

Podaj host, port (domyślnie 21), login, hasło i zdalny katalog zamówień. Tryb pasywny jest włączony domyślnie i odpowiada większości hostingów.

Pole hasła pozostaje puste przy wyświetlaniu ze względów bezpieczeństwa. Zostaw je puste podczas zapisu, aby zachować dotychczasowe hasło.

SFTP

Włącz opcję Używaj SFTP i wpisz w polu portu numer portu SSH (zwykle 22). Dane logowania FTP służą również do SFTP. Ta opcja wymaga rozszerzenia PHP ssh2 na serwerze.

API HTTP

Cała partia jest wysyłana metodą POST na adres URL Twojego dostawcy, a treść żądania zawiera bezpośrednio wygenerowany plik. Wysyłce towarzyszą dwa nagłówki:

  • X-DFOD-KEY: klucz API wpisany w konfiguracji.
  • X-DFOD-FILENAME: nazwa pliku wyliczona według Twojego wzorca.

Typ treści jest dopasowany do wybranego formatu (JSON, CSV albo zwykły tekst). Każda odpowiedź HTTP spoza zakresu 2xx jest traktowana jako niepowodzenie i zapisywana w dzienniku.

Wybór zamówień i harmonogram

Statusy zamówień źródłowych

W polu Statusy zamówień do eksportu wybierz jeden lub kilka statusów (zwykle Płatność zaakceptowana i W trakcie przygotowania). Brane są pod uwagę wyłącznie zamówienia w jednym z tych statusów, które nie zostały jeszcze pomyślnie wyeksportowane.

Zmiana statusu po eksporcie

Pole Status po eksporcie pozwala automatycznie przełączyć wyeksportowane zamówienia na dedykowany status kontrolny. Zostaw wartość „Bez zmiany”, jeśli wolisz zachować status pierwotny.

Limit partii

Pole Maksymalna liczba zamówień w partii ogranicza rozmiar eksportu. W sklepach o dużym wolumenie wartość między 100 a 300 pozwala uniknąć zbyt ciężkich plików i nadmiernych czasów wykonania.

Cron eksportu

Adres URL crona, zabezpieczony unikalnym tokenem, jest wyświetlany u góry strony konfiguracji. Dodaj go do swojego crontab:

*/15 * * * * curl -s "https://twoj-sklep.pl/module/dforderdispatch/cron?token=TWOJ_TOKEN" > /dev/null

Cron zwraca obiekt JSON wskazujący wygenerowaną partię, liczbę wyeksportowanych zamówień, nazwę pliku i komunikat transportu, co pozwala monitorować go z poziomu narzędzia nadzoru.

Tryb auto-push

Włącz Automatyczna wysyłka przy zmianie statusu, aby przekazywać każde zamówienie pojedynczo, gdy tylko wejdzie w status kwalifikujący do eksportu, bez czekania na kolejny przebieg crona. Ten tryb korzysta z transportu FTP, SFTP lub API. Przy transporcie Pobranie pozostaje bez efektu.

Oba tryby mogą działać równolegle: auto-push obsługuje zamówienia na bieżąco, a cron nadrabia te, które zakończyły się niepowodzeniem, przy czym deduplikacja wyklucza podwójną wysyłkę.

Nazwy generowanych plików

Pole Wzorzec nazwy pliku przyjmuje dwie zmienne:

  • {date}: znacznik czasu w formacie RRRRMMDD-GGMMSS.
  • {batch}: unikalny identyfikator partii, powtórzony również w dzienniku.

Rozszerzenie jest dodawane automatycznie zależnie od formatu: .csv, .txt dla EDI oraz .json. Znaki inne niż alfanumeryczne są usuwane z ostatecznej nazwy.

Ponowny import numerów przesyłek

Dostępne są trzy kanały, których można używać jednocześnie. W każdym przypadku otrzymany numer jest zapisywany na przewoźniku zamówienia oraz w polu śledzenia zamówienia, a następnie stosowany jest status ustawiony w polu Status po imporcie numeru przesyłki (zwykle Wysłane).

Kanał 1: ręczne wgranie CSV

W panelu Import numerów przesyłek na stronie konfiguracji wybierz plik CSV i uruchom import. Mapowanie konfiguruje się w ustawieniach:

  • Separator: średnik albo przecinek.
  • Indeks kolumny referencji: 0 odpowiada pierwszej kolumnie.
  • Indeks kolumny numeru przesyłki: tak samo.
  • Wiersz nagłówka: włącz, jeśli pierwszy wiersz zawiera nazwy kolumn.

Przykład oczekiwanego pliku przy domyślnym mapowaniu:

reference;tracking
XKBKNABJK;620012345678901234
1024;620098765432109876

Kolumna referencji przyjmuje zarówno referencję zamówienia PrestaShop, jak i numeryczny identyfikator zamówienia.

Kanał 2: automatyczne pobieranie (cron pull)

Można wskazać dwa źródła, przetwarzane jedno po drugim przy każdym uruchomieniu:

  • Katalog FTP z numerami przesyłek: moduł listuje pliki .csv i .txt w katalogu, importuje je i może je następnie usunąć, jeśli odpowiednia opcja jest włączona. Dane logowania FTP są te same co w sekcji transportu.
  • Adres URL do pobrania: adres HTTP lub HTTPS zwracający bezpośrednio plik CSV z numerami przesyłek.

Dodaj adres pull do swojego crontab, na przykład co godzinę:

0 * * * * curl -s "https://twoj-sklep.pl/module/dforderdispatch/tracking?token=TWOJ_TOKEN&mode=pull" > /dev/null

Kanał 3: webhook wysyłany przez operatora

Przekaż swojemu dostawcy adres URL push wyświetlony w konfiguracji. Wystarczy, że wyśle żądanie POST z treścią JSON:

POST /module/dforderdispatch/tracking?token=TWOJ_TOKEN&mode=push
Content-Type: application/json

[
  {"reference": "XKBKNABJK", "tracking": "620012345678901234"},
  {"reference": "1024", "tracking": "620098765432109876"}
]

Akceptowany jest również obiekt opakowujący w postaci {"items": [ ... ]}. Odpowiedzią jest raport JSON opisujący liczbę zamówień zaktualizowanych, pominiętych i błędnych, ze szczegółami wiersz po wierszu.

Dziennik i nadzór

Dół strony konfiguracji pokazuje pięćdziesiąt ostatnich operacji, zarówno eksportów, jak i importów, a przy każdej datę, powiązane zamówienie, identyfikator partii, kierunek, format, transport, status i zwrócony komunikat.

Deduplikacja opiera się na tym dzienniku: zamówienie z wpisem eksportu o statusie „sent” nigdy nie trafi ponownie do kolejnej partii. Aby wymusić ponowny eksport, usuń odpowiadający wiersz z tabeli dziennika modułu.

Rozwiązywanie problemów

Eksport nie zwraca żadnego zamówienia

Sprawdź, czy w ustawieniach faktycznie wybrano statusy i czy znajdują się w nich jakieś zamówienia. Następnie sprawdź, czy te zamówienia nie zostały już pomyślnie wyeksportowane w poprzedniej partii.

Cron zwraca błąd tokenu

Token wyświetlony w konfiguracji musi zostać przeniesiony do adresu URL bez zmian, bez spacji ani dodatkowych znaków. Skopiuj go bezpośrednio ze strony konfiguracji.

Transfer FTP kończy się niepowodzeniem

Sprawdź host, port i dane logowania, a następnie upewnij się, że zdalny katalog istnieje i ma prawo zapisu. Jeśli hostingodawca blokuje połączenia wychodzące, konieczny może być tryb pasywny lub otwarcie ruchu.

SFTP jest niedostępny

Komunikat o braku rozszerzenia ssh2 oznacza, że nie jest ono zainstalowane na serwerze. Poproś hostingodawcę o jego włączenie albo przełącz się na zwykły FTP lub API HTTP.

Numer przesyłki zostaje odrzucony

Numery przesyłek są walidowane według reguł PrestaShop. Numer zawierający niedozwolone znaki jest odrzucany i zapisywany w dzienniku jako błąd, bez blokowania reszty importu.

Najczęstsze pytania

Czy mogę eksportować do kilku dostawców?

Moduł obsługuje jeden skonfigurowany strumień wychodzący naraz. Aby zasilać dwóch różnych dostawców, najprościej rozdzielić zamówienia różnymi statusami i obsługiwać każdy strumień osobno.

Czy zamówienia w trybie wielosklepowym są obsługiwane?

Tak, moduł działa w kontekście wielosklepowym. Ustawienia konfiguracji podążają za kontekstem PrestaShop, w którym zostały zapisane.

Co się dzieje, gdy dostawca jest nieosiągalny?

Niepowodzenie trafia do dziennika wraz z komunikatem błędu, a powiązane zamówienia nie są oznaczane jako wysłane. Zostaną więc automatycznie przetworzone przy kolejnym przebiegu crona, bez Twojej interwencji.

Czy zmiana statusu uruchamia e-maile do klientów?

Tak. Moduł korzysta ze standardowego mechanizmu zmiany statusu PrestaShop. Powiadomienia powiązane ze statusem docelowym, w szczególności e-mail o wysyłce z numerem przesyłki, są więc wysyłane normalnie.

Czy ta strona była pomocna?

Nadal utknąłeś? Napisz do wsparcia