From 825f2ba80ca9f074e7f6e38797dd819c553a28d5 Mon Sep 17 00:00:00 2001 From: Brian Talma Date: Fri, 15 Mar 2024 15:51:56 -0400 Subject: [PATCH] Handle case where payment data is not loaded for reversal --- CHANGELOG.md | 3 +++ dotnet/Services/CybersourcePaymentService.cs | 25 +++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a282691..23b924d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Fixed +- Handle case where payment data is not loaded for reversal + ## [1.21.0] - 2024-03-01 ### Fixed diff --git a/dotnet/Services/CybersourcePaymentService.cs b/dotnet/Services/CybersourcePaymentService.cs index e8579bf..1c0844a 100644 --- a/dotnet/Services/CybersourcePaymentService.cs +++ b/dotnet/Services/CybersourcePaymentService.cs @@ -859,7 +859,13 @@ public async Task CancelPayment(CancelPaymentRequest canc return cancelPaymentResponse; } - string referenceNumber = await _vtexApiService.GetOrderId(paymentData.CreatePaymentRequest.OrderId); + string orderId = cancelPaymentRequest.PaymentId; // Default in case we can't get the order id + if(paymentData != null && paymentData.CreatePaymentRequest != null && !string.IsNullOrEmpty(paymentData.CreatePaymentRequest.OrderId)) + { + orderId = await _vtexApiService.GetOrderId(paymentData.CreatePaymentRequest.OrderId); + } + + string referenceNumber = orderId; string orderSuffix = string.Empty; MerchantSettings merchantSettings = await _cybersourceRepository.GetMerchantSettings(); string merchantName = paymentData.CreatePaymentRequest.MerchantName; @@ -879,6 +885,12 @@ public async Task CancelPayment(CancelPaymentRequest canc orderSuffix = merchantSettings.OrderSuffix.Trim(); } + decimal value = 0M; + if(paymentData != null) + { + value = paymentData.Value; + } + Payments payment = new Payments { clientReferenceInformation = new ClientReferenceInformation @@ -896,13 +908,20 @@ public async Task CancelPayment(CancelPaymentRequest canc { amountDetails = new AmountDetails { - totalAmount = paymentData.Value.ToString() + totalAmount = value.ToString() }, //reason = "34" // 34: suspected fraud } }; - PaymentsResponse paymentsResponse = await _cybersourceApi.ProcessReversal(payment, paymentData.AuthorizationId, merchantSettings); + + string authId = cancelPaymentRequest.AuthorizationId; + if(paymentData != null && !string.IsNullOrEmpty(paymentData.AuthorizationId)) + { + authId = paymentData.AuthorizationId; + } + + PaymentsResponse paymentsResponse = await _cybersourceApi.ProcessReversal(payment, authId, merchantSettings); if (paymentsResponse != null) { cancelPaymentResponse = new CancelPaymentResponse