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.

Statusy transakcji

StatusOpisCzy finalny?
createdTransakcja zarejestrowana, klient nie dokonał jeszcze płatnościNie
processingPłatność w trakcie przetwarzania przez operatoraNie
paidPłatność zakończona sukcesemTak
canceledTransakcja anulowana (timeout, odrzucenie, rezygnacja klienta)Tak

Diagram stanów

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.

processingcanceled

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

createdcanceled

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

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
BizumTak (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). Transakcje anulowane 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
paid (capture karty)Takcapture
canceledNie-

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 'canceled':
// Transakcja anulowana
// 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.