Przejdź do treści

Najczęstsze błędy Shoper API i jak je diagnozować

Integracja może zwracać poprawne odpowiedzi, a mimo to gubić produkty lub zamówienia. Najczęstsze problemy nie wynikają z jednego „błędu API”, lecz z autoryzacji, limitów, niepełnej paginacji, złego mapowania identyfikatorów, braku idempotencji i logów, które nie pokazują pełnego kontekstu operacji.

Kod 200 nie znaczy, że dane są poprawne

Odpowiedź może być poprawna składniowo i technicznie, a jednocześnie zapisać wartość spoza słownika, cenę w innym modelu brutto/netto albo zaktualizować niewłaściwy rekord po wcześniejszym błędnym dopasowaniu.

Objaw

Integracja „działa”, ale w sklepie brakuje części produktów, a niektóre zamówienia mają dwa dokumenty w ERP.

Pierwszy test

Znajdź w logu identyfikator partii i porównaj: ile rekordów oczekiwano, ile pobrano, ile było unikalnych i ile retry wykonano.

01

Autoryzacja działa lokalnie, ale wygasa w procesie cyklicznym

Pierwsze wywołanie testowe często przechodzi, a automatyczny proces przestaje działać po czasie. Przyczyną może być wygasły token, błędne odświeżenie, inny klient OAuth, nieprawidłowe uprawnienia albo przechowywanie tokenu w miejscu, którego proces cron nie odczytuje.

  • identyfikator aplikacji bez sekretu
  • data uzyskania i odświeżenia tokenu
  • kod odpowiedzi i nazwa operacji
  • informacja, czy wykonano ponowną autoryzację
Nigdy nie zapisuj pełnego tokenu w logu.
02

Błąd 429 nie jest sygnałem do natychmiastowego ponawiania

Shoper API ogranicza tempo operacji i zwraca 429 Too Many Requests, gdy aplikacja przekroczy dostępne pasmo. Odpowiedź zawiera nagłówki limitu oraz Retry-After. Integracja powinna zwolnić i wykonać retry po wskazanym czasie, zamiast natychmiast wysłać kolejną serię żądań.

Lepszy model to kolejka, kontrolowana współbieżność, odczyt nagłówków limitu i backoff z limitem prób.

Zły wzorzec

Setki żądań równolegle, odpowiedź 429, natychmiastowe ponowienie wszystkich — i utrzymanie blokady przy rosnącej kolejce.

Dobry wzorzec

Kolejka z limitem współbieżności, odczyt Retry-After, backoff z górnym limitem prób i osobna kolejka błędów.

Konkretne limity, nagłówki i parametry sprawdzaj w aktualnej dokumentacji Shopera. Nie traktuj żadnej wartości jako gwarantowanej na zawsze.
03

Paginacja kończy się po pierwszej stronie

Listy zasobów są stronicowane. Jeżeli integracja pobierze pierwszą stronę i uzna ją za komplet, będzie przetwarzać tylko fragment katalogu albo zamówień.

Po zakończeniu zapisuj w logu: oczekiwano X, pobrano Y, unikalnych Z. Trzy różne liczby od razu pokazują, czy problem jest w pętli, czy w duplikatach.

  • liczba wyników i liczba stron
  • bieżąca strona lub offset
  • limit rekordów
  • warunek zakończenia pętli
  • powtórzenia i luki między stronami
04

Payload ma poprawny JSON, ale złą semantykę

Poprawny składniowo JSON może zawierać pole w złym typie, wartość spoza słownika, pusty wymagany identyfikator albo cenę w innym modelu brutto/netto. Sam status HTTP nie wystarcza do oceny sukcesu.

W logu zachowaj hash albo identyfikator payloadu, ale nie zapisuj danych osobowych zamówienia bez potrzeby.

  • wymagane pola i typy danych
  • format daty
  • ceny i waluta
  • ID kategorii i producenta
  • status rekordu
  • długość i kodowanie tekstu
05

ID Shopera jest mylone z SKU lub ID systemu zewnętrznego

API zwykle operuje własnymi identyfikatorami rekordów. Integracja musi przechowywać mapę między ID Shopera, SKU, EAN i ID ERP lub BaseLinkera. Próba użycia SKU w polu oczekującym wewnętrznego ID może zwrócić błąd albo zaktualizować niewłaściwy rekord po wcześniejszym błędnym matchingu.

Po pierwszym utworzeniu produktu zapisz zwrócone ID. Nie wyszukuj produktu od nowa po nazwie przy każdym uruchomieniu. Zasady doboru klucza opisuje poradnik SKU czy EAN w integracjach.

