PrestaShop API (webservice) to wbudowany mechanizm, który pozwala innym systemom czytać i zapisywać dane sklepu bez dotykania bazy danych i bez pisania modułu. Włączysz go w backoffice w kilka minut, ale prawdziwa praca zaczyna się później: uprawnienia, bezpieczeństwo klucza, limity i filtry. Ten tekst zbiera stronę organizacyjną wdrożenia — co ustalić przed pierwszym zapytaniem, jakie błędy popełnia się najczęściej i jak ich uniknąć. Szczegóły techniczne endpointów, filtrów i gotowy kod znajdziesz w pozostałych sekcjach artykułu.

Czym jest PrestaShop API i kiedy naprawdę Ci się przyda

PrestaShop webservice to warstwa HTTP wystawiona przez rdzeń sklepu. Zasoby (products, orders, customers, stock_availables, combinations) mają własne endpointy i obsługują metody REST-owe: GET, POST, PUT, PATCH, DELETE. Domyślnie odpowiedź wraca w XML — parametr output_format=JSON przełącza format. To inny mechanizm niż moduły i hooki: moduł działa wewnątrz PHP sklepu, sięga do klas Cart, Order, Db i reaguje na zdarzenia (actionValidateOrder, actionOrderStatusPostUpdate). API działa z zewnątrz, po HTTP, nie wymaga wgrywania kodu na serwer sklepu i nie dotyka bazy bezpośrednio. Pełną listę zasobów i metod znajdziesz w dokumentacji dla deweloperów PrestaShop.

Cztery scenariusze, w których API zarabia na siebie:

Kiedy API to overkill: jeśli potrzebujesz wyłącznie zmiany statusu zamówienia po opłaceniu, wystarczy hook actionOrderStatusPostUpdate w module — kilkadziesiąt linii kodu, zero dodatkowego HTTP i zero kluczy do pilnowania. Tak samo przy zmianie wyglądu karty produktu czy liczeniu własnego pola w koszyku. Webservice ma sens wtedy, gdy dane muszą wyjść poza sklep albo wejść do niego z systemu, którego nie da się uruchomić na tym samym serwerze. Jeśli sklep dopiero startuje, kolejność prac opisujemy w sekcji PrestaShop, a samo planowanie integracji — na stronie o organizacji wdrożenia PrestaShop.

KryteriumWebservice APIModuł z hookiem
Gdzie działa kodW systemie zewnętrznym, łączy się po HTTPNa serwerze sklepu, wewnątrz PHP
Dostęp do danychTylko to, co odsłaniają uprawnienia kluczaPełny: klasy rdzenia, Db, tabele
Typowe zastosowanieERP, marketplace, kurierzy, BIZmiana statusu zamówienia, logika koszyka, wygląd
Aktualizacja PrestaShopZwykle bez zmian po stronie sklepuTrzeba testować zgodność z nową wersją

Jak włączyć webservice w PrestaShop w 5 krokach

Cała konfiguracja siedzi w backoffice i zajmuje kilkanaście minut. Kolejność ma znaczenie — klucz tworzony przed kontem pracownika nie zapisze się poprawnie.

  1. Włącz usługę sieciową. Zaawansowane parametry → Webservice → suwak „Włącz usługę sieciową” ustaw na Tak i zapisz. Od tego momentu /api/ odpowiada.
  2. Załóż osobne konto. Zaawansowane parametry → Zespół → Pracownicy → Dodaj. Nazwa: integracja-erp. Profil: Minimalny albo własny, z dostępem wyłącznie do webservice. Nie używaj konta administratora — klucz admina sięga wszystkiego, a po wycieku oznacza pełne przejęcie sklepu.
  3. Wygeneruj klucz i nadaj uprawnienia. Zaawansowane parametry → Webservice → Dodaj nowy klucz, wybierz konto integracji i zapisz. PrestaShop wygeneruje klucz. W tabeli uprawnień zaznaczaj tylko to, czego integracja naprawdę używa: ERP do odczytu potrzebuje GET na products, combinations i stock_availables, do zapisu stanów — PUT na stock_availables. Zamówienia: GET na orders, order_details i customers.
  4. Sprawdź .htaccess i przyjazne URL. Musi działać mod_rewrite, a reguły hostingu (WAF, blokady katalogów) nie mogą zamykać katalogu /api. Najczęstszy objaw problemu to 404 na poprawnym adresie przy sprawnym kluczu.
  5. Test „czy żyje”. W przeglądarce wejdź na https://twojsklep.pl/api/ — pojawi się okno logowania, wpisz klucz i zostaw hasło puste. Zobaczysz listing zasobów w XML. W terminalu to samo sprawdzisz przez curl -u "KLUCZ:" https://twojsklep.pl/api/.

