Checkout w PrestaShop to pięć kroków: koszyk, dane, dostawa, płatność i potwierdzenie. Domyślny proces działa poprawnie, dopóki nie dojdą moduły przewoźników, płatności odroczonych i punkty odbioru — wtedy najczęściej sypie się walidacja i znikają stawki dostawy. Ten artykuł zbiera część organizacyjną: co sprawdzić przed startem, jak przetestować trzy ścieżki klienta i jak nie tracić zamówień na etapie konfiguracji. Rozdzielamy przy tym to, co wynika z rdzenia PrestaShop, od tego, co dokładają moduły.

Czym jest checkout w PrestaShop i jak działa domyślny proces zamówienia

W PrestaShop 1.7 i 8 zamówienie to pięć adresów obsługiwanych przez cztery kontrolery. Warto znać tę mapę, bo większość zgłoszeń „zgubione zamówienie” kończy się sprawdzeniem jednego z tych miejsc.

Podział na szablony i logikę jest kluczowy przy diagnozie: układ pól zmienisz w pliku .tpl, ale walidację i zapis danych — w klasach. Za utworzenie zamówienia odpowiada PaymentModule::validateOrder(); dopiero po jego wywołaniu rekord pojawia się w Zamówienia > Zamówienia. Moduły płatności (Przelewy24, PayU, Stripe) rozszerzają PaymentModule, więc ich błędy nie są błędami rdzenia. Kolejność hooków i klasy opisuje dokumentacja dla deweloperów PrestaShop.

Przełącznik Zezwól na zamówienia od gości siedzi w Parametry sklepu > Ustawienia klientów. Nie chodzi o brak konta: PrestaShop i tak tworzy rekord klienta, ale bez hasła i z flagą gościa. Skutki są praktyczne — gość nie zaloguje się później, nie zobaczy historii zamówień i nie zapisze adresu na następny raz. Przy koszykach do 200 zł to zwykle dobry kompromis; przy B2B i zamówieniach cyklicznych wyłącz gościa i skróć formularz rejestracji do minimum.

Stan wdrożenia sprawdzasz w trzech miejscach: /order (czy kroki przechodzą bez zerwania), /order-confirmation (czy potwierdzenie się renderuje) i back-office Zamówienia > Koszyki, gdzie leżą koszyki, które nie stały się zamówieniami — z datą i kwotą. Dopięcie do tego pomiaru kroków opisuje nasze wdrożenie GA4 eCommerce w PrestaShop.

One-page checkout vs standardowy: co wybrać i jak to włączyć

Najpierw sprawdź, czy twój motyw w ogóle obsługuje tryb jednej strony. Przełącznik znajdziesz w Parametry sklepu > Ustawienia zamówień (w 1.6 było to Preferencje > Zamówienia), ale w części instalacji 1.7.x i w motywach kupionych od firm trzecich nie robi on nic, bo checkout jest nadpisany własnymi szablonami. Test: włącz opcję, wejdź na /order jako gość i policz przeładowania strony. Jedno oznacza, że OPC działa; trzy-cztery — że motyw gra swoje.

Co OPC realnie zmienia? Te same kontrolery, te same szablony, inne składanie kroków po stronie JS. Nie zmienia logiki walidacji ani sposobu liczenia stawek przewoźników.

Kiedy zostawić pięć kroków: koszyk B2B i zamówienia na fakturę z odroczonym terminem, skomplikowane warianty dostawy (kurier + paleta + punkt odbioru), klienci, którzy chcą zobaczyć koszt dostawy przed przejściem do płatności, oraz katalogi z konfigurowalnymi produktami.

Kiedy OPC pomaga: średnia wartość koszyka poniżej 150–200 zł, powyżej 60% ruchu z telefonów, 1–3 przewoźnicy i płatności express (BLIK, karta zapisana w przeglądarce). Zanim przełączysz OPC na ruchu mobilnym, sprawdź wydajność /order — formularz zamówienia z kilkoma skryptami płatności wypada najgorzej w Core Web Vitals i przy wolnym LCP klient nie dociera do podsumowania. Widełki czasowe: w gotowym motywie z natywnym wsparciem to 2–6 h (włączenie, test trzech ścieżek, poprawki CSS). Przepisanie szablonów, walidacji i obsługi błędów AJAX to 16–40 h — i wtedy warto najpierw uporządkować moduły, np. przez integracje płatności i dostaw z PrestaShop.