06

Retry tworzy duplikaty

Retry jest potrzebny przy timeoutach i chwilowych błędach, ale operacja tworząca zamówienie lub produkt musi być idempotentna. Jeżeli klient nie otrzymał odpowiedzi, nie oznacza to, że serwer niczego nie zapisał.

  • sprawdź identyfikator operacji
  • wyszukaj istniejący rekord po mapie ID albo stabilnym kluczu
  • zapisuj status started / confirmed / failed / unknown
  • oddziel błąd transportu od błędu biznesowego
  • nie ponawiaj w nieskończoność
07

Proces cron działa, ale nikt nie wie, co zrobił

Log „cron uruchomiony” nie wystarcza. Dodatkowo potrzebny jest alert, gdy proces nie uruchomił się wcale. Brak błędu w logu nie oznacza sukcesu, jeżeli log nie powstał.

  • czas startu i końca
  • typ operacji i zakres danych
  • liczba pobranych, utworzonych, zmienionych, pominiętych i błędnych rekordów
  • kody odpowiedzi i liczba retry
  • identyfikator partii
  • odnośnik do raportu błędów
08

Od objawu do działania

Diagnoza idzie od objawu, przez dowód, do konkretnej zmiany. Bez dowodu w logu każda poprawka jest zgadywaniem.

Objaw, prawdopodobna przyczyna, dowód i działanie
ObjawPrawdopodobna przyczynaDowódDziałanie
proces działa lokalnie, nie działa w cronietoken niewidoczny dla użytkownika cronkod 401 tylko w logu cronwspólny magazyn tokenu i test pod tym samym użytkownikiem
część katalogu nie trafia do sklepupętla paginacji kończy się po pierwszej stronieoczekiwano X, pobrano Y < Xwarunek końca pętli + kontrola liczby unikalnych
integracja zwalnia i się blokujeponawianie natychmiast po 429seria 429 bez przerwy w logukolejka, limit współbieżności, Retry-After
duplikaty zamówień w ERPretry po timeoucie bez idempotencjidwa dokumenty, jeden identyfikator operacjiklucz idempotencji i status operacji przed ponowieniem
zaktualizowano niewłaściwy produktmatching po nazwie zamiast po mapie IDróżne SKU, ten sam rekord docelowyutrwalona mapa source_id → target_id
brak jakichkolwiek zmian, brak błędówproces nie uruchomił siębrak wpisu partii w logualert na ciszę, nie tylko na błąd
09

Środowisko testowe i produkcyjne korzystają z innych danych

Integracja może być poprawna technicznie, ale testowana na kilku ręcznie przygotowanych produktach. Przed produkcją użyj reprezentatywnej próbki.

  • produkty proste i wariantowe
  • brakujące EAN
  • znaki polskie i wiele zdjęć
  • nieistniejąca kategoria
  • cena promocyjna i zerowy stan
  • rekord już istniejący
10

Minimalna procedura diagnostyczna

Kolejność ma znaczenie. Poprawianie kodu przed zebraniem dowodu zwykle kończy się drugą poprawką tego samego miejsca.

  • ustal konkretną operację i przedział czasu
  • znajdź identyfikator partii
  • sprawdź token i kod HTTP
  • porównaj liczbę oczekiwanych oraz pobranych rekordów
  • sprawdź paginację
  • odtwórz jeden błędny rekord
  • porównaj payload przed i po mapowaniu
  • sprawdź mapę ID
  • zweryfikuj retry i duplikaty
  • dopiero potem poprawiaj kod

FAQ: diagnostyka Shoper API

Aplikacja przekroczyła dostępne tempo operacji. Należy respektować nagłówek Retry-After, ograniczyć współbieżność i zastosować kontrolowany backoff. Natychmiastowe ponowienie wszystkich żądań utrzymuje blokadę i powiększa kolejkę.
Najczęściej nie obsługuje wszystkich stron wyników albo błędnie kończy pętlę paginacji. Warto zapisywać w logu trzy liczby: ile rekordów oczekiwano, ile pobrano i ile było unikalnych.
Nie. Serwer mógł zapisać dane, zanim klient utracił odpowiedź. Przed ponowieniem trzeba sprawdzić status operacji albo istnienie rekordu, inaczej retry utworzy duplikat.
Tylko z kontrolą danych osobowych i okresu przechowywania. Zwykle wystarczą identyfikatory, status, kod błędu i zanonimizowany fragment techniczny. Pełnego tokenu autoryzacji nie zapisuje się nigdy.