sdk.js, który dokłada do sklepu dwie rzeczy:
- element
<paymove-checkout>- przycisk płatności albo pasek informacyjny z sygnetem Paymove i logotypami metod, gotowy do wstawienia w koszyku lub na liście metod płatności, - modal z checkoutem - ten sam adres, który dziś otwierasz przekierowaniem, wyświetlony w iframie na stronie sklepu.
redirectUrl z odpowiedzi.
1. Podłączenie skryptu
<paymove-checkout> i wystawia obiekt window.Paymove. Cały interfejs siedzi w Shadow DOM, więc style sklepu nie mieszają się ze stylami widgetu i odwrotnie.
Przy async skrypt może dojechać po Twoim kodzie - poczekaj na ready():
/v1/ to alias wersjonujący - ten sam plik serwowany jest też pod /sdk.js. Używaj /v1/, dzięki czemu ewentualna przyszła wersja /v2/ nie zepsuje istniejących integracji.
Adres skryptu odpowiada środowisku checkoutu. Build
sdk.js osadza w modalu
wyłącznie własną domenę, więc skrypt z produkcji nie otworzy checkoutu
sandboxowego i odwrotnie - pobieraj go z tej samej domeny, z której przychodzi
redirectUrl.2. Element <paymove-checkout>
Najkrótsza wersja to sam znacznik w HTML:
Tekst po znaku
· renderuje się pogrubiony, więc label="Zapłać · 149,00 zł" da „Zapłać · 149,00 zł”.
Widoczne są trzy pierwsze logotypy, reszta zwija się do znacznika +N.
Sygnetu Paymove nie da się ukryć ani przemalować - do wyboru są dwie wersje:
czarna i biała. Resztę wyglądu dostosujesz - patrz sekcja Wygląd.
3. Tryb readonly
mode="readonly" renderuje sam pasek: sygnet, Twój tekst i logotypy metod. Domyślnie jest nieinteraktywny - to element informacyjny, taki jak pozycja „Płatności online” na liście metod dostawy i płatności w koszyku.
interactive i podepnij kontroler (sekcja niżej). Element emituje wtedy zdarzenie paymove:click, obsługuje Enter i spację, i wystawia poprawne role dla czytników ekranu.
Kafelki pojedynczych metod
Atrybutmethod zamienia pasek w kafelek jednej metody: logo, nazwa i opis z wbudowanego katalogu SDK - sklep nie utrzymuje własnych logotypów ani tekstów. Poniższe przykłady są żywe, renderuje je sdk.js załadowany na tej stronie:
hide-label, hide-description) albo nadpisać (label, description):
--paymove-bg, --paymove-border-color, --paymove-padding, --paymove-radius) zrobisz z niego samodzielną kartę. Z atrybutem interactive kafelek jest klikalny i emituje paymove:click - przy schowanych tekstach nazwa metody zostaje w aria-label, więc czytniki ekranu widzą go poprawnie.
4. Otwarcie checkoutu w modalu
Modalem steruje kontroler zwindow.Paymove:
mount() przejmuje kliknięcia w element i sam przełącza przycisk w stan ładowania na czas pobierania adresu. Jeśli redirectUrl masz już w momencie renderowania strony, podaj go zamiast fetchCheckoutUrl:
fetchCheckoutUrl jest wygodniejsze: płatność powstaje dopiero w chwili
kliknięcia, więc nie zostawiasz porzuconych płatności po klientach, którzy
tylko oglądali koszyk.Konfiguracja createCheckout
Konfiguracja przyjmuje też wszystkie pola wyglądu przycisku (
label, methods, variant…), więc możesz opisać element wyłącznie w JavaScripcie i zamontować go w pustym <div>.
Kontroler
Gdy chcesz tylko otworzyć modal - bez własnego przycisku - użyj skrótu:
Apple Pay w modalu
W modalu checkout działa w iframie osadzonym na Twojej domenie, a Apple wymaga, żeby domena strony, na której pojawia się arkusz płatności, była u niego zarejestrowana i zweryfikowana. Domyślna konfiguracja obejmuje wyłącznie domeny Paymove, więc Apple Pay w modalu wymaga jednorazowego onboardingu Twojego sklepu. Dwa kroki: 1. PodajmerchantDomain w metadanych produktu
Przy tworzeniu produktu (albo późniejszą aktualizacją) ustaw domenę sklepu:
https://, bez portu i bez ścieżki. To ten adres, pod którym klient widzi Twój koszyk, a nie adres checkoutu.
2. Opublikuj plik weryfikacyjny Apple
Napisz na integration@paymove.io i podaj swoją domenę. Odeślemy Ci plik weryfikacyjny, który wystawiasz u siebie pod adresem:
Plik weryfikacyjny jest powiązany z identyfikatorem merchanta Apple należącym
do Paymove, dlatego nie wygenerujesz go samodzielnie na swoim koncie Apple
Developer. Przy
flow: 'redirect' i przy klasycznym przekierowaniu na
checkout nic z tego nie jest potrzebne - arkusz Apple Pay pokazuje się wtedy
na domenie Paymove.5. Przekierowanie zamiast modala
To ta sama konfiguracja z jednym polem więcej:returnUrl przekazany przy tworzeniu płatności. Modal i przekierowanie różnią się wyłącznie tym polem, więc możesz przełączać się między nimi bez zmian w reszcie integracji.
6. Jak zachowuje się modal
- Na desktopie to panel o szerokości 398 px, wyśrodkowany, na przyciemnionym tle. Wysokość dopasowuje się do treści checkoutu.
- Przy szerokości okna do 640 px modal wysuwa się z dołu jak natywny arkusz: maksymalnie 90% wysokości okna, z belką do przeciągania - przeciągnięcie w dół zamyka płatność.
- W trakcie ładowania widać statyczny sygnet Paymove. Krzyżyka wtedy nie ma - pojawia się dopiero, gdy checkout nie odezwie się przez 10 sekund, jako wyjście awaryjne.
- Po załadowaniu zamykanie przejmuje nagłówek checkoutu. Zamknąć można też klawiszem
Esci kliknięciem w tło. - Strona pod modalem nie przewija się, a po zamknięciu wraca w to samo miejsce.
- Na czas płatności checkout blokuje przewijanie tła i sam raportuje swoją wysokość, więc modal nie skacze przy zmianie kroku.
- Modal potrafi zamknąć się sam po udanej płatności, ale sterujesz tym przy tworzeniu subproduktu, polem
details.autoclose(w milisekundach), a nie z poziomu SDK. Checkout pokazuje wtedy odliczanie w przycisku „Wróć do sklepu” i po jego upływie zamyka modal, wywołująconComplete. Dowolna interakcja klienta anuluje odliczanie.
7. Wygląd
Kolory, promień i typografię przycisku ustawisz konfiguracją albo bezpośrednio zmiennymi CSS na elemencie:--paymove-font-family.
8. React i Next.js
checkout.current.update({ label: 'Zapłać · 199,00 zł' }) - element przerysuje się bez montowania od nowa.
W Reakcie montuj widget w pustym
<div>, a nie w JSX-owym <paymove-checkout>. Element i tak trzyma treść w Shadow DOM, więc React nie ma czym zarządzać, a przy hydratacji unikasz ostrzeżeń o niezgodności drzewa.9. Ograniczenia
sdk.jsotwiera w modalu wyłącznie własną domenę checkoutu. Adres z innej domeny kończy się błędemINVALID_CHECKOUT_URL, zanim cokolwiek się pokaże.- Płatność zawsze tworzy Twój backend - widget nie zna klucza API i nie odpytuje API Paymove.
- Zamówienie realizuj dopiero po zweryfikowanym webhooku.
onSuccessto sygnał dla interfejsu, nie potwierdzenie księgowania. - Modal wymaga, żeby strona sklepu mogła osadzić checkout w iframie - checkout wysyła nagłówek
Content-Security-Policyzframe-ancestors https:, więc sklep musi działać po HTTPS (pozalocalhostw developmencie).