Najczęstsza pułapka: OPC plus moduł dostawy, który przed pokazaniem stawek wymaga pełnego adresu. Wtedy pierwszy XHR leci z pustym kodem pocztowym, moduł zwraca błąd, a klient widzi puste stawki albo kręcące się kółko. Diagnoza: DevTools > Network, filtr XHR na /order, odpowiedź serwera; potem przestawienie kolejności kroków w motywie albo wyłączenie OPC do czasu poprawki.

KryteriumOne-page (OPC)Standardowy 5-krokowy
Średnia wartość koszykado ~200 złpowyżej 200 zł, faktury, B2B
Ruch mobilnypowyżej 60%dowolny, mniej wrażliwy
Liczba przewoźników1–3, proste stawki4+, palety, punkty odbioru
Czas wdrożenia2–6 h w gotowym motywie0 h, jeśli nie ruszasz motywu
Główne ryzykopuste stawki przy modułach wymagających adresuporzucenia na kroku dostawy

Konfiguracja zamówienia: gość, pola adresowe, walidacja i listwy dostaw

Zacznij od pól adresowych. W Międzynarodowy > Lokalizacja > Kraje > Polska > Edytuj ustawiasz dla każdego pola stan: wymagane, opcjonalne albo ukryte. W polskich sklepach Region (stan) prawie zawsze idzie na ukryte — nikt go nie wypełnia, a wymagane pole generuje porzucenia na kroku danych. NIP zostaw: włącz Tryb B2B w Parametry sklepu > Ustawienia klientów, wtedy pole NIP pojawia się w adresie i możesz uczynić je wymaganym. Osobno przemyśl telefon — jeśli wysyłasz nim powiadomienia o dostawie, oznacz jako wymagany; jeśli służy tylko marketingowi, zostaw opcjonalny.

Limity zamówienia: minimalna wartość koszyka jest w Parametry sklepu > Ustawienia zamówień i działa na poziomie całego sklepu. Maksymalnej wagi globalnie nie ma — siedzi w zakresach wagowych przewoźnika (Dostawa > Przewoźnicy > edycja > Rozmiary, wagi i kategorie). Tam też wykluczysz kategorię lub pojedynczy produkt z danego przewoźnika, np. hydraulikę z Paczkomatu albo meble z kuriera.

Walidacja: reguły i formaty siedzą w classes/Validate.php. Kody pocztowe reguluje wzór w Kraje > Polska (N = cyfra, L = litera; typowo NN-NNN). Test: wpisz 00-001 i 00001 — drugi wariant powinien zostać odrzucony; jeśli przechodzi, popraw wzór, żeby nie produkować błędnych adresów u kuriera. Uwaga na moduły weryfikujące NIP przez API — przy limicie zapytań odrzucają poprawne numery i klient utyka na kroku danych.

Koszyk po wylogowaniu PrestaShop domyślnie zachowuje, a opcja pokazywania go ponownie po zalogowaniu jest w Parametry sklepu > Ustawienia klientów. Zmiana kraju dostawy przelicza podatki z reguł podatkowych i stawki przewoźnika ze strefy — jeśli kraj należy do strefy bez reguły dla przewoźnika, dostawa zniknie, a klient zobaczy 0 zł albo puste pole. Chcesz wiedzieć, na którym polu ludzie się zatrzymują? Potrzebny jest DataLayer w PrestaShop, bo walidacja JS nie zostawia śladu w GA4.

ScenariuszCo sprawdzaszCzego szukać w back-office
Nowy gośćrejestracja bez hasła, pełny adres, płatnośćZamówienia > Zamówienia: klient z flagą gościa
Nowy zarejestrowanywymagane pola, NIP przy B2B, mail potwierdzającyKlienci: zapisany adres, mail w kolejce
Powracający z adresempodstawienie adresu, przeliczenie stawek po zmianie krajuZamówienia > Koszyki: brak zdublowanych koszyków

Płatności i kurierzy w checkout: InPost, DPD, DHL, bramki płatności

