diff --git a/cmd/cart/pool-server.go b/cmd/cart/pool-server.go index b3decaa..91498c7 100644 --- a/cmd/cart/pool-server.go +++ b/cmd/cart/pool-server.go @@ -726,26 +726,46 @@ func (s *PoolServer) CreateCheckoutOrderHandler(w http.ResponseWriter, r *http.R return s.WriteResult(w, reply) } +type SessionRequest struct { + SessionId string `json:"sessionId"` + SessionResult string `json:"sessionResult"` + SessionData string `json:"sessionData,omitempty"` +} + func (s *PoolServer) AdyenSessionHandler(w http.ResponseWriter, r *http.Request, cartId cart.CartId) error { grain, err := s.Get(r.Context(), uint64(cartId)) if err != nil { return err } + if r.Method == http.MethodGet { + meta := GetCheckoutMetaFromRequest(r) + sessionData, err := BuildAdyenCheckoutSession(grain, meta) + if err != nil { + return err + } + service := s.adyenClient.Checkout() + req := service.PaymentsApi.SessionsInput().CreateCheckoutSessionRequest(*sessionData) + res, _, err := service.PaymentsApi.Sessions(r.Context(), req) + // apply checkout started + if err != nil { + return err + } + return s.WriteResult(w, res) + } else { + payload := &SessionRequest{} + if err := json.NewDecoder(r.Body).Decode(payload); err != nil { + return err + } + service := s.adyenClient.Checkout() + req := service.PaymentsApi.GetResultOfPaymentSessionInput(payload.SessionId).SessionResult(payload.SessionResult) + res, _, err := service.PaymentsApi.GetResultOfPaymentSession(r.Context(), req) + if err != nil { + return err + } + return s.WriteResult(w, res) + } - meta := GetCheckoutMetaFromRequest(r) - sessionData, err := BuildAdyenCheckoutSession(grain, meta) - if err != nil { - return err - } - service := s.adyenClient.Checkout() - req := service.PaymentsApi.SessionsInput().CreateCheckoutSessionRequest(*sessionData) - res, _, err := service.PaymentsApi.Sessions(r.Context(), req) - // apply checkout started - if err != nil { - return err - } - return s.WriteResult(w, res) } func (s *PoolServer) AdyenHookHandler(w http.ResponseWriter, r *http.Request) {