Błędy i rozwiązywanie problemów
Na tej stronie rozpoznasz błąd po kodzie i znajdziesz, co z nim zrobić.
Kody błędów SDK
Błędy rzucane przez SDK, result.error z tokenize() i zdarzenie error niosą stabilny code.
Komunikaty są dla ludzi i mogą się zmieniać. Zawsze rozgałęziaj logikę po kodzie.
Rzucane błędy są instancjami SdkError (name === 'SdkError', code, message, opcjonalne
cause). Ponieważ SDK może być wczytane na stronie dwukrotnie, sprawdzaj error.code (albo
isSdkError(error) przy module ES), a nie instanceof.
| Kod | Źródło | Znaczenie |
|---|---|---|
INVALID_CONFIG | konstruktor, create(), mount(), metody portfeli | Niepoprawne opcje: zły pointId, niewspierany typ elementu, element już zamontowany, brak danych płatności. |
INSECURE_CONTEXT | elements() | Strona nie jest serwowana po HTTPS. |
CONTAINER_NOT_FOUND | mount(), mount*Pay() | Selektor nie pasuje do żadnego elementu. |
NOT_MOUNTED | tokenize() | Element karty nie jest zamontowany (albo został odmontowany w trakcie tokenizacji). |
IN_PROGRESS | tokenize() | Inna tokenizacja jest już w toku. |
INVALID_CARD | tokenize() | Dane karty niekompletne lub niepoprawne. Pole pokazuje, które. |
TIMEOUT | tokenize(), portfele | Pole karty albo API Paymentic nie odpowiedziało w czasie. |
API_ERROR | tokenize(), portfele | Paymentic odrzucił zapytanie. Komunikat wyjaśnia przyczynę. |
NETWORK_ERROR | portfele | Błąd sieci albo nie udało się wczytać skryptu portfela. |
WALLET_UNAVAILABLE | request*Pay() | Portfel niedostępny na tym urządzeniu lub dla tego punktu. |
WALLET_FAILED | portfele | Arkusz portfela zgłosił niepowodzenie. |
MERCHANT_VALIDATION_FAILED | Apple Pay | Apple odrzucił sesję sprzedawcy. Zwykle niezweryfikowana domena. |
Kody walidacji pól (INVALID_NUMBER, INVALID_EXPIRY, EXPIRED_CARD, INVALID_CVC) opisuje
strona Karta (hosted fields).
Rozwiązywanie problemów
| Objaw | Prawdopodobna przyczyna | Rozwiązanie |
|---|---|---|
elements() rzuca INSECURE_CONTEXT | Strona serwowana po http:// | Serwuj po HTTPS (albo użyj localhost w developmencie). |
Pole karty nie pojawia się, brak zdarzenia ready | Kontener ukryty przez display: none w chwili montowania albo CSP blokuje frame-src | Montuj w widocznym kontenerze; dopuść https://cards.paymentic.com w frame-src. |
tokenize() zwraca TIMEOUT | Iframe zablokowany (CSP, rozszerzenie) albo sieć zawiesiła się | Sprawdź konsolę przeglądarki oraz frame-src / connect-src. |
tokenize() zwraca API_ERROR | Punkt źle skonfigurowany, zapytanie ograniczone (throttling) albo awaria backendu | Przeczytaj error.message; ponów raz; skontaktuj się z supportem, podając PaymenticCard.VERSION i czas zdarzenia. |
Przycisk portfela nie pokazuje się, reason: NOT_CONFIGURED | Portfel nie jest włączony dla punktu | Poproś Paymentic o włączenie Google Pay / Apple Pay dla punktu. |
reason: DEVICE_UNSUPPORTED na urządzeniu, które ma portfel | Google Pay: brak karty spełniającej metody uwierzytelnienia punktu; Apple Pay: strona http:// albo niezweryfikowana domena | Testuj z odpowiednią kartą; zweryfikuj domenę. |
Arkusz Apple Pay otwiera się i zamyka z MERCHANT_VALIDATION_FAILED | Brak lub niezweryfikowany plik powiązania domeny dla tej nazwy hosta | Hostuj plik pod /.well-known/… na każdej domenie i subdomenie; potwierdź z Paymentic. |
| Arkusz Apple Pay nie otwiera się z własnego przycisku | Zapytanie sieciowe w handlerze kliknięcia zużyło gest użytkownika | Wywołaj isApplePayAvailable() przy wczytaniu strony; handler kliknięcia trzymaj synchroniczny. |
| Payment API odrzuca token | Token starszy niż 60 s, już wykorzystany albo wysłany dla innego punktu | Tokenizuj ponownie; wykorzystaj natychmiast; użyj tego samego pointId po obu stronach. |
| Pamięć rośnie w aplikacji SPA | Instancja tworzona ponownie bez destroy() | Wywołaj destroy() w hooku odmontowania. |
Kontakt z supportem
Pisząc do supportu, podaj PaymenticCard.VERSION, otrzymany code, Point ID i przybliżony czas
zdarzenia.