Kolejność metod płatności w PrestaShop wynika z kolejności instalacji modułów. Rdzeń nie ma przełącznika „metoda domyślna” — żeby jedna z metod była zaznaczona na wejściu, trzeba to zrobić szablonem lub skryptem modułu. Konsekwencja praktyczna: preselekcja generuje zdarzenie jeszcze przed decyzją klienta, więc w pomiarze trzeba je odróżnić od realnego wyboru. Zacznij od Moduły → Płatność i sprawdź „Ograniczenia” każdego modułu: waluta, grupa klienta, kraj, przewoźnik.

Właśnie ograniczenia po przewoźniku wywalają checkout najczęściej. Przykład: PayPo ma sens przy paczkomacie, ale przy płatności za pobraniem klient finansuje zakup dwiema metodami jednocześnie — moduł powinien się wtedy schować. Podobnie raty przy koszyku za 50 zł. Testuj trzy koszyki: ~30 zł, ~300 zł, ~3000 zł, dla każdej pary przewoźnik + płatność.

Mapa punktów (InPost, DPD, DHL) to najbardziej wrażliwe miejsce. Potrzebujesz tokenu/klucza API operatora i kontraktu na usługę, a w module pola, do którego zapisuje się identyfikator punktu razem z nazwą i adresem. Test walidacji: przejdź checkout bez wybrania punktu — jeśli zamówienie powstaje bez identyfikatora, masz błąd konfiguracji, który wyjdzie dopiero przy nadawaniu paczki. Gdy API nie odpowiada (timeout, 429, brak tokenu), nie blokuj checkoutu: pokaż listę punktów z cache z ostatnich 24 h, a brak danych obsłuż jako wybór z listy tekstowej i zapisz zdarzenie w logu modułu.

Powrót z bramki: dla przekierowań zamówienie powstaje przed potwierdzeniem płatności, więc klient widzi je w statusie oczekiwania, a koszyk jest już skasowany. Drugi przypadek to płatność potwierdzona, ale zamówienie nie zapisało się (błąd walidacji po stronie modułu) — wtedy transakcja istnieje tylko w panelu bramki. Wykryjesz to porównaniem dziennym: zestawienie transakcji z panelu z zamówieniami w PrestaShop po kwocie i dacie. Webhook musi mieć publiczny adres, działać przy wyłączonym trybie serwisowym, odpowiadać 200 w kilka sekund, weryfikować podpis i być idempotentny — bramki ponawiają wysyłkę.

Checklista przed przełączeniem na produkcję: klucze produkcyjne, adres webhooka, whitelista IP, karty 3DS, waluta PLN, wyłączone wysyłki testowe do klientów, kopia zamówień testowych usunięta ze statystyk. Całość organizacyjnie opisujemy w materiale o integracjach z PrestaShop i organizacji wdrożenia; konfigurację modułów sprawdzasz w dokumentacji deweloperskiej PrestaShop.

ElementGdzie ustawiaszNa co uważać
Kolejność metod płatnościModuły → Płatność (kolejność instalacji, pozycja w hooku displayPayment)Preselekcja liczy się jako zdarzenie bez decyzji klienta
Dostępność metodyKonfiguracja modułu → Ograniczenia (waluta, grupa, kraj, przewoźnik)Płatność odroczona + pobranie = dwie formy finansowania naraz
Punkty odbioruModuł przewoźnika + pole punktu w zamówieniuZamówienie bez identyfikatora punktu przechodzi dalej
Powrót z bramkiKonfiguracja modułu + Statusy zamówieńBrak webhooka = zamówienia „w koszyku, ale opłacone”
Tryb testowy → produkcjaKlucze, webhook, IP, 3DS, walutaTestowe zamówienia zostają w statystykach

Szybkość checkoutu: TTFB, LCP i dlaczego strona zamówienia łamie Core Web Vitals

Strona zamówienia nie ma prawa być cache’owana w pełni. Zawiera sesję, zawartość koszyka i token CSRF w formularzu, więc cache stron dla adresów z kontrolera order, order-confirmation i wszystkich z parametrem token musi być wyłączony. Jeśli używasz modułu cache lub CDN z regułami, dodaj wyjątki po nazwie kontrolera, a nie po samym /order — sklepy z niestandardowym checkoutem mają inne ścieżki. W Parametry zaawansowane → Wydajność sprawdź też CCC dla JavaScriptu: przy starszych modułach płatności łączenie plików psuje skrypty i checkout przestaje reagować, więc testuj z wyłączonym CCC.

