Przejdź do głównej zawartości

Cykl życia transakcji

Każda transakcja w dpay.pl przechodzi przez określone stany - od utworzenia do finalnego rozliczenia lub anulowania. Zrozumienie cyklu życia transakcji pozwala poprawnie obsługiwać płatności w Twojej aplikacji.

POST/api/v1/pbl/detailsSprawdź status transakcji: parametry, checksum i pola odpowiedzi.Pełny kontrakt w API Reference

Statusy transakcji

StatusOpisCzy finalny?
createdTransakcja zarejestrowana, klient nie dokonał jeszcze płatnościNie
processingPłatność w trakcie przetwarzania przez operatoraNie
paidPłatność zakończona sukcesem (dla kart pre-auth: środki zautoryzowane)Tak*
capturedPłatność kartowa pre-auth przechwycona (capture) - środki pobraneTak
expiredTransakcja wygasła lub nie doszła do skutku (timeout, odrzucenie, rezygnacja klienta)Tak

* Dla płatności kartowych w modelu pre-auth/capture transakcja paid (autoryzacja) może jeszcze przejść w captured po przechwyceniu środków. Dla pozostałych metod paid jest finalny.

Diagram stanów

informacja

Stan oznaczony na diagramie jako „canceled" jest zwracany przez API o statusie transakcji jako expired. Dodatkowo płatności kartowe pre-auth mogą po paid przejść w finalny stan captured.

Opis przejść między stanami

createdprocessing

Klient wybrał metodę płatności i rozpoczął proces autoryzacji. Dla niektórych metod (np. BLIK, karty) przejście do processing następuje natychmiast po wysłaniu danych płatności.

processingpaid

Operator płatności (bank, BLIK, procesor kart) potwierdził autoryzację. Środki zostały pobrane z konta klienta. dpay.pl wysyła IPN z potwierdzeniem.

processingexpired

Płatność nie powiodła się. Najczęstsze przyczyny:

  • Klient anulował płatność
  • Nieprawidłowy kod BLIK lub odrzucenie w aplikacji bankowej
  • Niewystarczające środki
  • Timeout (klient nie ukończył płatności w wymaganym czasie)
  • Odrzucenie przez system antyfraudowy

createdexpired

Klient nie podjął żadnej akcji i transakcja wygasła (timeout).

Dotyczy wyłącznie płatności kartowych w modelu pre-auth/capture. Po autoryzacji (paid) przechwytujesz środki (capture) - transakcja przechodzi w finalny stan captured.

Zachowanie per metoda płatności

Różne metody płatności mają różny przebieg cyklu życia:

MetodaPrzechodzi przez processing?Typowy czas na płatność
BLIKTak~2 minuty (ważność kodu)
Przelewy bankowe (PBL)TakDo 15 minut
Karty płatniczeTak (autoryzacja + opcjonalnie 3DS)Do 5 minut
Google Pay / Apple PayTakSekundy
MB WAYTak (potwierdzenie w aplikacji)Do 5 minut
DCBTakDo 2 minut
SMS PremiumNie dotyczy (inny model)-

Jak sprawdzać status transakcji?

IPN (zalecane)

Najlepszym sposobem śledzenia statusu transakcji jest obsługa IPN. dpay.pl automatycznie wysyła powiadomienie HTTP POST na Twój endpoint, gdy transakcja przechodzi do stanu paid.

informacja

IPN jest wysyłany tylko dla udanych transakcji (status paid, a dla kart pre-auth dodatkowo captured). Transakcje wygasłe i nieudane nie generują IPN.

Polling (odpytywanie API)

Jeśli IPN nie dotarł lub potrzebujesz dodatkowej weryfikacji, możesz samodzielnie sprawdzić status:

POST https://panel.dpay.pl/api/v1/pbl/details
Content-Type: application/json
{
"service": "abc123",
"transaction_id": "A75AEBB4-4B89-4834-AD43-EF442C133769",
"checksum": "sha256(service|transaction_id|secret_hash)"
}

Szczegóły endpointu i przykłady kodu znajdziesz w sekcji Samodzielne odpytywanie o status.

wskazówka

Nie odpytuj API zbyt często. Zalecanym podejściem jest:

  1. Główny mechanizm - IPN (automatycznie, natychmiast)
  2. Fallback - zadanie cron sprawdzające statusy transakcji oczekujących >15 minut

Mapowanie statusów na IPN

Status transakcjiIPN wysłany?Typ IPN
createdNie-
processingNie-
paidTaktransfer
captured (capture karty pre-auth)Takcapture
expiredNie-

Obsługa stanów w aplikacji

Przykładowa logika obsługi statusów po stronie Twojego serwera:

// Mapowanie statusów dpay.pl na statusy zamówienia
switch ($transactionStatus) {
case 'created':
// Zamówienie oczekuje na płatność
// Wyświetl klientowi informację "Oczekujemy na płatność"
break;

case 'processing':
// Płatność w trakcie - nie zmieniaj statusu zamówienia
// Klient widzi stronę oczekiwania
break;

case 'paid':
// Płatność potwierdzona przez IPN
// Zaktualizuj zamówienie, wyślij e-mail z potwierdzeniem
markOrderAsPaid($orderId);
break;

case 'captured':
// Płatność kartowa pre-auth przechwycona - środki pobrane
markOrderAsPaid($orderId);
break;

case 'expired':
// Transakcja wygasła / nie doszła do skutku
// Przywróć dostępność produktu, poinformuj klienta
markOrderAsCanceled($orderId);
break;
}
ostrzeżenie

Nie aktualizuj statusu zamówienia na paid na podstawie przekierowania klienta na url_success. Jedynymi wiarygodnymi źródłami informacji o udanej płatności są IPN i zapytanie do API dpay.