From bd194f2bb8872558acafffb4c67883ebc7194e99 Mon Sep 17 00:00:00 2001 From: matst80 Date: Thu, 4 Dec 2025 18:48:24 +0100 Subject: [PATCH] maybe fix adyen error --- cmd/checkout/adyen-handlers.go | 94 ++++++++++++---------------------- 1 file changed, 32 insertions(+), 62 deletions(-) diff --git a/cmd/checkout/adyen-handlers.go b/cmd/checkout/adyen-handlers.go index 313e94a..4beabde 100644 --- a/cmd/checkout/adyen-handlers.go +++ b/cmd/checkout/adyen-handlers.go @@ -1,7 +1,6 @@ package main import ( - "bytes" "encoding/json" "errors" "fmt" @@ -10,9 +9,7 @@ import ( "net/url" "time" - "git.k6n.net/go-cart-actor/pkg/actor" "git.k6n.net/go-cart-actor/pkg/cart" - "git.k6n.net/go-cart-actor/pkg/proxy" messages "git.k6n.net/go-cart-actor/proto/checkout" adyenCheckout "github.com/adyen/adyen-go-api-library/v21/src/checkout" "github.com/adyen/adyen-go-api-library/v21/src/common" @@ -75,7 +72,7 @@ func (s *CheckoutPoolServer) AdyenHookHandler(w http.ResponseWriter, r *http.Req http.Error(w, err.Error(), http.StatusBadRequest) return } - cartHostMap := make(map[actor.Host][]webhook.NotificationItem) + for _, notificationItem := range *notificationRequest.NotificationItems { item := notificationItem.NotificationRequestItem log.Printf("Recieved notification event code: %s, %+v", item.EventCode, item) @@ -102,34 +99,25 @@ func (s *CheckoutPoolServer) AdyenHookHandler(w http.ResponseWriter, r *http.Req return } - // Check if this checkout is owned by another host - if host, ok := s.OwnerHost(checkoutId); ok { - cartHostMap[host] = append(cartHostMap[host], notificationItem) - continue - } - log.Printf("Capture status: %v", item.Success) isSuccess := item.Success == "true" - // Apply payment event for capture - if err := s.applyAnywhere(r.Context(), checkoutId, &messages.PaymentEvent{ - PaymentId: item.PspReference, - Success: isSuccess, - Name: item.EventCode, - Data: &anypb.Any{Value: dataBytes}, - }); err != nil { - log.Printf("error applying capture event: %v", err) - } // If successful, apply payment completed //if isSuccess { - if err := s.applyAnywhere(r.Context(), checkoutId, &messages.PaymentCompleted{ - PaymentId: item.PspReference, - Status: item.Success, - Amount: item.Amount.Value, - Currency: item.Amount.Currency, - ProcessorReference: &item.PspReference, - CompletedAt: timestamppb.New(time.Now()), - }); err != nil { + if err := s.applyAnywhere(r.Context(), checkoutId, + &messages.PaymentEvent{ + PaymentId: item.PspReference, + Success: isSuccess, + Name: item.EventCode, + Data: &anypb.Any{Value: dataBytes}, + }, &messages.PaymentCompleted{ + PaymentId: item.PspReference, + Status: item.Success, + Amount: item.Amount.Value, + Currency: item.Amount.Currency, + ProcessorReference: &item.PspReference, + CompletedAt: timestamppb.New(time.Now()), + }); err != nil { http.Error(w, "Message not parsed", http.StatusInternalServerError) return } @@ -189,45 +177,27 @@ func (s *CheckoutPoolServer) AdyenHookHandler(w http.ResponseWriter, r *http.Req default: log.Printf("Unknown event code: %s", item.EventCode) log.Printf("Item data: %+v", item) - //isSuccess := item.Success == "true" + isSuccess := item.Success == "true" + checkoutId, err := getCheckoutIdFromNotificationItem(item) + if err != nil { + log.Printf("Could not get checkout id: %v", err) - // if err := s.applyAnywhere(r.Context(), checkoutId, &messages.PaymentEvent{ - // PaymentId: item.PspReference, - // Success: isSuccess, - // Name: item.EventCode, - // Data: &anypb.Any{Value: dataBytes}, - // }); err != nil { - // log.Printf("error applying payment event: %v", err) - // } + } else { + if err := s.applyAnywhere(r.Context(), checkoutId, &messages.PaymentEvent{ + PaymentId: item.PspReference, + Success: isSuccess, + Name: item.EventCode, + Data: &anypb.Any{Value: dataBytes}, + }); err != nil { + log.Printf("error applying payment event: %v", err) + } + } } } } - var failed bool = false - var lastMock *proxy.MockResponseWriter - for host, items := range cartHostMap { - notificationRequest.NotificationItems = &items - bodyBytes, err := json.Marshal(notificationRequest) - if err != nil { - log.Printf("error marshaling notification: %+v", err) - continue - } - customBody := bytes.NewReader(bodyBytes) - mockW := proxy.NewMockResponseWriter() - handled, err := host.Proxy(0, mockW, r, customBody) - if err != nil { - log.Printf("proxy failed for %s: %+v", host.Name(), err) - failed = true - lastMock = mockW - } else if handled { - log.Printf("notification proxied to %s", host.Name()) - } - } - if failed { - w.WriteHeader(lastMock.StatusCode) - w.Write(lastMock.Body.Bytes()) - } else { - w.WriteHeader(http.StatusAccepted) - } + + w.WriteHeader(http.StatusAccepted) + } func (s *CheckoutPoolServer) AdyenReturnHandler(w http.ResponseWriter, r *http.Request) {