LCP na kroku dostawy najczęściej psuje mapa punktów. Ładuj ją dopiero po wybraniu przewoźnika (przycisk „wybierz punkt” uruchamia widget), nie na starcie kroku — na mobile to często 300–600 kB JavaScriptu i główny powód LCP ponad 4 s. Skrypty bramek (3DS, fingerprint) wczytuj asynchronicznie z defer, ale skryptu modułu, który przelicza stawki dostawy przez AJAX, nie ruszaj: kolejność jego wykonania decyduje o tym, czy koszt dostawy się podstawi. Cel: TTFB poniżej 0,5 s, LCP poniżej 2,5 s, INP poniżej 200 ms — progi opisane w artykule web.dev o Web Vitals i w wytycznych Core Web Vitals.

Liczbę zapytań na kroku płatności zmierzysz w trybie debugowania: na dole strony pojawia się profil z listą zapytań SQL i czasem. Alternatywa bez wyłączania sklepu: slow query log MySQL z progiem 0,2 s plus SHOW FULL PROCESSLIST w trakcie testu. Jeśli krok płatności generuje 200+ zapytań, winne są zwykle reguły cenowe i przeliczanie koszyka, a nie sam moduł płatności.

Na mobile skróć formularz: w Klienci → Adresy odznacz pola, których nie potrzebujesz, dodaj atrybuty autocomplete (email, tel, postal-code, street-address, cc-number) i inputmode dla pól liczbowych, a fonty ustaw z font-display: swap, żeby zmiana kroku nie migała. Gdy problemem jest serwer, zobaczysz to po sygnałach: 5xx przy składaniu zamówienia, timeouty webhooków płatności, wolne zapisy do ps_orders, błędy „Too many connections” i backup w godzinach szczytu. Zamiana VPS na maszynę z lepszym dyskiem bywa tańsza niż pół roku optymalizacji modułów — kryteria wyboru wykonawcy opisaliśmy w tekście o tym, kogo wybrać do wdrożenia PrestaShop i ile to kosztuje.

ObjawNajczęstsza przyczynaCzym zmierzyć
Checkout nie reaguje na zmianę przewoźnikaCCC dla JS lub skrypt modułu z deferKonsola przeglądarki, test po wyłączeniu CCC
LCP 4–6 s na kroku dostawyMapa punktów ładowana na starcie krokuPageSpeed Insights / Lighthouse na mobile
TTFB 1,5 s+ i 200+ zapytańReguły cenowe, przeliczanie koszykaProfil w trybie debug, slow query log
5xx przy składaniu zamówieniaWyczerpany pool PHP-FPM, locki w MySQLLogi serwera, SHOW FULL PROCESSLIST
Webhooki przychodzą po kilku minutachTimeouty PHP i kolejkowe retry bramkiLogi modułu płatności + panel bramki

Pomiar lejka: GA4, DataLayer i pytanie „gdzie dokładnie tracę klientów”

Zdarzenia GA4 dla checkoutu mają jasne znaczenie: view_cart wysyłasz, gdy klient otwiera koszyk, begin_checkout przy wejściu na pierwszy krok zamówienia, add_shipping_info po wybraniu przewoźnika i przejściu dalej, add_payment_info po zatwierdzeniu metody płatności, purchase dopiero na order-confirmation. Błąd numer jeden to wysyłanie add_shipping_info na klik w radio zamiast na przejście kroku — wtedy dwie osoby, które tylko oglądały listę kurierów, wyglądają jak porzucający na dalszym etapie.

W DataLayer musi trafić: currency, value (zgodne z kwotą zamówienia w PrestaShop, z dostawą i podatkiem), tablica items z item_id równym SKU/odniesieniu, nazwą, ceną po rabacie i ilością, a także shipping_tier (nazwa przewoźnika widoczna dla klienta) i payment_type. Braki, które widzimy najczęściej: brak waluty (GA4 przyjmuje domyślnie USD i przychód rozjeżdża się z fakturą), cena przed rabatem, wewnętrzne ID zamiast SKU oraz brak metody dostawy — bez niej nie odpowiesz, czy tracisz klientów na paczkomatach, czy na kurierze. Wdrożenie opisujemy szerzej w materiałach o GA4 eCommerce w PrestaShop i o DataLayer w PrestaShop bez chaosu.

