# 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)