# Payu Developer Notes
## Pay-by-Link
```plantuml
@startuml
actor Frontend as front
entity Backend as back
boundary Payu as payu
== 1. Wybór metody płatności PayU ==
note over front,payu : użyszkodnik wybiera płatność Payu na ekranie podsumowania
front -> back : Q: payuPaymentMethods()
back -> payu : API call o metody płatności dla tego użyszkodnika (nie jakieś wszystkie)
back -> back : backend je sobie filtruje i zwraca tylko ENABLED \ni pasujące do kwoty zamówienia, \ni sprawdza czy user ma zapisanego blik-tokena
back -> front: metody płatności do wyrenderowania \nna froncie (zawierają linki do ikon)
== 2. Tworzenie zamówienia (opcja pay-by-link, \nbez blika) ==
front -> back : M: purchaseReservation
note over front,payu
purchaseReservation(
paymentProvider: PAYU,
paymentMethod: BLIK_TOKEN,
paymentExtraParams: {
authorizationCode: "777123",
register: true })
end note
back -> payu : tworzy zamówienie
== 3. Przekierowanie ==
back -> front : przesyła link to przekierowania
front -> front : Front przekierowuje na stronę banku \n(url podany w odpowiedzi GQL)
note over front,payu
użyszkodnik robi płatność
end note
== 4. Po dokonaniu płatności ==
payu -> back : callback
note over front,payu
notyfikacja o stworzeniu ordera
-> API scheduluje capture
end note
back -> payu : API capture call
payu -> back : notyfikacja o pomyślnym capture płatności
@enduml
```
## Blik na stronie Payu (wersja minimum) (możemy to nazwać Scenariuszem #0)
- Po prostu Frontend redirect na strone payu
- Użyszkodnik wklepuje kod T6 w okienko na stronie Payu
```
purchaseReservation(
paymentProvider: PAYU,
paymentMethod: BLIK_TOKEN
```
## Kod Blik na naszym froncie (blik one click Scenariusz #1 - Blik LEVEL 0) https://developers.payu.com/pl/blik_oneclick.html
- Użyszkodnik wpisuje kod T6 w okienko na naszym froncie
- Front podaje kod T6 mutacją GQL
- Backend załącza kod T6 do tworzonego w payu orderu
```
purchaseReservation(
paymentProvider: PAYU,
paymentMethod: BLIK_TOKEN,
paymentExtraParams: { authorizationCode: "777123"})
```
## Zapisany token platności (Scenariusz #2 - Płatność BLIK level 0 z rejestracją tokenu) https://developers.payu.com/pl/blik_oneclick.html
(podwersja scenariusza 1 tak naprawdę)
- Użyszkodnik wpisuje kod T6 w okienko na naszym froncie
- Front podaje kod T6 mutacją GQL
- Backend załącza kod T6 do tworzonego w payu orderu, ale w opcjach createOrder jest "Zarejestruj ten kod T6"
- NASTĘPNYM razem, w metodach platnosci `Q:payuPaymentMethods` klucz
```
purchaseReservation(
paymentProvider: PAYU,
paymentMethod: BLIK_TOKEN,
paymentExtraParams: {
authorizationCode: "777123",
register: true })
```
## Czemu musimy pytać o metody platnosci indywidualnie dla użytkownika?
- Bo niektórzy użytkownicy mogą miec zarejestrowane tokeny Blika, inni nie
~~- Bo dla niektórych rezerwacji, ze względu na ich wyliczoną cenę, niektóre metody platności mogą być niedostępne (wartość tranzakcji nie miesci się w [minValue, maxValue])~~ (tak, ale na etapie tego calla wartość rezerwacji może jeszcze nie być znana albo być niefinalna)