diff --git a/crates/router/src/connector/airwallex/transformers.rs b/crates/router/src/connector/airwallex/transformers.rs index 938d14cba7..f4757ce340 100644 --- a/crates/router/src/connector/airwallex/transformers.rs +++ b/crates/router/src/connector/airwallex/transformers.rs @@ -93,7 +93,9 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for AirwallexPaymentsRequest { })); Ok(AirwallexPaymentMethod::Card(AirwallexCard { card: AirwallexCardDetails { - number: ccard.card_number, + number: ccard + .card_number + .map(|card| card.split_whitespace().collect()), expiry_month: ccard.card_exp_month.clone(), expiry_year: ccard.card_exp_year.clone(), cvc: ccard.card_cvc, diff --git a/crates/router/src/connector/bluesnap.rs b/crates/router/src/connector/bluesnap.rs index 1f81aff9f7..7731617916 100644 --- a/crates/router/src/connector/bluesnap.rs +++ b/crates/router/src/connector/bluesnap.rs @@ -80,25 +80,33 @@ impl ConnectorCommon for Bluesnap { res: Response, ) -> CustomResult { logger::debug!(bluesnap_error_response=?res); - let response: bluesnap::BluesnapErrorResponse = res + let response: bluesnap::BluesnapErrors = res .response .parse_struct("BluesnapErrorResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; - let response_error_message = response.message.first().map_or( - ErrorResponse { + let response_error_message = match response { + bluesnap::BluesnapErrors::PaymentError(error_res) => error_res.message.first().map_or( + ErrorResponse { + status_code: res.status_code, + code: consts::NO_ERROR_CODE.to_string(), + message: consts::NO_ERROR_MESSAGE.to_string(), + reason: None, + }, + |error_response| ErrorResponse { + status_code: res.status_code, + code: error_response.code.clone(), + message: error_response.description.clone(), + reason: None, + }, + ), + bluesnap::BluesnapErrors::AuthError(error_res) => ErrorResponse { status_code: res.status_code, - code: consts::NO_ERROR_CODE.to_string(), - message: consts::NO_ERROR_MESSAGE.to_string(), + code: error_res.error_code.clone(), + message: error_res.error_description, reason: None, }, - |error_response| ErrorResponse { - status_code: res.status_code, - code: error_response.code.clone(), - message: error_response.description.clone(), - reason: None, - }, - ); + }; Ok(response_error_message) } } diff --git a/crates/router/src/connector/bluesnap/transformers.rs b/crates/router/src/connector/bluesnap/transformers.rs index 3c12c2de36..709139da78 100644 --- a/crates/router/src/connector/bluesnap/transformers.rs +++ b/crates/router/src/connector/bluesnap/transformers.rs @@ -325,8 +325,22 @@ pub struct ErrorDetails { pub description: String, } -#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq)] +#[derive(Default, Debug, Clone, Deserialize, PartialEq)] #[serde(rename_all = "camelCase")] pub struct BluesnapErrorResponse { pub message: Vec, } + +#[derive(Default, Debug, Clone, Deserialize, PartialEq)] +#[serde(rename_all = "camelCase")] +pub struct BluesnapAuthErrorResponse { + pub error_code: String, + pub error_description: String, +} + +#[derive(Debug, Clone, Deserialize, PartialEq)] +#[serde(untagged)] +pub enum BluesnapErrors { + PaymentError(BluesnapErrorResponse), + AuthError(BluesnapAuthErrorResponse), +}