From 868c21c021742eefc65d7ec75502ceea092f06d7 Mon Sep 17 00:00:00 2001 From: Aleksandar Mihajlovski Date: Fri, 10 Nov 2023 09:49:00 +0100 Subject: [PATCH] fix: treat received as successful result code --- adyen/controllers/payments-details.js | 10 +++++++++- adyen/controllers/payments.js | 10 ++++++++-- adyen/utils/createCheckoutResponse.mjs | 9 ++------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/adyen/controllers/payments-details.js b/adyen/controllers/payments-details.js index 1cffe32..65e6ac4 100644 --- a/adyen/controllers/payments-details.js +++ b/adyen/controllers/payments-details.js @@ -3,6 +3,10 @@ import AdyenCheckoutConfig from './checkout-config' import Logger from './logger' import {createErrorResponse} from '../utils/createErrorResponse.mjs' +const errorMessages = { + PAYMENTS_DETAILS_NOT_SUCCESSFUL: 'payments details call not successful' +} + async function sendPaymentDetails(req, res) { Logger.info('sendPaymentDetails', 'start') const checkout = AdyenCheckoutConfig.getInstance() @@ -10,7 +14,11 @@ async function sendPaymentDetails(req, res) { const {data} = req.body const response = await checkout.instance.paymentsDetails(data) Logger.info('sendPaymentDetails', `resultCode ${response.resultCode}`) - res.json(createCheckoutResponse(response)) + const checkoutResponse = createCheckoutResponse(response) + if (checkoutResponse.isFinal && !checkoutResponse.isSuccessful) { + throw new Error(errorMessages.PAYMENTS_DETAILS_NOT_SUCCESSFUL) + } + res.json(checkoutResponse) } catch (err) { Logger.error('sendPaymentDetails', err.message) res.status(err.statusCode || 500).json( diff --git a/adyen/controllers/payments.js b/adyen/controllers/payments.js index 7dc8c9a..0d326d1 100644 --- a/adyen/controllers/payments.js +++ b/adyen/controllers/payments.js @@ -17,7 +17,8 @@ const errorMessages = { AMOUNT_NOT_CORRECT: 'amount not correct', INVALID_ORDER: 'order is invalid', INVALID_PARAMS: 'invalid request params', - INVALID_BASKET: 'invalid basket' + INVALID_BASKET: 'invalid basket', + PAYMENT_NOT_SUCCESSFUL: 'payment not successful' } const validateRequestParams = (req) => { @@ -150,7 +151,12 @@ async function sendPayments(req, res) { // } // }) - res.json(createCheckoutResponse(response)) + const checkoutResponse = createCheckoutResponse(response) + if (checkoutResponse.isFinal && !checkoutResponse.isSuccessful) { + throw new Error(errorMessages.PAYMENT_NOT_SUCCESSFUL) + } + + res.json(checkoutResponse) } catch (err) { Logger.error('sendPayments', err.message) res.status(err.statusCode || 500).json( diff --git a/adyen/utils/createCheckoutResponse.mjs b/adyen/utils/createCheckoutResponse.mjs index 198d1e1..4f40ddf 100644 --- a/adyen/utils/createCheckoutResponse.mjs +++ b/adyen/utils/createCheckoutResponse.mjs @@ -7,12 +7,13 @@ export function createCheckoutResponse(response) { RESULT_CODES.REFUSED, RESULT_CODES.ERROR, RESULT_CODES.CANCELLED, + RESULT_CODES.RECEIVED, ].includes(response.resultCode) ) { return { isFinal: true, isSuccessful: - response.resultCode === RESULT_CODES.AUTHORISED, + response.resultCode === RESULT_CODES.AUTHORISED || response.resultCode === RESULT_CODES.RECEIVED, merchantReference: response.merchantReference, }; } @@ -32,12 +33,6 @@ export function createCheckoutResponse(response) { }; } - if (response.resultCode === RESULT_CODES.RECEIVED) { - return { - isFinal: false, - }; - } - return { isFinal: true, isSuccessful: false,