Po teście zapisz konfigurację w dokumentacji projektu: adres endpointu, nazwę konta integracji, zakres uprawnień i osobę odpowiedzialną za klucz. Po pół roku nikt tego nie odtworzy z pamięci. Przy kilku systemach i niestandardowych uprawnieniach lepiej potraktować to jak projekt — tak jak opisujemy to przy organizacji i koszcie wdrożenia PrestaShop.

Kod odpowiedziCo znaczyGdzie szukać przyczyny
401Klucz błędny, wyłączony albo obcięty przy kopiowaniuUstawienia klucza w backoffice
403Klucz poprawny, brak uprawnienia do zasobu lub metodyTabela uprawnień klucza
404Reguły serwera blokują /api albo zły adres.htaccess, WAF, konfiguracja hostingu
405Metoda nie jest włączona dla zasobu (np. brak PUT)Uprawnienia klucza

Autoryzacja kluczem API — Basic Auth, HTTPS i rotacja

PrestaShop webservice uwierzytelnia przez HTTP Basic Auth. Klucz jest loginem, hasło jest puste. Nagłówek wygląda tak: Authorization: Basic base64(klucz:) — po kluczu musi zostać dwukropek, inaczej base64 zakoduje sam klucz i serwer zwróci 401. W curl wystarczy -u "KLUCZ:"; dwukropek na końcu wymusza puste hasło i pomija pytanie o nie. Mechanizm i kody statusu opisuje dokumentacja HTTP w MDN Web Docs.

Trzy zasady, których nie warto łamać:

Rotacja, gdy klucz wyciekł albo zmienia się wykonawca integracji:

EtapDziałanieCzasSygnał, że można iść dalej
1Wygeneruj nowy klucz na tym samym koncie integracji, z identycznymi uprawnieniamiKlucz zapisany w systemie, nie w mailu ani w tickecie
2Wdróż nowy klucz po stronie integracji, stary zostaw aktywny24 hZapytania z nowym kluczem zwracają 200
3Przejrzyj logi dostępu do /api i wolumen zapytań24 hBrak połączeń ze starym kluczem
4Usuń stary klucz w backoffice i obserwuj ruch24 hBrak nowych 401 w logach

Struktura zasobów i endpoints — jak czytać /api

Każda instalacja PrestaShop wystawia webservice pod tym samym prefiksem: https://twojsklep.pl/api/. Wpisanie tego adresu w przeglądarkę — po podaniu klucza w Basic Auth — zwraca listę zasobów dostępnych w Twojej wersji. To najszybszy test, czy klucz w ogóle działa i co można przez niego zrobić, bez zaglądania do dokumentacji.

Zasoby, które realnie pojawiają się w integracjach:

Adresy działają według schematu /api/{zasob} albo /api/{zasob}/{id}. /api/products to lista produktów, /api/orders/123 — konkretne zamówienie, /api/stock_availables — stany magazynowe. Ten ostatni zasób bywa zaskoczeniem: stanu nie zmienisz, edytując pole w produkcie, bo siedzi on w osobnym zasobie powiązanym z kombinacją. To najczęstsza przyczyna sytuacji „synchronizacja przeszła, a stany się nie zgadzają”.

Domyślnie wszystko wraca w XML. Dodanie ?output_format=JSON zmienia format odpowiedzi i upraszcza pracę z JavaScriptem oraz większością bibliotek HTTP. Przed pierwszym POST-em warto pobrać szkielet obiektu: /api/products?schema=blank zwraca XML z wszystkimi polami, które można wysłać — zamiast zgadywać nazwy, kopiujesz strukturę i uzupełniasz wartości.

