Webhook w PrestaShop to najprostszy sposób, żeby sklep sam wysłał powiadomienie do Twojego systemu — bez odpytywania API co minutę. W tej części zajmujemy się organizacją wdrożenia: gdzie włączyć wysyłkę w panelu, co ustawić w formularzu, jak przygotować endpoint odbiorcy i jak sprawdzić, że dane faktycznie dochodzą. Kolejność jest ważna, bo błąd w konfiguracji odbiorcy wygląda dokładnie tak samo jak błąd w PrestaShop — dopiero testy rozdzielają te dwie sytuacje. Porównanie webhooka z Webservice API i cronem oraz kryteria wyboru znajdziesz w pierwszej sekcji artykułu, a pozostałe materiały o PrestaShop zbieramy w naszym hubie o PrestaShop.
Definicja w jednym zdaniu: webhook w PrestaShop to mechanizm push — sklep sam wykonuje żądanie POST na wskazany przez Ciebie adres URL w momencie zajścia zdarzenia, zamiast czekania, aż Twój system co minutę zapyta o zmiany przez Webservice API.
To nie jest „lepsza wersja API”. To inne narzędzie i w części projektów po prostu się nie opłaca. W praktyce konkurują ze sobą trzy warianty.
| Kryterium | Webhook | Webservice REST | Cron co 15 min |
|---|---|---|---|
| Kierunek | Push — sklep wysyła do Ciebie | Pull — Ty pytasz sklep | Pull — Ty pytasz sklep |
| Opóźnienie | Poniżej 1 s w trybie real-time | Zależne od interwału odpytywania | Do 15 minut |
| Koszt | Po stronie odbiorcy: endpoint, logi, obsługa błędów | Po stronie pytającego: limity, paginacja | Najniższy — jeden skrypt w cronie |
| Kontrola nad danymi | Tylko to, co wyśle sklep | Pełna: filtry, wybrane pola, zakres dat | Pełna, ale w stałych porcjach |
| Główne ryzyko | Brak natywnych ponowień i podpisu | Rate limit i paginacja (429, ucięte listy) | Opóźnienie dyskwalifikujące statusy płatności |
Trzy scenariusze, w których webhook wygrywa:
Dwa scenariusze, w których webhook przegrywa:
Kryterium decyzyjne: czy opóźnienie powyżej 5 minut kosztuje Cię pieniądze albo powoduje błędy w stanach magazynowych. Jeśli tak — webhook. Jeśli dane mogą poczekać do nocy — API plus cron. Pozostałe materiały o wdrożeniach zbieramy w dziale PrestaShop.
Konfiguracja startuje z zaplecza: Parametry zaawansowane → Webservice → zakładka Webhooki. Zakładka w tej formie jest obecna od wersji 1.7.1 i występuje też w 8.x oraz 9.x, ale nazewnictwo sekcji różni się między wersjami — w jednych instalacjach to osobna zakładka, w innych rozwinięcie bloku Webservice. Zanim cokolwiek ustawisz, sprawdź, czy ją widzisz.
Formularz dodawania webhooka zawiera cztery rzeczy, które realnie wpływają na działanie:
Tryb real-time oznacza, że żądanie POST leci w tym samym żądaniu HTTP, w którym klient składa zamówienie. Jeśli Twój endpoint odpowie w 4 sekundy zamiast w 0,2, wydłużasz checkout każdemu klientowi w tym samym momencie. Dlatego endpoint musi: być publicznie dostępny po HTTPS z poprawnym certyfikatem, nie blokować metody POST (sprawdź reguły WAF), odpowiadać w czasie do 2 s i zwracać kod 2xx. Czym jest metoda POST i jak działa HTTPS, opisuje dokumentacja MDN Web Docs – HTTP.
Jak sprawdzić, czy funkcja w ogóle jest dostępna: obecność modułu webhooków na liście modułów, uprawnienia pracownika do Parametrów zaawansowanych i brak konfliktu z modułem nadpisującym Hook::exec — o tym, jak bezpiecznie diagnozować takie nadpisania, piszemy w tekście o PrestaShop override.
Pułapka: jeśli natywna wysyłka nie działa, w 9 na 10 przypadków problem jest po stronie odbiorcy (WAF, firewall, 500 w skrypcie), a nie w PrestaShop. Zanim zaczniesz grzebać w sklepie, zaloguj odpowiedź serwera docelowego.
Lista hooków jest długa, ale w projektach e-commerce wraca ten sam zestaw ośmiu.
| Hook | Kiedy się odpala |
|---|---|
| actionValidateOrder | Nowe zamówienie po walidacji i zapisie — tu masz id_order |
| actionOrderStatusUpdate | Przed zapisem zmiany statusu — dane sprzed zmiany |
| actionOrderStatusPostUpdate | Po zapisie zmiany statusu — właściwy moment na wysyłkę do ERP |
| actionPaymentConfirmation | Potwierdzenie płatności, np. po callbacku operatora |
| actionProductUpdate | Zmiana danych produktu po zapisie |
| actionUpdateQuantity | Zmiana stanu magazynowego, także po sprzedaży |
| actionCustomerAccountAdd | Rejestracja nowego konta klienta |
| actionObjectCartAddAfter | Dodanie produktu do koszyka — zdarzenie wysokiej częstotliwości |
Najważniejsza różnica: hooki „pre” czytają stan przed zmianą. Jeśli wyślesz status zamówienia do ERP z actionOrderStatusUpdate zamiast z actionOrderStatusPostUpdate, wyślesz dane nieaktualne — i to jest błąd, który wychodzi dopiero po miesiącu, na porównaniu stanów.
Kształt payloadu: JSON z nazwą akcji i parametrami hooka. W większości przypadków dostajesz identyfikatory (id_order, id_product, id_cart), a nie kompletny obiekt — resztę danych musisz dobrać zapytaniem po ID (najlepiej przez Webservice API). Dokumentację hooków znajdziesz w PrestaShop Developer Documentation.
Weryfikacja w 2 minuty: w endpointcie odbiorcy zaloguj surowe body przed parsowaniem — file_get_contents('php://input') do pliku — i złóż jedno testowe zamówienie. Dopiero wtedy wiesz, co realnie wysyła Twoja wersja PrestaShop.
Czego nie ma w natywnej wysyłce: podpisu kryptograficznego, nagłówka autoryzacyjnego i automatycznych ponowień po błędzie. Każde z nich dopisujesz sam.
Multistore: sprawdź, czy w payloadzie dostajesz id_shop. Bez tego webhook z drugiego sklepu nadpisze dane pierwszego. Ciekawym, nietypowym konsumentem zdarzeń ze sklepu jest serwer MCP podłączający AI do danych sklepu.
Natywna konfiguracja webhooka w PrestaShop to zwykłe żądanie HTTP wysłane w trakcie zapytania klienta — bez kolejki, bez retry, bez podpisu. Jeśli integracja ma realne znaczenie (ERP, WMS, system fakturowania), napisz mały moduł. Szkielet: modules/mojmodul/mojmodul.php z klasą MojModul extends Module i metodą install(), w której rejestrujesz hooki: registerHook('actionValidateOrder') oraz registerHook('actionOrderStatusPostUpdate'). Pierwszy łapie nowe zamówienie, drugi — każdą zmianę statusu: płatność potwierdzona, wysłane, anulowane.
Wysyłka: Symfony HttpClient, dostępny w PrestaShop 1.7, 8 i 9. Ustaw timeout 2–3 s oraz max_duration. Całe wywołanie w try/catch — wyjątek wypuszczony z hooka kończy się błędem 500 na stronie koszyka albo potwierdzenia zamówienia. Klient nie zobaczy komunikatu „webhook nie doszedł”, tylko zepsuty sklep.
Krótka synchronizacja to droga do kłopotów. Zdarzenie zapisz do tabeli (ps_mojmodul_queue: id, payload, status, proby, next_attempt, id_order, id_order_state) i wyślij je workerem z crona co minutę. Alternatywa to Symfony Messenger z transportem Doctrine, ale wymaga uruchomionego consumera.
id_order + id_order_state + timestamp. Duplikat ma zwrócić 200 i nic nie robić.I jeszcze jedno: zamiast nadpisywać klasy core przez override, oprzyj się na hookach — pokazujemy to w materiale PrestaShop override: jak nadpisywać kod bez błędów. Zasada nadrzędna: jedna odpowiedzialność na webhook. Moduł, który jednocześnie wysyła zamówienie do ERP, wystawia fakturę i wrzuca kontakt do Mailchimp, po awarii jednego odbiorcy blokuje pozostałych. Trzy osobne kolejki diagnozuje się w minutach, jedną wspólną — w godzinach. Sygnatury hooków i kolejność ich wywołania znajdziesz w dokumentacji dla deweloperów PrestaShop.
| Hook | Kiedy się odpala | Do czego używać |
|---|---|---|
| actionValidateOrder | Po zapisaniu nowego zamówienia | Pierwsze powiadomienie do ERP/WMS |
| actionOrderStatusPostUpdate | Po zmianie statusu zamówienia | Płatność, wysyłka, anulowanie — dane są już aktualne |
| actionPaymentConfirmation | Po potwierdzeniu płatności | Ruch do systemu księgowego |
| actionOrderStatusUpdate (pre) | Przed zmianą statusu | Nie używać do wysyłki danych — payload bywa nieaktualny |
Endpoint webhooka jest publicznie dostępny — kto zna adres, wyśle dowolny payload. Minimum: sekret o długości co najmniej 32 bajtów, losowy, trzymany poza repozytorium (zmienna środowiskowa albo plik konfiguracyjny poza katalogiem modułu), i podpis HMAC-SHA256 liczony z surowego body żądania. Podpis wysyłasz w nagłówku, np. X-Signature, razem z X-Timestamp w formacie uniksowym.
Po stronie odbiorcy policz HMAC z body i porównaj przez hash_equals(). Zwykłe == przerywa porównanie na pierwszym różnym bajcie, więc przy dużej liczbie prób da się odtworzyć podpis (atak timingowy). Żądania starsze niż 5 minut odrzucaj — bez tego raz przechwycone żądanie odtworzysz w nieskończoność (replay attack).
Whitelist IP serwera sklepu to druga linia obrony, nie jedyna. IP zmienia się przy migracji hostingu, zmianie CDN albo wyjściu ruchu przez nowy NAT — wtedy webhooki przestają dochodzić, a Ty szukasz przyczyny w PrestaShop. Aktualizuj listę przy każdej zmianie infrastruktury i traktuj ją jako filtr pomocniczy.
id_customer. Dane osobowe w payloadzie to Twoja odpowiedzialność po obu stronach.https) i host. Blokuj 127.0.0.1, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 oraz 169.254.169.254. Bez tego ktoś skieruje wysyłkę na wewnętrzny adres sieci i odczyta odpowiedź.Kody i nagłówki HTTP masz w jednym miejscu — specyfikacja protokołu HTTP w MDN Web Docs. Warto zajrzeć tam przed pisaniem handlera, bo połowa „błędów webhooka” to źle dobrany kod odpowiedzi.
Zanim zaczniesz grzebać w kodzie, ustal jedno: czy żądanie w ogóle wychodzi ze sklepu. To rozdziela dwie różne klasy problemów — konfigurację po stronie sklepu i zachowanie odbiorcy. Poniższa tabela to kolejność, w jakiej sprawdzamy zgłoszenia.
| Objaw | Najczęstsza przyczyna | Test diagnostyczny |
|---|---|---|
| Webhook wcale nie leci | Wyjątek PHP w hooku, moduł niezarejestrowany, brak registerHook() | Sprawdź logi błędów PHP na serwerze sklepu i wywołaj endpoint ręcznie przez curl z hosta sklepu, nie z laptopa |
| 403/406 | WAF lub mod_security blokuje POST z zewnątrz | Wyślij POST bez ciasteczek z zewnątrz; dodaj wyjątek dla ścieżki endpointu, nie wyłączaj całego WAF |
| Timeout u odbiorcy | Endpoint wykonuje ciężką operację synchronicznie | Zmierz czas odpowiedzi; powyżej 2 s w trybie real-time odbija się na czasie ładowania koszyka |
| Duplikaty tego samego zamówienia | Brak idempotencji; klient odświeżył potwierdzenie albo status zmienił się dwukrotnie | Porównaj dwa payloady i sprawdź, czy odbiorca liczy klucz id_order + id_order_state + timestamp |
| Nieaktualne dane w payloadzie | Użyty hook pre zamiast actionOrderStatusPostUpdate | Porównaj payload z aktualnym stanem zamówienia w panelu po kilkudziesięciu sekundach |
| Złe ID | Pomylone id_order z reference albo brak obsługi id_shop w multistore | Sprawdź, czy rekord w ERP wskazuje właściwy sklep — przy kilku sklepach ID potrafią się rozjechać |
W praktyce najwięcej czasu oszczędza jeden plik CSV: surowe body, kod HTTP odpowiedzi, czas odpowiedzi i timestamp. Po przejrzeniu 20 takich wierszy rozwiązujemy większość zgłoszeń dotyczących webhooków. Jeśli wdrażasz integracje równolegle z innymi, np. z systemem kurierskim, kolejność prac opisujemy w materiale InPost w PrestaShop: wdrożenie krok po kroku. Zbiorczy przegląd tematów sklepowych znajdziesz w sekcji PrestaShop.
W natywnej konfiguracji wysyłka dzieje się w żądaniu klienta: moduł podpięty do actionValidateOrder wykonuje żądanie HTTP, zanim sklep pokaże potwierdzenie zamówienia. Efekt jest liniowy — jeśli odbiorca odpowiada w 500 ms, składanie zamówienia wydłuża się o 500 ms. Przy 1,5 s u odbiorcy i płatności online klient widzi zawieszoną stronę, a część osób odświeża koszyk i składa zamówienie drugi raz. Każde z tych zdarzeń to osobny webhook i osobny wiersz w ERP.
Stosujemy trzy środki, w tej kolejności:
INSERT (tabela np. ps_dd_webhook_queue: id, event, payload, idempotency_key, attempts, next_attempt_at) i kończy pracę w kilka milisekund. Worker uruchamiany z CLI przez cron, limit np. 100 rekordów na przebieg, wysyła poza requestem klienta.Monitoring: alert, gdy odsetek nieudanych webhooków przekracza 5% albo najstarszy wpis w kolejce ma więcej niż 15 minut. Test kontrolny: 50 zamówień w 5 minut na stagingu i pomiar czasu odpowiedzi koszyka przed i po włączeniu webhooków. Semantykę kodów odpowiedzi i timeoutów opisuje dokumentacja HTTP w MDN. Samą kolejkę budujemy w module, nie przez nadpisywanie rdzenia — opisaliśmy to w materiale PrestaShop override: jak nadpisywać kod bez błędów.
| Podejście | Wpływ na czas składania zamówienia | Kiedy stosować |
|---|---|---|
| Real-time w requeście klienta | Równy czasowi odpowiedzi odbiorcy | Tylko odbiorca odpowiadający poniżej 200 ms, mały ruch |
| Tryb cron (wysyłka co minutę) | Brak — zdarzenie tylko zapisywane | Księgowość, raporty, systemy wsadowe |
| Kolejka + worker | Kilka milisekund (jeden INSERT) | ERP, wiele odbiorców, duży ruch |
| Timeout 2 s + circuit breaker | Maksymalnie 2 s, potem odcięcie | Zawsze jako zabezpieczenie |
Kurierzy. InPost, DPD i DHL wysyłają statusy przesyłek. Warto mapować je na własne statusy zamówienia, a nie wrzucać jeden do jednego — inaczej klient dostaje maila „Zrealizowane”, gdy paczka dopiero jedzie. Statusów nieznanych nie zgadujemy: lądują w statusie „Do weryfikacji” i logu z pełnym payloadem. Szczegóły integracji z InPost opisujemy w InPost w PrestaShop: wdrożenie krok po kroku, a różnice w nowszej wersji sklepu w InPost i PrestaShop 9: organizacja wdrożenia bez przestojów.
ERP. Subiekt, Comarch, WF-Mag: zamówienie wysyłamy w actionValidateOrder. Jeśli ERP nie odpowiada, zamówienie musi zostać w sklepie z notatką „Czeka na ERP” i trafić do kolejki z retry (1, 5, 15, 60 minut). Nigdy nie usuwamy zamówienia i nigdy nie blokujemy checkoutu.
Księgowość. Webhook z operatora płatności uruchamia wystawienie faktury, ale rozróżniamy płatność oczekującą (autoryzacja) od zaksięgowanej (potwierdzenie od operatora). Faktura tylko dla tej drugiej.
Marketing. actionCustomerAccountAdd i actionValidateOrder do Mailchimp/Klaviyo wysyłamy wyłącznie za zgodą i w minimalnym zakresie: e-mail, imię, ID klienta, wartość zamówienia. Bez danych wrażliwych, z obsługą wypisania się. Przykład integracji, gdzie część funkcji lepiej odpuścić, znajdziesz w Facebook w PrestaShop: co wdrożyć, a co odpuścić.
Kiedy webhook to zły wybór: hurtowa wymiana katalogu i stanów magazynowych. 20 tys. SKU w webhookach to 20 tys. żądań i kolejka rosnąca szybciej, niż worker ją czyści. Tu działa CSV/SFTP albo API z harmonogramem. Definicje hooków znajdziesz w dokumentacji dla deweloperów PrestaShop.
| Status u przewoźnika | Status w PrestaShop | Akcja systemu |
|---|---|---|
| Przesyłka nadana | Wysłane | Zapis numeru listu, mail z trackingiem |
| W doręczeniu | W drodze | Bez maila (żeby nie spamować) |
| Doręczona | Zrealizowane | Mail z prośbą o opinię |
| Nieudana próba doręczenia | W drodze | Notatka do zamówienia, bez zmiany na Anulowane |
| Zwrot do nadawcy | Zwrot | Alert do obsługi klienta |
| Status nieznany | Do weryfikacji | Log pełnego payloadu, obsługa ręczna |
Widełki, które podajemy przed analizą, są realne dla typowego sklepu na PrestaShop 1.7, 8 lub 9:
Na te godziny składa się praca, którą da się wskazać palcem: analiza hooków i struktury danych w Twojej wersji PrestaShop, kod modułu, klucz idempotencji (żeby ponowienie nie zdublowało faktury), testy na stagingu, dokumentacja i przekazanie. Klucz idempotencji to najmniejszy element, a najczęstsza przyczyna „dubli” w ERP.
Liczymy godzinowo, bo liczba hooków i odbiorców zmienia zakres. Cennik „z sufitu” kończy się dopłatami w połowie projektu — a wtedy rozmowa jest już nie o kodzie, tylko o budżecie.
I uczciwie: jeśli potrzebujesz jednego powiadomienia do jednego adresu, natywna konfiguracja z panelu wystarczy i nie ma sensu płacić za moduł. Mówimy to wprost, bo wolimy wrócić przy drugiej integracji niż przepchnąć niepotrzebny projekt.
Po wdrożeniu zostaje opieka: monitoring kolejki, reakcja na błędy po stronie odbiorcy, jasne SLA i kontakt bezpośrednio z deweloperem, bez pośredników. Zakres naszych prac nad sklepem opisuje PrestaShop.
Nie wiesz, czy problem leży po stronie sklepu czy odbiorcy? Wyślij nam logi z ostatnich 24 godzin — wrócimy z diagnozą, bez zobowiązania.
| Zakres | Godziny | Co zawiera |
|---|---|---|
| Natywna konfiguracja z panelu | 0 | Jeden odbiorca, bez kolejki i retry — gdy opóźnienie nie ma znaczenia |
| Podstawowy webhook | 8–16 | Kolejka, retry, podpis HMAC, idempotencja, testy na stagingu, dokumentacja |
| Integracja z ERP | 20–40 | Mapowanie statusów, obsługa braku odpowiedzi ERP, raport błędów, przekazanie |
Włączenie trybu real-time bez sprawdzenia, jak szybko odpowiada endpoint odbiorcy. Wysyłka idzie w tym samym żądaniu, w którym klient składa zamówienie, więc wolny lub zawieszony skrypt po drugiej stronie wydłuża składanie zamówienia i może kończyć się błędem 500 u klienta.
Jak wykryć: Zmierzyć czas odpowiedzi endpointu: curl -X POST -w '%{time_total}' na docelowy URL z serwera sklepu, kilka razy pod rząd. W logach wolnych żądań sprawdzić, czy POST do webhooka występuje przed wygenerowaniem strony potwierdzenia.
Jak naprawić: Przełączyć webhook na wysyłkę przez cron albo przenieść logikę odbiorcy za kolejkę (endpoint przyjmuje POST, zapisuje do kolejki i od razu zwraca 200). Do czasu naprawy zostawić tryb cron i zaakceptować opóźnienie.
Subskrybowanie hooka „pre” (actionOrderStatusUpdate) i wysyłanie z niego statusu do ERP lub WMS. Ten hook odpala się przed zapisem zmiany, więc do systemu docelowego trafia stan sprzed modyfikacji.
Jak wykryć: Porównać status w payloadzie z aktualnym statusem zamówienia w panelu po tej samej zmianie. Rozbieżność przy każdym zdarzeniu oznacza, że użyto hooka sprzed zapisu.
Jak naprawić: Zamienić subskrypcję na actionOrderStatusPostUpdate i ponowić test na zamówieniu testowym. Hooki „pre” zostawić tylko tam, gdzie świadomie chcesz wpłynąć na dane przed zapisem.
Publiczny endpoint bez żadnej weryfikacji źródła. Każdy, kto zna adres, może wysłać POST i wygenerować fałszywe zamówienie lub zmianę statusu w systemie docelowym.
Jak wykryć: Wysłać POST z maszyny spoza serwera sklepu, bez żadnego tokenu — jeśli endpoint przyjmuje żądanie, jest otwarty.
Jak naprawić: Dodać token w nagłówku lub w adresie, ograniczyć ruch po IP serwera sklepu i walidować treść żądania przed zapisem. Samo HTTPS nie jest zabezpieczeniem — szyfruje ruch, ale nie sprawdza nadawcy.
Brak logowania wysyłek i brak ponowień. Jeśli odbiorca odpowie błędem albo będzie chwilowo niedostępny, zdarzenie przepada i nikt się o tym nie dowie — natywna wysyłka nie powtarza próby.
Jak wykryć: Porównać liczbę zamówień w PrestaShop i w systemie docelowym za ten sam dzień. Różnica większa niż zero to brakujące webhooki, nie „chwilowy lag”.
Jak naprawić: Zapisywać każde wywołanie (czas, hook, payload, kod odpowiedzi) po stronie odbiorcy, a brakujące zdarzenia dociągać przez Webservice API. Przy krytycznych procesach dodać własną kolejkę z ponowieniami.
Założenie, że payload zawiera pełne zamówienie z pozycjami, adresem i danymi klienta. W praktyce dostajesz identyfikatory i podstawowy kontekst, a resztę trzeba dociągnąć.
Jak wykryć: Zapisać surowe ciało żądania z prawdziwego zamówienia do pliku i przejrzeć je przed pisaniem parsera.
Jak naprawić: Po odebraniu webhooka dociągnąć brakujące dane przez Webservice API po ID zamówienia. Strukturę payloadu sprawdzić na własnej wersji PrestaShop — różni się między 1.7.1, 8.x i 9.x. Pełną listę metod opisuje dokumentacja dla deweloperów PrestaShop.
Szukanie winy w PrestaShop, gdy webhook nie dociera. W większości przypadków problem jest po stronie odbiorcy: WAF blokuje POST, firewall odrzuca ruch z zewnątrz albo skrypt zwraca 500.
Jak wykryć: Wysłać na ten sam endpoint ręczny POST z serwera sklepu i porównać wynik z żądaniem z zewnątrz. Sprawdzić logi serwera odbiorcy w momencie zmiany statusu zamówienia.
Jak naprawić: Odblokować metodę POST i ruch z IP sklepu, poprawić błąd 500, a dopiero potem wracać do konfiguracji w panelu PrestaShop.
Webhook w PrestaShop to jedna decyzja techniczna i kilka decyzji organizacyjnych. Najważniejsza jest ta o trybie wysyłki: real-time tylko wtedy, gdy opóźnienie powyżej 5 minut realnie kosztuje Cię pieniądze lub prowadzi do błędów w stanach. Druga to wybór hooków — zamiana hooka „pre” na „post” przy statusach zamówień to najczęstsze źródło nieaktualnych danych w ERP. Reszta sprowadza się do logowania wysyłek, testu na zamówieniu od początku do końca i planu odzyskania zdarzeń, które nie dotarły.
Funkcja jest natywna od wersji 1.7.1 i występuje także w 8.x oraz 9.x, ale nazwy zakładek różnią się między wersjami. Jeśli nie widzisz sekcji webhooków, sprawdź uprawnienia swojego konta pracownika i to, czy inny moduł nie nadpisuje wywołania Hook::exec.
Tak. W trybie real-time wysyłka odbywa się w tym samym żądaniu, w którym klient składa zamówienie, więc czas odpowiedzi Twojego endpointu dolicza się do czasu ładowania strony potwierdzenia. Dlatego wymagamy endpointu odpowiadającego w czasie do 2 s, a przy wolniejszym odbiorcy przełączamy wysyłkę na cron.
Od strony odbiorcy, nie od PrestaShop. Wysyłamy ręczny POST z serwera sklepu na ten sam adres i sprawdzamy logi serwera docelowego. W praktyce najczęstsze przyczyny to blokada metody POST, WAF odrzucający ruch z zewnątrz albo błąd 500 w skrypcie odbiorcy.
W praktyce jeden webhook na jedno zdarzenie. Łączenie kilku hooków w jednej subskrypcji utrudnia diagnozę — gdy przestaje działać jedno zdarzenie, nie wiadomo, czy problem dotyczy wysyłki, czy konkretnego hooka. Osobne subskrypcje łatwiej też wyłączyć pojedynczo.
Nie zakładaj tego. Payload zawiera identyfikatory i podstawowy kontekst, a brakujące dane najczęściej trzeba dociągnąć przez Webservice API. Zapisz surowe ciało żądania z prawdziwego zamówienia i przejrzyj je przed napisaniem parsera — struktura różni się między wersjami PrestaShop.
Postaw własny skrypt przyjmujący POST, który zapisuje nagłówki i ciało żądania do pliku. Skieruj na niego webhook, złóż zamówienie testowe i porównaj, co przyszło, z tym, co widzisz w panelu. Dopiero po takim teście podłącz docelowy system.
Nie, to dwie różne role. Webhook informuje o zdarzeniu na bieżąco, ale nie służy do pobierania danych masowo ani do pierwszej synchronizacji katalogu. Przy imporcie kilkudziesięciu tysięcy produktów i przy raportach dobowych wygodniejsze pozostaje API albo jednorazowy import.
Jeśli planujesz podłączenie PrestaShop do ERP, WMS albo narzędzia marketingowego, możemy przejść przez konfigurację razem z Tobą — łącznie z testami i planem awaryjnym. Napisz do nas i opisz, jakie zdarzenia chcesz przesyłać.