Porzucenie na kroku dostawy i porzucenie na bramce to dwa różne problemy. W GA4 oba wyglądają jak wyjście z kroku 3, dopóki nie dodasz własnych zdarzeń: payment_redirect przed wyjściem do bramki i payment_return po powrocie. Dopiero z nimi rozdzielisz „nie chciał płacić online” od „bramka odrzuciła kartę”. Warto logować też checkout_error z kodem błędu walidacji.

Raport tygodniowy: Funnel exploration z czterema krokami, podział po urządzeniu, plus osobno koszyk → krok 1. Zamiast jednego „conversion rate” licz spadek procentowy między krokami; liczby rzędu 1000 sesji → 400 begin_checkout → 300 add_shipping_info → 180 add_payment_info → 120 purchase mówią, gdzie interweniować.

Pułapka duplikacji: powrót przyciskiem wstecz albo F5 na order-confirmation wysyła purchase ponownie. GA4 deduplikuje po transaction_id, ale tylko gdy identyfikator jest ten sam i nie zmieniasz go po drodze. Zabezpiecz się lokalnie: znacznik w localStorage z numerem zamówienia i blokada wysyłki na 30 dni. I nie uruchamiaj jednocześnie wbudowanego modułu GA4 i kontenera GTM — to najczęstsza przyczyna podwójnych zakupów w raportach.

ZdarzenieKiedy wysłaćMinimum w DataLayer
view_cartOtwarcie koszykacurrency, value, items
begin_checkoutWejście na krok 1 zamówieniacurrency, value, items, coupon
add_shipping_infoPrzejście kroku dostawyshipping_tier, currency, value, items
add_payment_infoZatwierdzenie metody płatnościpayment_type, currency, value, items
purchaseStrona order-confirmationtransaction_id, currency, value, items, shipping_tier, payment_type
payment_redirect / payment_returnWyjście i powrót z bramkitransaction_id, payment_type, timestamp

Najczęstsze błędy i pułapki w PrestaShop checkout — i jak je wykryć

Trzy awarie odpowiadają za większość zamówień, które nie dochodzą do skutku: przewoźnik zniknął z listy, zamówienie kończy się błędem 500, płatność pobiera pieniądze dwa razy. Każdą da się zdiagnozować w kilkanaście minut, jeśli wiadomo, gdzie patrzeć.

Pusta stawka dostawy. Najczęstsza przyczyna to zmiana przypisania kraju do strefy w Międzynarodowe → Lokalizacja → Strefy albo dodanie kraju do strefy, do której żaden przewoźnik nie jest przypisany. PrestaShop nie pokazuje wtedy błędu — przewoźnik po prostu wypada z kroku „Dostawa”. Sprawdź w Przewoźnicy → Zakres i koszty, czy każda strefa z twojej konfiguracji ma przewoźnika, i przetestuj checkout dla Polski, Niemiec i kraju spoza UE. W Zaawansowane → Logi szukaj wpisów z „carrier”, na serwerze w error_log frazy „No carriers available”. Na środowisku testowym włącz _PS_MODE_DEV_ w config/defines.inc.php — produkcja ukrywa ostrzeżenia, które tam zobaczysz.

ObjawGdzie szukaćTest w 5 minut
Brak przewoźników w kroku dostawyMiędzynarodowe → Strefy; Przewoźnicy → Zakres i kosztyZmień kraj w checkoucie na DE i sprawdź, czy przewoźnik się pojawia
Błąd 500 przy potwierdzeniu zamówieniaerror_log serwera, Zaawansowane → Logi, tryb debugZłóż zamówienie bez modułów płatności i kurierów, potem dodawaj po jednym
Dwa zamówienia z jednego koszykaps_orders, ps_order_paymentGrupowanie po id_cart z warunkiem COUNT(*) > 1
Zła kwota po edycji produktups_cart_product, krok dostawyZmień cenę produktu przy aktywnym koszyku i odśwież checkout
Brak potwierdzenia po aktualizacjidiff /themes/.../templates/checkout/Porównaj pliki order-*.tpl z wersją z paczki motywu