PrestaShop nie wstawia numeru wersji do adresu API — endpoint to zawsze /api/ plus nazwa zasobu. O tym, którą wersję obsługujesz, decyduje instalacja; sprawdzisz ją w backoffice w Parametry zaawansowane → Informacje. Różnice między 1.7 a 8.x w zachowaniu webservice'u są realne, więc wersję zapisz w dokumentacji projektu. Przy planowaniu wdrożenia PrestaShop to jedna z pierwszych rzeczy do ustalenia. Listę zasobów i ich pól weryfikuj w dokumentacji deweloperskiej PrestaShop — jest aktualizowana razem z kolejnymi wydaniami.

ZasóbCo zawieraTypowe zastosowanie
productsKartoteka produktów: nazwa, cena, opis, kategoria domyślnaImport oferty, masowa aktualizacja cen
combinationsWarianty produktu (rozmiar, kolor) wraz z cenamiSynchronizacja wariantów z ERP lub PIM
stock_availablesStany magazynowe powiązane z kombinacjąStany z magazynu, rezerwy, dostępność
categoriesDrzewo kategoriiAutomatyczne zakładanie kategorii przy imporcie
customersKonta klientów i ich adresyIntegracja z CRM
cartsKoszykiPorzucone koszyki, analityka sprzedaży
ordersZamówienia: status, kwoty, dane klientaEksport zamówień do ERP
order_detailsPozycje zamówienia: produkt, ilość, cenaPozycje na fakturze i w WMS
carriersPrzewoźnicy i metody dostawyMapowanie na systemy kurierskie

Filtry, sortowanie i paginacja — konkretne parametry

Najczęstszy błąd przy pierwszej integracji: pobranie /api/products i założenie, że odpowiedź zawiera całą kartotekę. Nie zawiera. Domyślny limit to 50 rekordów i PrestaShop nie sygnalizuje tego żadnym komunikatem — po prostu ucina listę. Sklep z 4000 SKU „synchronizuje się” wtedy tylko częściowo i nikt nie potrafi powiedzieć dlaczego.

Paginację ustawiaj jawnie: ?limit=0,100 oznacza „od rekordu zerowego, sto sztuk”, kolejna porcja to ?limit=100,100. Przy pierwszym uruchomieniu zrób test kontrolny — pobierz listę bez limitu i z ?limit=0,100, a potem porównaj liczbę zwróconych identyfikatorów. Jeśli są równe, kartoteka jest mniejsza niż 100 pozycji.

Filtrowanie zawęża wynik po stronie serwera, co przy dużych sklepach skraca odpowiedź z sekund do milisekund. ?filter[active]=1 to dokładne dopasowanie. Alternatywę zapisujesz pionową kreską w nawiasach, np. ?filter[price]=[100|200], a zakres przecinkiem, np. ?filter[date_upd]=[2025-01-01,2025-01-31]. Składnia operatorów różni się między wydaniami — potwierdź ją dla swojej wersji przed wdrożeniem.

Sortowanie: ?sort=[id_DESC]. Odchudzanie odpowiedzi: ?display=[id,name,price] — zamiast kilkudziesięciu pól dostajesz trzy, a transfer spada nawet o 90%.

Do synchronizacji inkrementalnej użyj ?date=1, który dokłada do odpowiedzi znaczniki date_add i date_upd, i połącz go z filtrem po dacie modyfikacji. Zamiast ciągnąć 4000 rekordów co godzinę, pobierasz kilkadziesiąt zmienionych od ostatniego przebiegu. To różnica między dwusekundowym a czterominutowym cyklem — szczegóły znajdziesz w opisie organizacji wdrożenia i migracji PrestaShop.

ParametrPrzykładCo robi
filter?filter[active]=1Dokładne dopasowanie wartości
filter — alternatywa?filter[price]=[100|200]Cena równa 100 lub 200
filter — zakres?filter[date_upd]=[2025-01-01,2025-01-31]Zakres od–do, podstawa synchronizacji przyrostowej
limit?limit=0,100Offset i liczba rekordów; brak parametru oznacza zwykle tylko 50
sort?sort=[id_DESC]Kolejność wyników, kierunek przez _ASC lub _DESC
display?display=[id,name,price]Zwraca wyłącznie wskazane pola
date?date=1Dodaje date_add i date_upd do odpowiedzi
output_format?output_format=JSONZmienia format odpowiedzi z XML na JSON

