Skonfiguruj Content Security Policy
Na tej stronie dopuścisz w nagłówku Content-Security-Policy domeny, których potrzebuje Card SDK,
i sprawdzisz politykę bez ryzyka zablokowania checkoutu.
Jeśli Twoja strona nie wysyła nagłówka CSP, SDK działa bez dodatkowej konfiguracji i możesz
pominąć tę stronę. Jeśli wysyła, brak wpisów z tej strony objawia się pustym polem karty,
brakiem zdarzenia ready albo powodem FRAME_LOAD_FAILED przy portfelach.
Inwentarz zasobów zewnętrznych
Card SDK nie ma zależności npm ani własnych fontów. Wszystko, co dociąga na Twoją stronę,
pochodzi z czterech hostów. W sandboxie hosty Paymentic mają wariant z członem sandbox:
cards.sandbox.paymentic.com i challenge.sandbox.paymentic.com.
| Host | script-src | frame-src | connect-src |
|---|---|---|---|
cards.paymentic.com | tak | tak | tak |
challenge.paymentic.com | tak | ||
applepay.cdn-apple.com | tak | ||
pay.google.com | tak | tak |
Co każdy host ładuje i kiedy:
cards.paymentic.com: skrypt SDK (/sdk/v1/paymentic-card.jslub.mjs), iframe hosted fields (/card-fields/…), iframe natywnego przycisku Google Pay oraz zapytania tokenizacji i pobrania konfiguracji portfeli. Potrzebny zawsze.challenge.paymentic.com: strona challenge'u 3-D Secure znextAction.url, na której klient potwierdza płatność u banku wydawcy (zob. Zrealizuj płatność tokenem). Otwierana tylko wtedy, gdy bank wymaga challenge'u; w sandboxie wymuszają go karty ze strony Testowanie kart.applepay.cdn-apple.com: biblioteka Apple Pay JS. Ładuje się na Twojej stronie także przy przycisku natywnym. Potrzebny, gdy używasz Apple Pay.pay.google.com: biblioteka Google Pay (pay.js) i ramka arkusza. Potrzebny wyłącznie przy własnym przycisku (requestGooglePay). Przycisk natywny uruchamia bibliotekę Google wewnątrz ramki Paymentic, więc nie wymaga tego wpisu.
Dla samego SDK nie potrzebujesz wpisów w style-src, img-src ani font-src: SDK nie
wstrzykuje tagów style i nie ładuje obrazów ani fontów na Twoją stronę. Międzyprzeglądarkowy
przepływ Apple Pay (Chrome, Edge, Firefox) może wymagać dodatkowych domen Apple; sprawdź
aktualne wytyczne Apple, jeśli zaostrzasz te dyrektywy.
Rekomendowana polityka
Produkcja, przycisk natywny Google Pay i Apple Pay:
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cards.paymentic.com https://applepay.cdn-apple.com;
frame-src https://cards.paymentic.com https://challenge.paymentic.com;
connect-src 'self' https://cards.paymentic.com;
Z własnym przyciskiem Google Pay dodaj https://pay.google.com do script-src i frame-src:
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cards.paymentic.com https://applepay.cdn-apple.com https://pay.google.com;
frame-src https://cards.paymentic.com https://challenge.paymentic.com https://pay.google.com;
connect-src 'self' https://cards.paymentic.com;
W sandboxie zamień hosty produkcyjne na https://cards.sandbox.paymentic.com
i https://challenge.sandbox.paymentic.com (albo dopuść oba środowiska, jeśli ten sam checkout
obsługuje oba).
Nie dodawaj 'unsafe-inline' dla SDK. Nie potrzebuje tego. Jeśli inne integracje na stronie
ładują własne skrypty lub ramki, dopisz ich domeny obok wpisów Paymentic; CSP blokuje wszystko,
czego nie wymienisz.
Co robią poszczególne dyrektywy
| Dyrektywa | Znaczenie |
|---|---|
default-src | Domyślne źródła dla dyrektyw, których nie wymienisz osobno. 'self' dopuszcza tylko Twoją domenę. |
script-src | Skąd wolno ładować JavaScript: skrypt SDK, biblioteka Apple Pay, opcjonalnie biblioteka Google Pay. |
frame-src | Jakie strony wolno osadzić w iframe: hosted fields i natywny przycisk Google Pay z cards.paymentic.com, challenge 3-D Secure z challenge.paymentic.com, opcjonalnie ramka Google Pay. |
connect-src | Dokąd wolno wysyłać fetch/XHR: zapytania tokenizacji i pobranie konfiguracji portfeli z domeny Paymentic. |
Przetestuj politykę w trybie report-only
Zanim włączysz politykę blokującą, wyślij ją w nagłówku Content-Security-Policy-Report-Only.
Przeglądarka tylko loguje naruszenia w konsoli i nic nie blokuje, więc checkout działa jak dotąd.
Content-Security-Policy-Report-Only:
default-src 'self';
script-src 'self' https://cards.paymentic.com https://applepay.cdn-apple.com;
frame-src https://cards.paymentic.com https://challenge.paymentic.com;
connect-src 'self' https://cards.paymentic.com;
- Wdróż nagłówek report-only i przejdź cały checkout: pole karty,
tokenize(), płatność kartą z challenge'em 3-D Secure, przyciski portfeli. - W konsoli przeglądarki poszukaj komunikatów
Refused to load …lub[Report Only]. Każdy wskazuje domenę, której brakuje w polityce. - Dopisz brakujące domeny, powtórz test, a potem zamień nagłówek na
Content-Security-Policy.
Permissions-Policy
Jeśli wysyłasz nagłówek Permissions-Policy, nie może on odmawiać funkcji payment. Hostowana
ramka Google Pay polega na atrybucie allow="payment". Zablokowanie tej funkcji objawia się
powodem FRAME_LOAD_FAILED.
Co dalej
- Obsłuż wynik i dostępność portfeli: powody
FRAME_LOAD_FAILEDiCONFIG_FETCH_FAILED. - Błędy i rozwiązywanie problemów