Kiedy postawić własny moduł checkoutu, a kiedy wystarczy konfiguracja

Punkt wyjścia: większość sklepów nie potrzebuje własnego checkoutu, tylko uporządkowanej konfiguracji i jednego dobrze wybranego modułu. Własny kod zaczyna się opłacać, gdy twoja logika sprzedaży nie mieści się w standardowych polach formularza.

Sygnały, że nadszedł czas na własny moduł:

Pułapka modułu z marketplace. Działa w demo na motywie klasycznym, a potem okazuje się, że nadpisuje ten sam hook displayPaymentTop co moduł płatności, a autor nie wydał nowej wersji od dwóch lat. Koszt ukryty pojawia się nie przy zakupie, tylko przy pierwszej aktualizacji PrestaShop: motyw się rozjeżdża, support milczy, a ty płacisz za łatanie cudzego kodu.

Widełki do budżetu: konfiguracja 4–12 h, własny krok dostawy 40–80 h, przepisanie całego checkoutu 120–200 h. Licz to nie w izolacji, ale względem kosztu porzuceń. Przy 1000 zamówieniach miesięcznie i 2% porzuceń na kroku dostawy to 20 zamówień. Jeśli każde wymaga telefonu i ręcznego doliczenia stawki, a obsługa zajmuje 15 minut przy 100 zł/h, mówimy o 500 zł miesięcznie straconych tylko na samej obsłudze — nie licząc klientów, którzy nie wrócą.

Utrzymanie. Własny moduł to nie plik na serwerze, tylko zobowiązanie: kto reaguje po wydaniu nowej wersji PrestaShop, kto testuje po zmianie PHP, jaki jest czas reakcji. Ustal to przed startem, bo później brak SLA jest droższy niż sam kod. Sposób liczenia budżetu na całe wdrożenie rozkładamy w materiale o tym, ile realnie kosztuje wdrożenie sklepu na PrestaShop.

WariantZakres pracWidełkiGłówne ryzyko
KonfiguracjaStrefy, przewoźnicy, płatności, maile, testy4–12 hBłędne przypisanie strefy — przewoźnik znika bez komunikatu
Własny krok dostawyModuł z logiką wyceny, hook checkoutu, testy regresji40–80 hKonflikt z modułem płatności o ten sam hook
Przepisanie checkoutuCały proces, własne szablony, integracja ERP w trakcie zamówienia120–200 hUtrzymanie przy każdej aktualizacji rdzenia i PHP

Lista kontrolna przed startem i po każdej aktualizacji

Testuj w stałej kolejności: koszyk → dane → dostawa → płatność → mail → ERP/magazyn. Nie przechodź dalej, dopóki poprzedni krok nie działa na wszystkich kombinacjach. Błąd w kroku dostawy maskuje problem z płatnością i tracisz czas na diagnozie złego elementu.

Środowisko testowe. Chrome, Safari na iOS (tam najczęściej wychodzą problemy z autouzupełnianiem i klawiaturą numeryczną), Firefox, Edge. Desktop plus ekran 360 px. Zawsze w trybie incognito — sesja i cache potrafią pokazać checkout, którego klient już nie zobaczy. Wyłącz cache w Zaawansowane → Wydajność (Cache: Nie) albo wyczyść /var/cache/prod i /var/cache/dev.

Po każdej aktualizacji PrestaShop, motywu i każdego modułu płatności lub kuriera sprawdź:

Kto za co odpowiada. Klient: dane karty, przeglądarka, rozszerzenia blokujące. Wykonawca: konfiguracja, moduły, serwer, logi. W zgłoszeniu podaj: adres URL, datę i godzinę z sekundami, id_cart i id_order, krok, na którym wystąpił błąd, wybrany kraj i metodę dostawy, wersję PrestaShop i PHP, treść błędu oraz informację, czy problem powtarza się w incognito na innym urządzeniu. Bez tego pierwsie pół godziny pracy idzie na odtwarzanie sytuacji, a nie na naprawę. Jeśli po testach chcesz sprawdzić, czy zamówienia faktycznie dochodzą do analityki, zacznij od poprawnego wdrożenia GA4 eCommerce w PrestaShop — bez tego nie odróżnisz porzucenia od błędu technicznego.