Przykłady: curl i PHP krok po kroku

Zacznij od GET-a, żeby sprawdzić klucz i zobaczyć realną strukturę danych:

curl -s -u "TWOJ_KLUCZ:" \
  "https://twojsklep.pl/api/products?limit=0,10&display=[id,name,price]&output_format=JSON"

Dwukropek po kluczu jest istotny — w Basic Auth klucz pełni rolę loginu, a hasło pozostaje puste. Bez niego curl zapyta o hasło interaktywnie i skrypt zawiesi się w zadaniu cron.

Tworzenie produktu wymaga poprawnego XML. Minimalny zestaw to nazwa, link_rewrite, cena, kategoria domyślna i flaga aktywności:

curl -s -u "TWOJ_KLUCZ:" -X POST \
  -H "Content-Type: application/xml" \
  --data-binary @produkt.xml \
  "https://twojsklep.pl/api/products"

Zawartość produkt.xml najprościej zbudować, pobierając najpierw szkielet przez /api/products?schema=blank i wypełniając go. Pola językowe (np. name) wymagają zagnieżdżonego <language id="1"> — pominięcie tego elementu kończy się błędem 400 bez czytelnego komunikatu.

Najdroższa pomyłka przy aktualizacjach: PUT vs PATCH. PUT wysyła pełny obiekt — pola, których nie umieścisz w XML, zostaną wyczyszczone. Jeśli chcesz zmienić samą cenę, użyj PATCH: wysyłasz tylko identyfikator i pole do zmiany, reszta zostaje nietknięta. W integracjach magazynowych PUT na produkcie regularnie kasuje opisy i zdjęcia.

Zamiast pisać klienta od zera, wykorzystaj PSWebServiceLibrary.php — plik dołączony do instalacji w katalogu /webservice/. Obsługuje uwierzytelnianie, parsowanie XML i zwraca kod HTTP w wyjątku:

require_once __DIR__ . '/PSWebServiceLibrary.php';
try {
    $ws = new PrestaShopWebservice('https://twojsklep.pl', 'TWOJ_KLUCZ', false);
    $xml = $ws->get(['resource' => 'products', 'limit' => '0,10', 'display' => '[id,name,price]']);
} catch (PrestaShopWebserviceException $e) {
    // kod HTTP: 401 zły klucz, 403 brak uprawnień, 404 zły zasób, 500 błąd serwera
    error_log('API ' . $e->getCode() . ': ' . $e->getMessage());
}

Kody 4xx oznaczają problem po Twojej stronie (klucz, uprawnienia, adres), 5xx — po stronie sklepu. Rozróżnienie pozwala od razu zdecydować, czy ponawiać zapytanie. Semantykę kodów opisuje dokumentacja HTTP w MDN. Przy szerszym projekcie warto zaplanować to razem z zakresem i kosztem wdrożenia PrestaShop, bo warstwa integracyjna bywa większa niż sam sklep.

Integracje: ERP, płatności, kurierzy, marketplace

Integracja z ERP działa w dwóch kierunkach i to ustalasz przed pierwszym zapytaniem. Stany magazynowe płyną z ERP do sklepu — w PrestaShop to zasób stock_availables, aktualizowany w pętli co 5–15 minut w godzinach pracy firmy. Zamówienia i dane do faktury płyną w drugą stronę: orders plus order_details z PrestaShop do systemu księgowego. Subiekt GT/nexo i Comarch Optima nie znają id_product — pracują na symbolu towaru. Bez tabeli mapowania SKU ↔ id_product (oraz ↔ id_product_attribute dla wariantów) pierwszy import rozjedzie stany na koszulce w rozmiarze L.

