From 6aa8d3434cb6c1890b8dd303147368bfafed037a Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Thu, 8 Jan 2026 17:30:49 -0500 Subject: [PATCH] Parity for adyen failures in redirect flow --- src/layouts/payment-adyen/payment-adyen.vue | 6 +++++ .../methods/route-logic/adyen-return.js | 26 ++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/layouts/payment-adyen/payment-adyen.vue b/src/layouts/payment-adyen/payment-adyen.vue index 4ea759e2c..262614235 100644 --- a/src/layouts/payment-adyen/payment-adyen.vue +++ b/src/layouts/payment-adyen/payment-adyen.vue @@ -105,9 +105,15 @@ export default { const resultMap = await settleAllPromises(promiseResultMap); + const hasExistingPiaError = to.query?.piaFailure; + // Hydrate page with results next(async (vm) => { vm.setCmsContent(resultMap.cmsContent); + + if(hasExistingPiaError) { + vm.hasPaymentFailureError = true; + } }); }, diff --git a/src/router/methods/route-logic/adyen-return.js b/src/router/methods/route-logic/adyen-return.js index d94de4c38..1e423e056 100644 --- a/src/router/methods/route-logic/adyen-return.js +++ b/src/router/methods/route-logic/adyen-return.js @@ -15,7 +15,21 @@ export async function adyenReturnBeforeEnter(to, from) { const redirectResult = to?.query?.redirectResult; if (sessionId && redirectResult) { - const result = await finalizeAdyenPayment(sessionId, redirectResult); + let result = null; + + try { + result = await finalizeAdyenPayment(sessionId, redirectResult); + } catch (error) { + // Payment fails, so return user to payment-adyen screen to try again or pay later. + return { + name: routeData.PAYMENT_ADYEN.name, + query: { + piaFailure: true, + }, + replace: true, + }; + } + console.log(`Out of promise`); console.log(result); @@ -93,12 +107,18 @@ function finalizeAdyenPayment(sessionId, redirectResult) { onPaymentFailed: (result, component) => { console.log(`Payment failed`); console.log(result); - reject("Payment failed from Adyen"); + reject({ + paymentFailure: true, + message: "Payment failed from Adyen", + }); }, onError: (error, component) => { console.log(`Error occured`); console.log(error); - reject("Error from Adyen"); + reject({ + paymentFailure: false, + message: "Error from Adyen", + }); }, }, options: {},