PayU w PrestaShop to najczęściej wybierana polska bramka płatności, a jednocześnie integracja, która najczęściej wywraca się na jednym etapie: dane API z sandboxa trafiają na produkcję albo odwrotnie. W tym artykule przechodzimy przez organizację wdrożenia — wybór modułu, wpisanie kluczy, konfigurację statusów zamówień, obsługę powiadomień i diagnostykę typowych błędów. Nie znajdziesz tu obietnic wzrostu konwersji o kilkadziesiąt procent, tylko konkretne kroki i miejsca, w których warto sprawdzić stan sklepu. Całość zamyka checklista, którą można przejść punkt po punkcie przed uruchomieniem płatności na produkcji.
PayU to polski operator płatności. W PrestaShop podłączasz go jako bramkę: klient wybiera metodę w koszyku, płaci na stronie PayU albo w oknie BLIK, a wynik transakcji wraca do sklepu i przestawia status zamówienia. Bez tego drugiego elementu — informacji zwrotnej o transakcji — moduł jest tylko ozdobą checkoutu.
Standardowy zestaw metod to BLIK, karty Visa i Mastercard, Apple Pay, Google Pay, przelewy online z listy banków oraz płatności odroczone i raty. Dokładny zakres zależy od tego, co masz włączone na swoim POS-ie, więc najpierw sprawdź panel PayU, a dopiero potem planuj komunikację w sklepie.
Zanim wpiszesz cokolwiek w moduł, musisz mieć podpisaną umowę z PayU i przejść KYC — weryfikację danych firmy, osoby reprezentującej i beneficjenta rzeczywistego. Po akceptacji dostajesz dostęp do panelu, a w nim identyfikator POS (punkt sprzedaży) oraz klucze API. Prowizje ustalane są indywidualnie i zależą od obrotu oraz metod płatności — stawki czytaj w swoim cenniku w panelu, nie w poradnikach z internetu.
PayU, Tpay czy Przelewy24? Porównuj cztery rzeczy: które metody są realnie dostępne dla Twojego profilu, wysokość prowizji i koszt zwrotu, tempo rozliczania wypłat oraz to, jak wygląda zwrot środka i reklamacja z poziomu sklepu. Dochodzi jakość API i wsparcia — jeśli wdrożenie robisz sam, brak sensownej dokumentacji kosztuje więcej niż różnica 0,2 pkt proc. w prowizji. Kontekst całego wdrożenia, razem z hostingiem i backupami, opisujemy w sekcji o organizacji wdrożenia PrestaShop.
| Metoda | Kto potwierdza płatność | Czas do statusu „opłacone” | Typowy problem |
|---|---|---|---|
| Przelew tradycyjny | Ty, ręcznie | 0,5–2 dni robocze | Zamówienie wisi, towar wychodzi przed wpływem |
| Pobranie | Przewoźnik / operator | Po dostawie | Zwroty i niedoręczone paczki |
| Bramka PayU | PayU | Sekundy | Złe klucze API albo niepodpięty status zamówienia |
Na rynku są dwa typy rozwiązań: oficjalny moduł PayU (publikowany przez PayU i udostępniany w PrestaShop Addons) oraz moduły firm trzecich i pakiety „all-in-one” z marketplace’ów. Zacznij od oficjalnego — jest darmowy, a dokumentacja dotyczy tego samego produktu, który później wspiera operator.
Przed instalacją sprawdź trzy rzeczy: datę ostatniego wydania, deklarowane wsparcie dla wersji PrestaShop (1.7.x, 8.0, 8.1) i zakres PHP (7.4–8.2). Nie zakładaj, że „działa, bo inni mają” — jedna niezgodność z PHP kończy się białym ekranem w checkoutcie.
/modules/<nazwa>/views/templates/ lub w motywie → po instalacji porównaj wygląd koszyka i strony potwierdzenia.paymentOptions → w checkoutcie pojawia się jedna metoda albo żadna.Własny moduł lub bezpośrednia integracja z REST API ma sens, gdy potrzebujesz niestandardowej logiki statusów (np. faktura wystawiana dopiero po potwierdzeniu transakcji), obsługujesz B2B z płatnością odroczoną i terminami, prowadzisz multistore z wieloma walutami albo chcesz spiąć płatności z ERP i magazynem. Wtedy moduł pisze się pod Twój proces, a nie proces dopasowuje się do modułu — ale licz się z utrzymaniem i testami po każdej aktualizacji PrestaShop. Jak nie wpaść w pułapki przy wyborze gotowych rozwiązań, opisujemy w artykule o modułach PrestaShop i ich wdrażaniu, a punkt startowy do własnej integracji znajdziesz w tekście o generatorze modułów PrestaShop. Struktura hooków i szablonów jest opisana w dokumentacji dla deweloperów PrestaShop.
| Wariant | Kiedy ma sens | Główne ryzyko |
|---|---|---|
| Oficjalny moduł PayU | Standardowy sklep B2C, jedna waluta, typowe statusy | Zależność od tempa wydań operatora |
| Płatny moduł z marketplace | Potrzebujesz funkcji, której nie ma w oficjalnym | Brak aktualizacji, konflikt z motywem, nadpisane hooki |
| Własny moduł / REST API | B2B, multistore, ERP, niestandardowe statusy | Koszt utrzymania i testów po każdej aktualizacji PS |
Zanim klikniesz cokolwiek, zrób kopię: zrzut bazy (mysqldump albo narzędzie hostingu) i archiwum plików. Jeśli masz taką możliwość, testuj na klonie sklepu na subdomenie z wyłączonym indeksowaniem — debug na produkcji przy 20 zamówieniach dziennie to zbędne ryzyko.
/modules/ przez SFTP i zainstaluj z listy.| Pole w module | Skąd wziąć | Typowy błąd |
|---|---|---|
| POS ID | Lista punktów sprzedaży w panelu PayU | Wklejenie POS-a z sandboxa na produkcję |
| Client ID | Konfiguracja API przypisana do danego POS | Dane z innego konta lub innego sklepu |
| Client Secret | Konfiguracja API | Zgubiony sekret — trzeba wygenerować nowy |
| Second Key | Ustawienia powiadomień / podpis | Wklejenie go w pole Client Secret — to dwa różne klucze |
PayU utrzymuje dwa osobne środowiska i to jest źródło większości wdrożeniowych wpadek. Sandbox działa na hoście secure.snd.payu.com, produkcja na secure.payu.com. Token OAuth pobierasz z endpointu /pl/standard/user/oauth/authorize, ale na każdym środowisku z innym client_id (POS ID) i client_secret. Klucze z panelu sandbox nie zadziałają na produkcji i odwrotnie — nie ma tu wspólnego mianownika.
Karty testowe i testowy BLIK bierz wyłącznie z panelu sandbox PayU. Nie kopiuj numerów z poradników — PayU je rotuje, a po zmianie dostaniesz odrzucenie transakcji, którego będziesz szukał w module, choć problem jest w danych karty. Sandbox nie sprawdzi też realnego księgowania: statusy są symulowane, więc „działa na sandboxie” nie znaczy „działa na produkcji”.
W konfiguracji modułu sprawdzasz cztery pola: POS ID, Client Secret, drugi klucz (Second Key) do weryfikacji podpisu i przełącznik trybu testowego. Do tego adres powrotu (continueUrl) i adres powiadomień (notify_url). Ten drugi musi być publicznie dostępny — jeśli sklep stoi za basic auth, na firewallu z whitelistą IP albo w katalogu /dev/, PayU nie doręczy powiadomienia. Weryfikacja: w access logu serwera szukasz POST-a na ścieżkę kontrolera modułu i testujesz go ręcznie przez curl z zewnętrznej sieci.
Typowy błąd numer jeden: po wdrożeniu ktoś zostawia zaznaczony tryb testowy. Objaw jest cichy — zamówienia wchodzą, klienci widzą bramkę, ale płatności się nie księgują, a statusy stoją w oczekiwaniu. Drugi w kolejności to pozostawione zamówienia testowe i karty testowe w profilach klientów. Zanim wpiszesz klucze, ustal też, który moduł obsługuje płatności — piszemy o tym w materiale PrestaShop moduły: jak wybrać, wdrożyć i nie zepsuć sklepu.
| Element | Sandbox | Produkcja |
|---|---|---|
| Host API | secure.snd.payu.com | secure.payu.com |
| POS ID i klucze | z panelu sandbox | z panelu produkcyjnego |
| Umowa | niewymagana | podpisana i aktywna |
| Karty i BLIK | tylko testowe z panelu | prawdziwe |
| Tryb testowy w module | włączony | wyłączony |
Status zamówienia w PrestaShop zmienia nie powrót klienta na stronę sklepu, a powiadomienie serwer-serwer od PayU. Schemat jest zawsze taki sam: klient składa zamówienie (status „Oczekiwanie na płatność”), moduł tworzy zamówienie w PayU i przekierowuje przeglądarkę, PayU autoryzuje płatność i wysyła POST na notify_url, moduł weryfikuje podpis i przestawia zamówienie na status z konfiguracji — najczęściej „Płatność zaakceptowana”. Klient, który zamknie kartę po zapłacie, nie psuje niczego, o ile notify dotarł.
Najczęstszy problem brzmi: „pieniądze są na koncie, a zamówienie wisi w oczekiwaniu”. Pięć przyczyn w kolejności sprawdzania:
Diagnostykę zaczynasz od logów. W PrestaShop: Zaawansowane → Logi, tabela ps_log, filtr po nazwie modułu. Moduły płatności często piszą własny plik — sprawdź opcję logowania w konfiguracji oraz katalogi /var/logs/ i /app/logs/. Szukasz dwóch identyfikatorów: orderId z PayU i extOrderId, czyli numeru zamówienia ze sklepu. Z nimi zgłoszenie do PayU idzie w kilka minut, bez nich — w kilka dni.
Jako zabezpieczenie ustaw cron co 10–15 minut na odpytywanie API o status zamówień z ostatnich 24 godzin. PayU ponawia powiadomienia kilka razy, ale jeśli notify_url był niedostępny dłużej, ponowienia też przepadną. Powiadomienie musi kończyć się odpowiedzią HTTP 200 (MDN Web Docs); przekierowanie 301 lub 302 PayU potraktuje jak porażkę.
| Status w PayU | Co oznacza | Co robisz |
|---|---|---|
| NEW | zamówienie utworzone, brak płatności | czekasz, nic nie zmieniasz |
| PENDING | płatność w toku | nie przestawiasz statusu ręcznie |
| WAITING_FOR_CONFIRMATION | czeka na potwierdzenie | sprawdź, czy nie wymaga akcji po stronie sklepu |
| COMPLETED | opłacone | status „Płatność zaakceptowana” |
| CANCELED | anulowane lub odrzucone | status „Anulowane”, zwolnij towar |
Zacznij od podziału: błąd jest w połączeniu, w danych albo w kolejności zdarzeń. 401 i 403 to zwykle pierwsza grupa — token OAuth nie powstaje, bo POS ID, Client Secret lub drugi klucz są błędne albo pochodzą z innego środowiska. Test ręczny: POST na endpoint autoryzacji z nagłówkiem Basic (Base64 z client_id:client_secret) i parametrem grant_type=client_credentials. 200 z access_token oznacza klucze poprawne, 401 — do wymiany. 403 częściej oznacza POS ID bez uprawnień do konkretnej metody (BLIK, raty) albo nieaktywną umowę.
Druga grupa to PHP. Brak rozszerzenia cURL sprawdzisz w Zaawansowane → Informacje; objaw to biały ekran lub 500 przy przekierowaniu do bramki. Stare PHP bez aktualizacji modułu daje ostrzeżenia i błędy typu Call to undefined function. Wyłączony lub niepełny SSL kończy się odrzuceniem powiadomienia albo blokadą przekierowania — certyfikat musi obejmować domenę powrotu.
Niezgodność kwoty lub waluty: koszyk pokazuje 129,99 PLN, a do PayU leci 129.99 albo kwota po innym zaokrągleniu. Winne są zwykle separator dziesiętny przy imporcie, rabat naliczany w module, a nie w koszyku, oraz multistore z inną walutą zamówienia. Efekt: PayU odrzuca zamówienie i transakcja w ogóle nie powstaje.
Duplikaty mają dwa źródła. Dwa zamówienia po dwukrotnym kliknięciu „Zamawiam” to wina modułu — nie blokuje przycisku. Duplikat po powiadomieniu to brak idempotencji webhooka: PayU ponawia POST-y, a sklep przetwarza każdy osobno. Lekarstwo: przed utworzeniem zamówienia sprawdź, czy nie istnieje już zamówienie z tym samym extOrderId.
BLIK: kod ma 6 cyfr i krótki czas życia, więc brak kodu to najczęściej klient, który nie zdążył przepisać go z aplikacji banku. Druga przyczyna to numer telefonu ze spacjami, myślnikami albo bez prefiksu krajowego — BLIK wymaga numeru powiązanego z kontem. Trzecia to timeout bramki przy wolnym łączu. Nie odświeżaj strony w trakcie potwierdzania kodu. Jeśli wdrożenie robisz od zera, kolejność kroków opisujemy w organizacji wdrożenia PrestaShop krok po kroku.
| Objaw | Prawdopodobna przyczyna | Pierwsze sprawdzenie |
|---|---|---|
| 401 przy autoryzacji | błędny POS ID lub Client Secret | test OAuth przez curl |
| 403 przy płatności | brak uprawnień lub nieaktywna metoda | panel PayU, status umowy |
| 500 przy przekierowaniu | brak cURL, stare PHP | Zaawansowane → Informacje |
| status wisi po zapłacie | zablokowany notify_url | access log + ręczny POST |
| dwie transakcje z jednego zamówienia | brak idempotencji po extOrderId | tabela zamówień i logi |
| BLIK kończy się timeoutem | wygasły kod lub zły numer | komunikaty na stronie, format numeru |
Integracja PayU nie kończy się na kluczach API. Trzy rzeczy trzeba domknąć przed startem: szyfrowanie, zakres przekazywanych danych i obsługa zwrotów.
HTTPS. Katalog, koszyk i panel administracyjny muszą działać po HTTPS, a certyfikat musi być ważny z zapasem. Powiadomienia PayU o zmianie statusu płatności przychodzą na adres Twojego sklepu — jeśli certyfikat wygaśnie albo TLS zostanie wyłączony, potwierdzenia przestaną dochodzić i zamówienia zostaną w statusie „Oczekiwanie na płatność”, mimo że klient zapłacił. Ustaw przypomnienie o wygaśnięciu certyfikatu minimum 30 dni wcześniej. Podstawy protokołu opisuje dokumentacja HTTP w MDN.
PCI DSS. Przy przekierowaniu na stronę PayU dane karty nie przechodzą przez serwer sklepu i nie są nigdzie w PrestaShop zapisywane. To najbezpieczniejszy wariant i realnie najmniejszy zakres PCI DSS. Nie buduj własnego formularza na kartę i nie dopuszczaj wpisywania numeru karty w komentarzu do zamówienia — to od razu wciąga sklep w poważniejszy zakres i audyt.
Zwroty i refundy. Przycisk zwrotu w PrestaShop nie oddaje pieniędzy — zmienia stan magazynu i status zamówienia. Zwrot środków robisz w panelu PayU (Zwroty) albo przez API. Kolejność jest zawsze ta sama: zwrot w PayU, potwierdzenie, status w PrestaShop, korekta faktury. Odwrotna kolejność kończy się zamówieniem oznaczonym jako zwrócone, za które klient nie dostał pieniędzy.
Faktury. Sprawdź, przy którym statusie PrestaShop wystawia dokument. Jeśli faktura powstaje przy „Oczekiwanie na płatność”, będziesz mieć dokumenty do porzuconych koszyków. Data płatności na fakturze powinna zgadzać się z datą transakcji w PayU.
RODO. Do PayU trafiają: imię i nazwisko, e-mail, adres, kwota, identyfikator zamówienia i adres IP. Ten zakres musi być widoczny w polityce prywatności razem ze wskazaniem PayU jako odbiorcy danych.
Logowanie zdarzeń wdrażaj, gdy masz kilkadziesiąt zamówień dziennie, własne statusy albo spory z klientami. Zapisuj surowe powiadomienie: czas, numer zamówienia, status, kwotę i metodę. Wybór gotowego rozwiązania opisujemy w materiale o modułach PrestaShop.
| Czynność | Gdzie ją wykonujesz | Efekt |
|---|---|---|
| Zmiana statusu na „Zwrócono” | PrestaShop | Zapis w bazie sklepu, klient nie dostaje pieniędzy |
| Zwrot środków | Panel PayU lub API PayU | Pieniądze wracają na kartę lub konto klienta |
| Korekta faktury | PrestaShop lub system księgowy | Dokument korygujący po potwierdzeniu zwrotu |
| Powiadomienie klienta | PrestaShop (szablon e-mail) | Informacja o zwrocie — sprawdź treść szablonu |
Widełki zależą od tego, ile pracy pokrywa gotowy moduł, a ile trzeba dopisać. Poniżej realne przedziały przy założeniu, że klucze i konfiguracja statusów są już przemyślane.
Koszt pracy liczę przy stawce 200 zł netto za godzinę — to typowy poziom dla wdrożeń e-commerce w Polsce, ale każdy wykonawca wycenia inaczej, więc traktuj to jako punkt odniesienia do porównania ofert, a nie jako cennik.
Co wydłuża pracę. Liczba metod płatności włączonych w module, liczba własnych statusów zamówień, wersja PrestaShop (1.7 i 8.x mają różne moduły i różne hooki), motyw nadpisujący szablony, wielojęzyczność i wielosklep, tryb B2B oraz płatności częściowe. Każda z tych rzeczy dodaje od kilkudziesięciu minut do kilku godzin, bo wymaga testu po stronie PayU i po stronie sklepu.
Moduł czy własny kod. Gotowy moduł obsługuje standardowy sklep: katalog, koszyk, jedna waluta, jedna metoda płatności. Własną integrację rozważ, gdy proces odbiega od standardu — na przykład zamówienia B2B z odroczonym terminem, płatność częściowa, wiele sklepów obsługiwanych jednym kontem PayU albo nietypowe mapowanie statusów. Prosty przelicznik: jeśli gotowy moduł kosztuje w przeliczeniu na roboczogodziny mniej niż kilka godzin pracy, a własna integracja to 20–40 godzin, wersja własna ma sens tylko wtedy, gdy daje funkcję, której moduł naprawdę nie ma. Sprawdź aktualną cenę i zgodność modułu z Twoją wersją PrestaShop przed zakupem — te informacje zmieniają się z miesiąca na miesiąc. Przy pisaniu własnego modułu korzystaj z dokumentacji dla deweloperów PrestaShop.
Opieka po wdrożeniu. Aktualizacja PrestaShop albo samego modułu potrafi rozjechać mapowanie statusów i wtedy płatności przestają się księgować. Ustal, kto reaguje w takiej sytuacji i w jakim czasie — czy jest to jedna osoba w firmie, czy wykonawca z określonym czasem reakcji. Zakres wdrożenia i opieki nad sklepem PrestaShop opisujemy razem z tym, co wchodzi w stałą obsługę.
| Wariant | Zakres prac | Czas | Koszt pracy przy 200 zł/h netto |
|---|---|---|---|
| Samodzielna instalacja | Instalacja modułu, wpisanie kluczy z panelu PayU, włączenie metod płatności | 1–3 h | 0–600 zł |
| Konfiguracja z testami | Jak wyżej plus statusy zamówień, testy sandbox, faktury, powiadomienia | 4–8 h | 800–1600 zł |
| Niestandardowa integracja | Własny moduł, płatności częściowe, B2B, wiele sklepów na jednym koncie | 16–40 h | 3200–8000 zł |
Lista do przejścia punkt po punkcie. Odhaczaj od góry, nie pomijaj testów płatności — to jedyny moment, w którym błędy nie kosztują jeszcze utraconych zamówień.
Weryfikacja produkcji. Po testach w sandboxie wykonaj jedną prawdziwą płatność na niewielką kwotę, najlepiej własną kartą. Sprawdź kolejno: status zamówienia, e-mail potwierdzający, fakturę i obecność transakcji w panelu PayU. Następnie zwróć tę płatność i sprawdź, czy status oraz korekta dokumentu zadziałały tak samo jak w sandboxie.
Monitoring po starcie. Ustaw alert na zamówienia, które wiszą w „Oczekiwanie na płatność” dłużej niż kilkanaście minut, i na powiadomienia zwracające błąd serwera. Przeglądaj logi modułu oraz logi serwera pod kątem wywołań adresu powiadomień. Dopisz do kalendarza termin wygaśnięcia certyfikatu. Jeśli w sklepie działa kilka modułów płatności, obejrzyj też materiał o modułach PrestaShop — konflikty między nimi zdarzają się częściej niż awarie samego PayU.
| Test w sandboxie | Co sprawdzasz | Oczekiwany rezultat |
|---|---|---|
| BLIK | Powrót do sklepu i księgowanie zamówienia | Status „Płatność zaakceptowana”, e-mail do klienta wysłany |
| Karta | Płatność udana, płatność odrzucona, ewentualne 3-D Secure | Dwa różne statusy, żadna próba nie zostawia pustego zamówienia |
| Przelew | Płatność oczekująca do zaksięgowania | Status zmienia się po potwierdzeniu, nie od razu |
| Anulowanie | Powrót do sklepu bez zapłaty | Zamówienie nie jest oznaczone jako opłacone |
| Zwrot | Pełny zwrot z panelu PayU | Status „Zwrócono”, korekta faktury gotowa do wysłania |
| Powtórzone powiadomienie | Zachowanie sklepu przy ponownym wywołaniu | Sklep nie duplikuje zamówienia ani nie nadpisuje statusu |
Klucze z sandboxa wpisane w konfiguracji produkcyjnej (albo odwrotnie).
Jak wykryć: Pierwsze płatności kończą się błędem autoryzacji, a w panelu PayU nie pojawiają się żadne transakcje. W logach modułu widać odpowiedź HTTP 401 lub 403.
Jak naprawić: Porównaj POS ID, Client ID i Client Secret z właściwym środowiskiem w panelu PayU, popraw dane, zapisz konfigurację i wyczyść cache PrestaShop. Następnie wykonaj jedną realną płatność na 1 zł i zwróć ją.
Tryb testowy pozostawiony po wdrożeniu.
Jak wykryć: Klienci skarżą się, że nie mogą zapłacić, a w panelu PayU nie ma nowych transakcji, mimo że koszyki są porzucane na etapie płatności.
Jak naprawić: Wyłącz sandbox w konfiguracji modułu, zapisz zmiany, wyczyść cache i sprawdź pełną ścieżkę zakupu metodą BLIK na symboliczną kwotę. Po potwierdzeniu statusu opłaconego anuluj testowe zamówienie.
Niedziałające powiadomienia o płatności (notify_url / webhook).
Jak wykryć: Zamówienie ma status oczekujące na płatność, choć pieniądze są zaksięgowane w PayU. W logach modułu brak wpisów o odebranym powiadomieniu.
Jak naprawić: Sprawdź, czy adres sklepu jest publicznie dostępny — bez basic auth, blokad IP i reguł WAF blokujących POST-y. Zweryfikuj poprawność SSL i przejrzyj historię transakcji w panelu PayU razem z logami modułu.
Brak rozszerzenia cURL lub niewspierana wersja PHP.
Jak wykryć: Moduł nie instaluje się, pojawia się biały ekran, błąd 500 lub komunikat o nieznanej funkcji curl_init.
Jak naprawić: Sprawdź listę rozszerzeń (php -m lub phpinfo), włącz cURL, podnieś PHP do wersji wspieranej jednocześnie przez moduł i PrestaShop, wyczyść cache i wykonaj ponowny test płatności.
Niezgodność kwoty lub waluty między koszykiem a PayU.
Jak wykryć: PayU odrzuca transakcję lub kwota widoczna w PayU różni się od kwoty w podsumowaniu zamówienia. Problem pojawia się zwykle po zmianie kosztów dostawy, rabatu lub po dodaniu waluty.
Jak naprawić: Ustal, czy moduł przekazuje kwotę brutto z uwzględnieniem dostawy i rabatów oraz czy dana waluta jest włączona po stronie PayU. Zestaw kwotę z koszyka z kwotą w żądaniu płatności.
Duplikaty zamówień po powtórzonym powiadomieniu.
Jak wykryć: W panelu PrestaShop są dwa zamówienia z tym samym identyfikatorem transakcji PayU albo klient i obsługa dostają podwójne maile.
Jak naprawić: Sprawdź, czy moduł rozpoznaje powtórzone notify po identyfikatorze transakcji i aktualizuje istniejące zamówienie, a nie tworzy kolejnego. Jeśli nie — zgłoś to autorowi modułu albo zaplanuj własną obsługę powiadomień.
PayU w PrestaShop działa przewidywalnie wtedy, gdy dane z sandboxa i produkcji nigdy się nie mieszają, a powiadomienia o płatności mają realną drogę do sklepu. Najwięcej problemów nie wynika z samej bramki, tylko z konfiguracji po stronie sklepu: braku cURL, wyłączonego SSL, blokady notify_url albo mapowania statusów. Przejdź checklistę przed uruchomieniem i po każdej aktualizacji modułu — to kilkanaście minut, które oszczędzają godziny wyjaśniania zamówień w zawieszeniu. Dopiero potem warto rozmawiać o optymalizacji konwersji, bo bramka, która gubi powiadomienia, zepsuje każdy test.
Do przyjmowania prawdziwych płatności potrzebujesz aktywnej umowy i przejścia weryfikacji (KYC) po stronie PayU. Dopiero po akceptacji otrzymujesz dostęp do produkcyjnych danych POS ID i kluczy API. Zakres dostępu do środowiska testowego zależy od operatora — potwierdź to bezpośrednio w panelu PayU, bo nie zakładamy z góry, że sandbox jest dostępny bez umowy.
Stawki zależą od umowy, obrotu i wybranych metod płatności, dlatego nie podajemy tu konkretnych kwot — sprawdź aktualny cennik u swojego opiekuna handlowego. Przy porównaniu nie patrz wyłącznie na prowizję: policz koszt obsługi zwrotów, czas księgowania, jakość panelu i to, ile pracy zajmie ci rekoncyliacja płatności w PrestaShop. Wersję testową i tak zrobisz na własnym sklepie, więc różnice wyjdą w praktyce, a nie w tabelce.
Najczęstsza przyczyna to nieodebrane powiadomienie o płatności (webhook / notify_url) — sklep nie dowiedział się, że transakcja się zakończyła. Sprawdź, czy adres sklepu jest dostępny publicznie i czy nie blokuje go basic auth, VPN albo WAF. Następnie porównaj identyfikator transakcji z panelu PayU z logami modułu — jeśli transakcja jest w PayU, a w PrestaShop nie ma śladu, problem jest po stronie komunikacji, nie płatności.
Tak, ale nie w godzinach szczytu i nie bez kopii. Zrób zrzut bazy i plików, zapisz obecną konfigurację modułu (POS ID, klucze, mapowanie statusów), a potem aktualizuj w oknie serwisowym. Po zmianie wykonaj jedną realną płatność na symboliczną kwotę i zwróć ją — to najszybszy sposób potwierdzenia, że integracja nadal działa.
Wtedy, gdy nie ma aktualizacji od wielu miesięcy, deklaruje zgodność tylko ze starszymi wersjami PrestaShop albo nadpisuje hooki używane przez twój motyw. Objawy to konflikt z szablonem koszyka, brak wpisów w logach i błędy po aktualizacji PHP. Zanim go wybierzesz, sprawdź datę ostatniej aktualizacji i zakres wspieranych wersji — więcej o wyborze modułów piszemy w tekście o modułach PrestaShop.
401 i 403 to znak, że żądanie nie zostało zaakceptowane: najczęściej nieprawidłowy POS ID, Client Secret lub Second Key, albo dane z niewłaściwego środowiska. Zanim zaczniesz szukać głębiej, porównaj klucze z panelem PayU i upewnij się, że sklep nie łączy się po HTTP. Sama struktura nagłówków i kodów odpowiedzi to temat opisany w dokumentacji HTTP w MDN — warto znać różnicę między błędem autoryzacji a błędem serwera.
Zacznij od hubu wiedzy o PrestaShop, gdzie zbieramy teksty o wdrożeniach i integracjach. Po szczegóły techniczne sięgnij do oficjalnej dokumentacji dla deweloperów PrestaShop — tam sprawdzisz strukturę modułów, hooki i API. Dokumentacja operatora płatności jest źródłem nadrzędnym w kwestii kluczy i środowisk.
Jeśli wdrożenie PayU w twoim sklepie utknęło na błędach autoryzacji albo zamówieniach bez zmiany statusu, napisz do nas — sprawdzimy konfigurację, logi i komunikację z operatorem. Zajmujemy się też migracjami i aktualizacjami modułów płatności bez przestoju sprzedaży.