Kurierzy: InPost, DPD i DHL generują etykietę przez własne API, ale punktem startu jest zamówienie w PrestaShop. Typowy przepływ: nowe zamówienie → walidacja adresu i wagi → wywołanie API kuriera → zapis numeru przesyłki w order_carrier.tracking_number → wydruk PDF z panelu. Statusy przesyłki wracają webhookiem, jeśli kurier go udostępnia, albo pollem co 30–60 minut. Bez tego klient dowie się o doręczeniu szybciej niż Twój panel obsługi zamówień.

Idempotencja to warunek, o którym wszyscy pamiętają po pierwszym incydencie. Retry po timeoucie nie może drugi raz utworzyć faktury ani zamówienia. Klucz operacji: numer zamówienia plus typ operacji, np. ORDER-10458-INVOICE, zapisany w bazie po stronie integracji. Przy powtórzeniu system widzi istniejący klucz i kończy pracę bez duplikatu.

Zakres integracjiCo zawieraRealny nakład
Read-onlypobieranie stanów lub zamówień w jedną stronę, bez zapisu do sklepu20–40 h
Dwukierunkowa z mapowaniemSKU ↔ id_product, obsługa wariantów, historia operacji, retry i idempotencja80–200 h

Typowe błędy 401/403/404/500 i jak je zdiagnozować

Zanim zaczniesz szukać w kodzie, spójrz na kod odpowiedzi HTTP — on wskazuje warstwę problemu. Kolejność diagnozy jest zawsze ta sama i zajmuje maksymalnie 5 minut.

Gdzie szukać szczegółów: Zaawansowane parametry → Logi, gdzie trafiają wywołania webservice; chwilowe włączenie _PS_MODE_DEV_ w config/defines.inc.php na kopii sklepu; Postman z zapisanym środowiskiem do pojedynczych testów. Same kody odpowiedzi i ich znaczenie opisuje dokumentacja HTTP.

KodNajczęstsza przyczynaPierwszy test
401brak nagłówka Authorization lub brak base64wyślij ten sam request z kluczem z backoffice, bez spacji
403brak uprawnienia do metody lub zasobu, blokada IPsprawdź kolumny GET/POST/PUT/DELETE i listę dozwolonych IP
404webservice wyłączony, literówka w zasobie, redirect na HTTPSwywołaj /api/orders ręcznie i sprawdź adres bazowy
500błąd XML lub brak wymaganego polaporównaj payload z przykładem z dokumentacji PrestaShop

Bezpieczeństwo, wydajność i utrzymanie integracji

PrestaShop webservice nie ma wbudowanego rate limitingu. Możesz wysłać tysiąc zapytań w minutę i nikt Cię nie zatrzyma — dopóki baza nie zacznie się dusić. Ograniczenie tempa musi więc siedzieć po Twojej stronie: kolejka zadań (np. tabela zadań z timeoutem) i backoff wykładniczy przy błędach, czyli pierwsza próba, potem 2 s, 4 s, 8 s, maksymalnie 3–4 próby. Bez tego jedna awaria po stronie ERP zamienia się w pętlę dobijającą sklep.

Ostrożnie z ?limit=0. Na katalogu 5 tys. produktów to jedno zapytanie zwracające całą tabelę — pamięć procesu PHP kończy się szybciej, niż myślisz. Pobieraj stronami po 100–200 rekordów (?limit=100&page=1) i filtruj po date_upd z ostatniej synchronizacji. Pola używane w filtrach, np. reference czy date_upd, powinny mieć indeks w bazie — inaczej każde zapytanie kończy się pełnym skanem tabeli.

Monitoring: loguj kod odpowiedzi, czas i endpoint każdego wywołania do pliku lub tabeli. Trzy metryki wystarczą na start: odsetek 5xx, średni czas odpowiedzi i liczba rekordów w kolejce. Alert ustaw na pierwszy 5xx, nie na dziesiąty — po dziesiątym problem trwa już godzinę.

Przed pierwszym dużym importem zrób mysqldump bazy i przećwicz cały przepływ na kopii sklepu. Kolejność: staging → jeden produkt → 100 produktów → całość. Tak wygląda organizacja projektu wdrożenia PrestaShop, którego nie trzeba potem ratować w nocy.

