Opracowując niestandardową integrację z płatnościami Montonio, musisz odpowiednio obsługiwać nasze statusy płatności. Oprócz powiadomień webhook, uwzględniamy status płatności w "tokenie zamówienia (order token)" podczas przekierowywania klienta z powrotem do określonego returnUrl, jak opisano tutaj w naszej dokumentacji API. Więcej informacji na temat różnych statusów płatności zamówienia można znaleźć w rozdziale "Jaki jest cykl życia zamówienia?" w naszej dokumentacji API.
Dlaczego otrzymuję status oczekujące na płatności (PENDING)?
Gdy klient zdecyduje się anulować płatność lub nie jest w stanie ukończyć płatności, przekierowujemy go z powrotem do określonego returnUrl. Ponieważ zamówienie nie zostało opłacone, nie zmieniamy statusu zamówienia. Status pozostaje w PENDING, dopóki nie ustawimy go na ABANDONED po określonym czasie wygaśnięcia (domyślnie 30 minut).
Nie wysyłamy webhooków ze statusem PENDING, ponieważ status nie uległ zmianie. Jest on jednak zawarty w tokenie w returnUrl, na wypadek gdyby płatność nie została zakończona.
Dlaczego nie zmienimy statusu na ABANDONED natychmiast?
Gdy klient anuluje płatności, nie zmieniamy go natychmiast na ABANDONED, ponieważ nadal istnieje techniczna możliwość, że płatność jest finalizowana w tle przez banki.
Istnieje jeszcze kilka innych przypadków, w których rozliczenie płatności może zająć dużo czasu i chociaż klient mógł opuścić przepływ, płatność jest nadal przetwarzana w tle. Ze względu na charakter interfejsów API otwartej bankowości (open banking) często nie możemy zatrzymać takich procesów i musimy oczekiwać, że płatność może zostać zakończona nawet po opuszczeniu procesu płatności przez klienta. Aby zapewnić spójność danych, utrzymujemy płatność w statusie PENDING, dopóki nie będziemy pewni, że nie można jej już sfinalizować.
Oferujemy jednak status ABANDONED, gdy płatność była bezczynna przez dłuższy czas i nie jest możliwe, aby została zakończona w tle. Domyślnie zlecenia otrzymują status ABANDONED 30 minut po uruchomieniu procesu płatności. Można to skonfigurować za pomocą parametru expiresIn, zgodnie z naszą dokumentacją API. Zalecamy pozostawienie go na 15 minut lub dłużej.
Ten rodzaj „finalizacji w tle” zdarza się bardzo rzadko i zostaniesz powiadomiony/-a o zmianach statusu za pośrednictwem webhooka.
Jak obsługiwać status PENDING?
Gdy klient powróci ze statusem PENDING, możesz bezpiecznie wyświetlić klientowi, że płatność nie została zakończona i pozwolić mu spróbować ponownie.
Zalecamy użycie tego samego merchantReference dla wszystkich ponownych prób z tymi samymi szczegółami zamówienia. W ten sposób nie tworzymy nowego zamówienia w naszych systemach. Co najważniejsze, w przypadku, gdy poprzednia płatność tego samego merchantReference została sfinalizowana w tle (przypadki opisane powyżej), możemy płynnie obsłużyć przepływ użytkownika i zmienić status zamówienia na PAID, unikając podwójnej płatności przez użytkownika.
Jeśli jednak suma całkowita zamówienia ulegnie zmianie, należy utworzyć nowe zamówienie z zupełnie nowy merchantReference. W przeciwnym razie zamówienie może zostać oznaczone jako PAID z mniejszą kwotą płatności niż suma całkowita.
Z naszego doświadczenia wynika, że wdrożenie powyższego przepływu zapewnia najlepsze wrażenia użytkownika, unikając podwójnych płatności. Nasza wtyczka WooCommerce również implementuje API z tą samą logiką. Została ona gruntownie przetestowana przez tysiące sprzedawców, a UX okazał się być na najwyższym poziomie!