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.
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:
stock_availables aktualizowany przez PUT jest szybszy i bezpieczniejszy niż eksport i import CSV z backoffice.orders?date_add=[2024-01-01,2024-01-31]) i odsyła numer listu przewozowego do pola shipment w zamówieniu.products i combinations.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.
| Kryterium | Webservice API | Moduł z hookiem |
|---|---|---|
| Gdzie działa kod | W systemie zewnętrznym, łączy się po HTTP | Na serwerze sklepu, wewnątrz PHP |
| Dostęp do danych | Tylko to, co odsłaniają uprawnienia klucza | Pełny: klasy rdzenia, Db, tabele |
| Typowe zastosowanie | ERP, marketplace, kurierzy, BI | Zmiana statusu zamówienia, logika koszyka, wygląd |
| Aktualizacja PrestaShop | Zwykle bez zmian po stronie sklepu | Trzeba testować zgodność z nową wersją |
Cała konfiguracja siedzi w backoffice i zajmuje kilkanaście minut. Kolejność ma znaczenie — klucz tworzony przed kontem pracownika nie zapisze się poprawnie.
/api/ odpowiada.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.products, combinations i stock_availables, do zapisu stanów — PUT na stock_availables. Zamówienia: GET na orders, order_details i customers./api. Najczęstszy objaw problemu to 404 na poprawnym adresie przy sprawnym kluczu.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 odpowiedzi | Co znaczy | Gdzie szukać przyczyny |
|---|---|---|
| 401 | Klucz błędny, wyłączony albo obcięty przy kopiowaniu | Ustawienia klucza w backoffice |
| 403 | Klucz poprawny, brak uprawnienia do zasobu lub metody | Tabela uprawnień klucza |
| 404 | Reguły serwera blokują /api albo zły adres | .htaccess, WAF, konfiguracja hostingu |
| 405 | Metoda nie jest włączona dla zasobu (np. brak PUT) | Uprawnienia klucza |
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ć:
RewriteCond %{HTTPS} off.<Files "webservice"> Require ip 203.0.113.10 </Files> (adres przykładowy z puli dokumentacyjnej). Wtedy sam wyciek klucza nie wystarczy, żeby się dostać.Rotacja, gdy klucz wyciekł albo zmienia się wykonawca integracji:
| Etap | Działanie | Czas | Sygnał, że można iść dalej |
|---|---|---|---|
| 1 | Wygeneruj nowy klucz na tym samym koncie integracji, z identycznymi uprawnieniami | — | Klucz zapisany w systemie, nie w mailu ani w tickecie |
| 2 | Wdróż nowy klucz po stronie integracji, stary zostaw aktywny | 24 h | Zapytania z nowym kluczem zwracają 200 |
| 3 | Przejrzyj logi dostępu do /api i wolumen zapytań | 24 h | Brak połączeń ze starym kluczem |
| 4 | Usuń stary klucz w backoffice i obserwuj ruch | 24 h | Brak nowych 401 w logach |
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ób | Co zawiera | Typowe zastosowanie |
|---|---|---|
| products | Kartoteka produktów: nazwa, cena, opis, kategoria domyślna | Import oferty, masowa aktualizacja cen |
| combinations | Warianty produktu (rozmiar, kolor) wraz z cenami | Synchronizacja wariantów z ERP lub PIM |
| stock_availables | Stany magazynowe powiązane z kombinacją | Stany z magazynu, rezerwy, dostępność |
| categories | Drzewo kategorii | Automatyczne zakładanie kategorii przy imporcie |
| customers | Konta klientów i ich adresy | Integracja z CRM |
| carts | Koszyki | Porzucone koszyki, analityka sprzedaży |
| orders | Zamówienia: status, kwoty, dane klienta | Eksport zamówień do ERP |
| order_details | Pozycje zamówienia: produkt, ilość, cena | Pozycje na fakturze i w WMS |
| carriers | Przewoźnicy i metody dostawy | Mapowanie na systemy kurierskie |
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.
| Parametr | Przykład | Co robi |
|---|---|---|
| filter | ?filter[active]=1 | Dokł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,100 | Offset 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=1 | Dodaje date_add i date_upd do odpowiedzi |
| output_format | ?output_format=JSON | Zmienia format odpowiedzi z XML na JSON |
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.
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 integracji | Co zawiera | Realny nakład |
|---|---|---|
| Read-only | pobieranie stanów lub zamówień w jedną stronę, bez zapisu do sklepu | 20–40 h |
| Dwukierunkowa z mapowaniem | SKU ↔ id_product, obsługa wariantów, historia operacji, retry i idempotencja | 80–200 h |
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.
Authorization: Basic ..., czy klucz jest zakodowany base64 w formacie klucz: (z dwukropkiem i pustym hasłem) i czy przy kopiowaniu nie został spacja na końcu./api/order zamiast /api/orders) albo przekierowanie HTTP → HTTPS, którego klient nie obsługuje. Adres bazowy i certyfikat sprawdzasz raz, na starcie.id_lang przy opisie) lub wartość spoza dozwolonego zakresu.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.
| Kod | Najczęstsza przyczyna | Pierwszy test |
|---|---|---|
| 401 | brak nagłówka Authorization lub brak base64 | wyślij ten sam request z kluczem z backoffice, bez spacji |
| 403 | brak uprawnienia do metody lub zasobu, blokada IP | sprawdź kolumny GET/POST/PUT/DELETE i listę dozwolonych IP |
| 404 | webservice wyłączony, literówka w zasobie, redirect na HTTPS | wywołaj /api/orders ręcznie i sprawdź adres bazowy |
| 500 | błąd XML lub brak wymaganego pola | porównaj payload z przykładem z dokumentacji PrestaShop |
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.
| Obszar | Konkretne działanie | Dlaczego to ważne |
|---|---|---|
| Tempo | kolejka + backoff 2/4/8 s, maks. 3–4 próby | brak rate limitingu po stronie PrestaShop |
| Duże katalogi | stronnicowanie po 100–200 rekordów zamiast ?limit=0 | ochrona pamięci PHP i czasu odpowiedzi |
| Baza | indeksy na polach filtrowanych (reference, date_upd) | brak indeksu = pełny skan tabeli przy każdej synchronizacji |
| Monitoring | log kodów, czas odpowiedzi, alert na pierwszy 5xx | awaria widoczna od razu, a nie po zgłoszeniu klienta |
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.
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.
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.
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.
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.
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.
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.
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.
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ć.