ObszarKonkretne działanieDlaczego to ważne
Tempokolejka + backoff 2/4/8 s, maks. 3–4 próbybrak rate limitingu po stronie PrestaShop
Duże katalogistronnicowanie po 100–200 rekordów zamiast ?limit=0ochrona pamięci PHP i czasu odpowiedzi
Bazaindeksy na polach filtrowanych (reference, date_upd)brak indeksu = pełny skan tabeli przy każdej synchronizacji
Monitoringlog kodów, czas odpowiedzi, alert na pierwszy 5xxawaria widoczna od razu, a nie po zgłoszeniu klienta

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

Klucz API utworzony na koncie administratora sklepu.

Jak wykryć: W backoffice: Zaawansowane parametry → Webservice sprawdź, do jakiego konta przypisany jest klucz. Jeśli w kolumnie konta widzisz swoje konto admina, masz problem.

Jak naprawić: Załóż osobne konto pracownika (np. integracja-erp) bez dostępu do backoffice i wygeneruj klucz właśnie dla niego. Klucz admina daje dostęp do wszystkiego, także do danych, których integracja nigdy nie potrzebuje.

Nadanie kluczowi wszystkich zasobów i wszystkich metod GET/POST/PUT/PATCH/DELETE „na wszelki wypadek”.

Jak wykryć: Przejrzyj listę uprawnień klucza. Jeśli widzisz zaznaczone zasoby, których integracja nie używa (np. employees, customer_threads), uprawnienia są za szerokie.

Jak naprawić: Ustaw uprawnienia per zasób i per metoda. Integracja wysyłkowa potrzebuje zwykle GET na orders i order_details — nie potrzebuje DELETE na products. Zakres minimalny to nie biurokracja, to ograniczenie skutków wycieku klucza.

Komunikacja z API po HTTP albo bez wymuszonego HTTPS.

Jak wykryć: Wykonaj zapytanie na http:// zamiast https:// i sprawdź, czy nastąpi przekierowanie. Zajrzyj też do .htaccess i konfiguracji serwera pod kątem reguł przekierowujących.

Jak naprawić: Wymuś HTTPS na całej domenie (przekierowanie 301), a dla ścieżki /api dodatkowo rozważ whitelistę adresów IP integracji w .htaccess. Klucz przesłany po HTTP trafia do logów serwerów pośredniczących w postaci jawnej.

Traktowanie domyślnego limitu wyników jako pełnej listy.

Jak wykryć: Porównaj liczbę rekordów zwróconą przez /api/products z liczbą produktów widoczną w backoffice lub policzoną zapytaniem SQL. Rozbieżność oznacza ucięcie listy.

Jak naprawić: Dodawaj jawnie ?limit=0,100 (albo inny zakres) i iteruj po stronach. Przy dużych katalogach paginacja po stronach jest bezpieczniejsza niż jedno zapytanie z limit=0.

Używanie PUT tam, gdzie powinno być PATCH.

Jak wykryć: Po aktualizacji produktu lub zamówienia sprawdź w backoffice, czy nie zniknęły pola, których nie wysyłałeś — opis, cena, kombinacje, stany magazynowe.

Jak naprawić: PUT to pełna aktualizacja obiektu: pola nieobecne w XML mogą zostać wyczyszczone. Jeśli zmieniasz jedno pole (np. stan magazynowy), użyj PATCH albo wyślij kompletny obiekt zgodny ze schematem.

Klucz API wpisany na sztywno w repozytorium kodu albo w JavaScript na froncie sklepu.

Jak wykryć: Zrób przeszukanie repozytorium pod kątem długich ciągów znaków i frazy „Authorization”. Sprawdź też w DevTools, czy zapytanie do /api nie wychodzi z przeglądarki użytkownika.

Jak naprawić: Trzymaj klucz w zmiennych środowiskowych lub w pliku konfiguracyjnym poza repozytorium. Każde zapytanie do API musi wychodzić z serwera integracji, nigdy z przeglądarki klienta.

Lista kontrolna do odklikania

Podsumowanie

