diff --git a/crates/router/src/connector/mifinity.rs b/crates/router/src/connector/mifinity.rs index 9c12018a73..9c20c26875 100644 --- a/crates/router/src/connector/mifinity.rs +++ b/crates/router/src/connector/mifinity.rs @@ -2,16 +2,17 @@ pub mod transformers; use std::fmt::Debug; -use error_stack::{report, ResultExt}; +use error_stack::{report, Report, ResultExt}; use masking::ExposeInterface; use transformers as mifinity; use self::transformers::auth_headers; use crate::{ configs::settings, + consts, core::errors::{self, CustomResult}, events::connector_api_logs::ConnectorEvent, - headers, + headers, logger, services::{ self, request::{self, Mask}, @@ -112,39 +113,59 @@ impl ConnectorCommon for Mifinity { res: Response, event_builder: Option<&mut ConnectorEvent>, ) -> CustomResult { - let response: mifinity::MifinityErrorResponse = res - .response - .parse_struct("MifinityErrorResponse") - .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; + if res.response.is_empty() { + Ok(ErrorResponse { + status_code: res.status_code, + code: consts::NO_ERROR_CODE.to_string(), + message: consts::NO_ERROR_MESSAGE.to_string(), + reason: Some(consts::CONNECTOR_UNAUTHORIZED_ERROR.to_string()), + attempt_status: None, + connector_transaction_id: None, + }) + } else { + let response: Result< + mifinity::MifinityErrorResponse, + Report, + > = res.response.parse_struct("MifinityErrorResponse"); - event_builder.map(|i| i.set_response_body(&response)); - router_env::logger::info!(connector_response=?response); + match response { + Ok(response) => { + event_builder.map(|i| i.set_response_body(&response)); + router_env::logger::info!(connector_response=?response); + Ok(ErrorResponse { + status_code: res.status_code, + code: response + .errors + .iter() + .map(|error| error.error_code.clone()) + .collect::>() + .join(" & "), + message: response + .errors + .iter() + .map(|error| error.message.clone()) + .collect::>() + .join(" & "), + reason: Some( + response + .errors + .iter() + .map(|error| error.message.clone()) + .collect::>() + .join(" & "), + ), + attempt_status: None, + connector_transaction_id: None, + }) + } - Ok(ErrorResponse { - status_code: res.status_code, - code: response - .errors - .iter() - .map(|error| error.error_code.clone()) - .collect::>() - .join(" & "), - message: response - .errors - .iter() - .map(|error| error.message.clone()) - .collect::>() - .join(" & "), - reason: Some( - response - .errors - .iter() - .map(|error| error.message.clone()) - .collect::>() - .join(" & "), - ), - attempt_status: None, - connector_transaction_id: None, - }) + Err(error_msg) => { + event_builder.map(|event| event.set_error(serde_json::json!({"error": res.response.escape_ascii().to_string(), "status_code": res.status_code}))); + logger::error!(deserialization_error =? error_msg); + crate::utils::handle_json_response_deserialization_failure(res, "mifinity") + } + } + } } } diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs index 9f9dffec58..8de3a5ca4d 100644 --- a/crates/router/src/services/api.rs +++ b/crates/router/src/services/api.rs @@ -1877,10 +1877,11 @@ pub fn build_redirection_form( RedirectForm::Mifinity { initialization_token, } => { + let mifinity_base_url = config.connectors.mifinity.base_url; maud::html! { (maud::DOCTYPE) head { - (PreEscaped(r#""#)) + (PreEscaped(format!(r#""#))) } (PreEscaped(format!("
@@ -1888,9 +1889,11 @@ pub fn build_redirection_form( var widget = showPaymentIframe('widget-container', {{ token: '{initialization_token}', complete: function() {{ - setTimeout(function() {{ - widget.close(); - }}, 5000); + var f = document.createElement('form'); + f.action=window.location.pathname.replace(/payments\\/redirect\\/(\\w+)\\/(\\w+)\\/\\w+/, \"payments/$1/$2/redirect/response/mifinity\"); + f.method='GET'; + document.body.appendChild(f); + f.submit(); }} }}); ")))