KrokCo sprawdzićKto testuje
KoszykDodanie, edycja ilości, usunięcie, kwota i wagaWykonawca
DaneWalidacja pól, format kodu pocztowego, wymagane pola dla danego krajuWykonawca
DostawaPrzewoźnicy dla PL, DE, kraju spoza UE, cena i czas dostawyWykonawca
PłatnośćPowrót z bramki, status zamówienia, brak podwójnych zamówieńWykonawca + klient na własnej karcie
MailPotwierdzenie w skrzynce, poprawność kwot i adresuWykonawca
ERP/magazynZamówienie w systemie, rezerwacja stanu, numer z ERPWykonawca + dział obsługi

Najczęstsze błędy i jak je wykryć

Włączony one-page checkout przy module dostawy, który wymaga pełnego adresu przed pokazaniem stawek.

Jak wykryć: W konsoli przeglądarki na /order pojawiają się błędy AJAX, a lista przewoźników zostaje pusta po wpisaniu adresu.

Jak naprawić: Wyłącz szybkie zamówienie w Preferencje > Zamówienia i przetestuj standardowy, krokowy proces. Jeśli OPC ma zostać, wymień moduł dostawy na taki, który liczy stawki bez pełnego adresu, albo popraw kolejność walidacji w motywie.

Pole stan/region wymagane w formularzu adresu dla Polski.

Jak wykryć: W formacie adresu kraju PL widnieje stan, a w sekcji wymaganych pól adresu jest oznaczony jako obowiązkowy.

Jak naprawić: Usuń stan z formatu adresu dla Polski i odznacz to pole w ustawieniach wymaganych pól. Sprawdź potem, czy nie wymusza go żaden moduł kurierski, bo część z nich potrafi dodać własne reguły.

Testy checkoutu robione wyłącznie na zalogowanym koncie administratora albo na starym koncie z zapisanym adresem.

Jak wykryć: Wdrożenie działa u Ciebie, ale na produkcji pojawiają się zgłoszenia o błędach przy pierwszym zamówieniu.

Jak naprawić: Zrób trzy osobne przejścia w trybie incognito: gość, nowo zarejestrowany klient, powracający klient z zapisanym adresem. Każde doprowadź do ekranu order-confirmation i zapisz numer zamówienia.

Bramka płatności zostawiona w trybie testowym po wdrożeniu albo przełączona na produkcję bez sprawdzenia webhooków.

Jak wykryć: Wpłaty są widoczne u operatora, ale zamówienia w panelu stoją na statusie oczekiwania na płatność; brakuje identyfikatora transakcji.

Jak naprawić: Przed przełączeniem sprawdź klucze produkcyjne, adresy powrotu i webhook zgodne z domeną produkcyjną, a potem wykonaj jedną realną transakcję na symboliczną kwotę i porównaj status zamówienia z zapisem u operatora.

Wymuszona kolejność lub domyślna metoda płatności blokuje pozostałe opcje przy wybranej formie dostawy.

Jak wykryć: Klient wybierający Paczkomat widzi tylko jedną metodę płatności, choć pozostałe moduły są włączone i mają ustawione ograniczenia.

Jak naprawić: Przejrzyj ograniczenia dostaw i płatności w konfiguracji każdego modułu. Metodę domyślną ustaw tak, żeby była podpowiedzią, a nie filtrem odcinającym resztę.

Brak wykrywania zamówień opłaconych, które nie powstały w sklepie.

Jak wykryć: U operatora płatności widnieją wpłaty bez odpowiadającego im zamówienia w back-office albo zamówienia bez zmiany statusu po powrocie z bramki.

Jak naprawić: Ustaw webhooki i cykliczne porównanie listy transakcji z listą zamówień. Dla znalezionych przypadków dopisz zamówienie ręcznie lub skoryguj status i powiadom klienta.

Lista kontrolna do odklikania

Podsumowanie