Samo włączenie webservice w PrestaShop zajmuje kilka minut i to nie jest etap, na którym projekty się przewracają. Problemy pojawiają się na poziomie organizacji: klucz na koncie admina, uprawnienia „wszystko dla wszystkich”, brak HTTPS, ignorowanie domyślnego limitu wyników i wysyłanie PUT tam, gdzie wystarczyłby PATCH. Ustal te sześć rzeczy przed pierwszym zapytaniem, a integracja z ERP, kurierem czy marketplace przestanie być źródłem niespodzianek. Jeśli wdrażasz PrestaShop od zera, zestaw te reguły z organizacją projektu — zobacz, jak podchodzimy do tego w wdrożeniach i migracjach PrestaShop.

Najczęściej zadawane pytania

Czy PrestaShop API jest dostępne w każdej wersji sklepu?

Webservice jest częścią standardowej dystrybucji PrestaShop od dawna i nie wymaga dokupowania modułu. Różnice dotyczą szczegółów: dostępnych zasobów, obsługiwanych metod i parametrów filtrów. Dokumentacja deweloperska PrestaShop opisuje to per wersja, więc przed wdrożeniem sprawdź rozdział dla swojego wydania: devdocs.prestashop-project.org.

Czy wystarczy włączyć webservice w backoffice, żeby integracja działała?

Nie. Włączenie usługi sieciowej to dopiero pierwszy krok. Konieczne jest jeszcze utworzenie klucza dla osobnego konta, nadanie mu uprawnień per zasób i metoda oraz sprawdzenie, czy reguły .htaccess i tryb przyjaznych URL nie blokują ścieżki /api. Bez testu „czy żyje” na /api/ nie wiesz, czy w ogóle masz działający endpoint.

Jak bezpiecznie przekazać komuś dostęp do API sklepu?

Nigdy nie przekazuj klucza konta administratora. Utwórz konto integracyjne, wygeneruj dla niego klucz z minimalnym zakresem uprawnień i przekaż go kanałem, który nie zostawia śladu w mailach z historią. Wymuś HTTPS i — jeśli partner ma stały adres IP — dodaj whitelistę w .htaccess.

Co zrobić, gdy klucz API wycieknie?

Nie czekaj na analizę przyczyn. Wygeneruj nowy klucz, uruchom integrację na obu kluczach równolegle na 24 godziny, potem wygaś stary i przejrzyj logi dostępu do /api z okresu, w którym stary klucz mógł być aktywny. Jeśli klucz miał szerokie uprawnienia, sprawdź dodatkowo, czy nie powstały nieoczekiwane obiekty — produkty, zamówienia, klienci.

Dlaczego z API wraca mniej produktów, niż mam w sklepie?

Najczęstsza przyczyna to domyślny limit wyników, zwykle 50 rekordów na odpowiedź, stosowany bez żadnego komunikatu zwrotnego. Dodaj jawnie parametr ?limit i iteruj po kolejnych zakresach. Drugie typowe źródło to filtry pozostawione w kodzie z wcześniejszych testów, np. ?filter[active]=1.

Kiedy lepiej napisać własny hook zamiast integrować się przez API?

Gdy logika dotyczy jednego zdarzenia wewnątrz sklepu i nie wychodzi poza PrestaShop — na przykład zmiana statusu zamówienia, dopisanie komentarza czy wysłanie maila po rejestracji. API ma sens dopiero wtedy, gdy dane muszą przejść między systemami: ERP, kurierem, marketplace albo hurtownią danych.

Czy PrestaShop API nadaje się do synchronizacji z ERP?

Tak, przy dwóch warunkach: synchronizacja musi być przyrostowa (po dacie modyfikacji, a nie pełnym zrzutem całości) i musi mieć ustaloną kolejność zapisu — najpierw produkt i stan magazynowy, potem zamówienie. Pełny zrzut całego katalogu co godzinę to najprostszy sposób na zdławienie własnego sklepu.

Jeśli planujesz integrację sklepu z ERP, systemem kurierskim albo marketplace i nie chcesz zaczynać od błędów, które już widzieliśmy u innych — opisz nam swój przypadek. Zajrzyj na naszą stronę o PrestaShop albo napisz wprost, co chcesz połączyć.

Źródła i materiały