Checkout to nie jedna opcja w panelu, a zestaw decyzji: gość czy konto, lista wymaganych pól, limity zamówienia, dostępność przewoźników i metod płatności. Najwięcej zamówień traci się nie na wyglądzie kroków, a na walidacji i błędach po stronie modułów, dlatego każdą zmianę warto przepuścić przez trzy scenariusze testowe. Zacznij od pomiaru, żeby wiedzieć, na którym kroku klienci odpadają — pomoże w tym wdrożenie GA4 eCommerce w PrestaShop, a dopiero potem zmieniaj układ kroków. Efekt ocenisz po kilku tygodniach danych, nie po jednym demo.

Najczęściej zadawane pytania

Czy do zbudowania checkoutu w PrestaShop trzeba dokupić moduł?

Nie, pełny proces zamówienia jest częścią rdzenia PrestaShop i działa od razu po instalacji. Moduły dokupuje się do rzeczy dodatkowych: płatności odroczonych, mapy punktów odbioru, niestandardowych pól w formularzu. Zanim kupisz moduł, sprawdź w dokumentacji, czy danej funkcji nie da się włączyć w konfiguracji. Opis szablonów i kontrolerów znajdziesz w dokumentacji dla deweloperów PrestaShop.

Jak włączyć one-page checkout w PrestaShop?

Opcja znajduje się w Preferencje > Zamówienia i w zależności od wersji oraz języka panelu nazywa się szybkie zamówienie albo one-page checkout. Sam przełącznik nie wystarczy — motyw musi mieć szablony dostosowane do jednokrokowej formy. Po włączeniu przejdź całą ścieżkę testową, bo najczęściej właśnie tam wychodzą błędy AJAX i puste stawki dostawy.

Dlaczego klient widzi Zamówienie potwierdzone, a płatności nie ma w panelu?

Ekran order-confirmation pokazuje się także wtedy, gdy bramka nie potwierdziła jeszcze transakcji — to nie jest równoznaczne z opłaceniem. Sprawdź status zamówienia w back-office, konfigurację webhooka oraz zapis transakcji u operatora dla tego numeru. Warto mieć ustaloną procedurę dla takich przypadków, żeby nie zniknęły między działem obsługi a księgowością.

Czy w polskim adresie potrzebne jest pole stan lub region?

Nie, dla Polski to pole zwykle niczego nie wnosi i tylko wydłuża formularz. Wyłączasz je w formacie adresu kraju oraz w liście wymaganych pól adresu. Uwaga na moduły kurierskie, które potrafią wymusić własne reguły niezależnie od ustawień rdzenia.

Dlaczego po wyborze Paczkomatu znikają metody płatności?

Najczęstsza przyczyna to ograniczenia w konfiguracji modułu płatności powiązane z konkretnymi przewoźnikami. Druga możliwość to konflikt z szybkim zamówieniem, gdzie moduł dostawy wymaga pełnego adresu przed krokiem dostawy. Sprawdź ograniczenia obu modułów i przetestuj tę samą kombinację na standardowym, krokowym checkoutcie.

Jak sprawdzić, czy płatności odroczone nie psują dostępności innych metod?

Ustaw dla nich osobne ograniczenia kwotowe i sprawdź je na kilku koszykach: poniżej progu, powyżej i na granicy widełek. Ważne też, czy metoda znika poprawnie przy formach dostawy, których operator nie obsługuje — na przykład przy wysyłce za pobraniem. Wynik zapisz w jednym miejscu, bo przy kolejnej zmianie w modułach nikt tego nie odtworzy z pamięci.

Czy stronę zamówienia da się cacheować, żeby przyspieszyć checkout?

Nie, checkout zależy od sesji, koszyka i danych klienta, więc pełny cache tu nie zadziała. Poprawiać trzeba inne rzeczy: czas odpowiedzi serwera, liczbę skryptów firm trzecich na kroku płatności i to, czy moduły nie dociągają zasobów z zewnętrznych domen. Progi i definicje metryk opisuje web.dev.

Jeśli wolisz mieć checkout sprawdzony raz a dobrze, DropDigital prowadzi audyty i wdrożenia sklepów PrestaShop — od konfiguracji pól i przewoźników po testy bramek płatności. Napisz, co masz teraz w sklepie, a powiemy, co warto poprawić w pierwszej kolejności.

Źródła i materiały