diff --git a/crates/connector_configs/src/common_config.rs b/crates/connector_configs/src/common_config.rs index 599d22ae3f6..ebb5870655c 100644 --- a/crates/connector_configs/src/common_config.rs +++ b/crates/connector_configs/src/common_config.rs @@ -107,6 +107,7 @@ pub struct ApiModelMetaData { pub locale: Option, pub card_brands: Option>, pub merchant_category_code: Option, + pub merchant_configuration_id: Option, } #[serde_with::skip_serializing_none] diff --git a/crates/connector_configs/src/connector.rs b/crates/connector_configs/src/connector.rs index 8f1deb02c53..2d1d2e4ede8 100644 --- a/crates/connector_configs/src/connector.rs +++ b/crates/connector_configs/src/connector.rs @@ -118,6 +118,7 @@ pub struct ConfigMetadata { pub locale: Option, pub card_brands: Option, pub merchant_category_code: Option, + pub merchant_configuration_id: Option, } #[serde_with::skip_serializing_none] diff --git a/crates/connector_configs/toml/development.toml b/crates/connector_configs/toml/development.toml index 266ae918779..ba54730681f 100644 --- a/crates/connector_configs/toml/development.toml +++ b/crates/connector_configs/toml/development.toml @@ -4103,7 +4103,7 @@ private_key="Base64 encoded PEM formatted private key" name="mcc" label="MCC" placeholder="Enter MCC" -required=true +required=false type="Text" [netcetera.metadata.endpoint_prefix] name="endpoint_prefix" @@ -4115,25 +4115,31 @@ type="Text" name="merchant_country_code" label="3 digit numeric country code" placeholder="Enter 3 digit numeric country code" -required=true +required=false type="Text" [netcetera.metadata.merchant_name] name="merchant_name" label="Name of the merchant" placeholder="Enter Name of the merchant" -required=true +required=false type="Text" [netcetera.metadata.three_ds_requestor_name] name="three_ds_requestor_name" label="ThreeDS requestor name" placeholder="Enter ThreeDS requestor name" -required=true +required=false type="Text" [netcetera.metadata.three_ds_requestor_id] name="three_ds_requestor_id" label="ThreeDS request id" placeholder="Enter ThreeDS request id" -required=true +required=false +type="Text" +[netcetera.metadata.merchant_configuration_id] +name="merchant_configuration_id" +label="Merchant Configuration ID" +placeholder="Enter Merchant Configuration ID" +required=false type="Text" [taxjar] diff --git a/crates/connector_configs/toml/production.toml b/crates/connector_configs/toml/production.toml index e4c0e70e191..88bba56c820 100644 --- a/crates/connector_configs/toml/production.toml +++ b/crates/connector_configs/toml/production.toml @@ -3041,31 +3041,37 @@ type="Text" name="mcc" label="MCC" placeholder="Enter MCC" -required=true +required=false type="Text" [netcetera.metadata.merchant_country_code] name="merchant_country_code" label="3 digit numeric country code" placeholder="Enter 3 digit numeric country code" -required=true +required=false type="Text" [netcetera.metadata.merchant_name] name="merchant_name" label="Name of the merchant" placeholder="Enter Name of the merchant" -required=true +required=false type="Text" [netcetera.metadata.three_ds_requestor_name] name="three_ds_requestor_name" label="ThreeDS requestor name" placeholder="Enter ThreeDS requestor name" -required=true +required=false type="Text" [netcetera.metadata.three_ds_requestor_id] name="three_ds_requestor_id" label="ThreeDS request id" placeholder="Enter ThreeDS request id" -required=true +required=false +type="Text" +[netcetera.metadata.merchant_configuration_id] +name="merchant_configuration_id" +label="Merchant Configuration ID" +placeholder="Enter Merchant Configuration ID" +required=false type="Text" [taxjar] diff --git a/crates/connector_configs/toml/sandbox.toml b/crates/connector_configs/toml/sandbox.toml index b7b57690474..265f06ee749 100644 --- a/crates/connector_configs/toml/sandbox.toml +++ b/crates/connector_configs/toml/sandbox.toml @@ -4045,31 +4045,37 @@ type="Text" name="mcc" label="MCC" placeholder="Enter MCC" -required=true +required=false type="Text" [netcetera.metadata.merchant_country_code] name="merchant_country_code" label="3 digit numeric country code" placeholder="Enter 3 digit numeric country code" -required=true +required=false type="Text" [netcetera.metadata.merchant_name] name="merchant_name" label="Name of the merchant" placeholder="Enter Name of the merchant" -required=true +required=false type="Text" [netcetera.metadata.three_ds_requestor_name] name="three_ds_requestor_name" label="ThreeDS requestor name" placeholder="Enter ThreeDS requestor name" -required=true +required=false type="Text" [netcetera.metadata.three_ds_requestor_id] name="three_ds_requestor_id" label="ThreeDS request id" placeholder="Enter ThreeDS request id" -required=true +required=false +type="Text" +[netcetera.metadata.merchant_configuration_id] +name="merchant_configuration_id" +label="Merchant Configuration ID" +placeholder="Enter Merchant Configuration ID" +required=false type="Text" diff --git a/crates/router/src/connector/netcetera/transformers.rs b/crates/router/src/connector/netcetera/transformers.rs index ab228d95a9e..ab6002ba312 100644 --- a/crates/router/src/connector/netcetera/transformers.rs +++ b/crates/router/src/connector/netcetera/transformers.rs @@ -253,12 +253,13 @@ pub struct NetceteraErrorDetails { #[derive(Debug, Serialize, Deserialize)] pub struct NetceteraMetaData { - pub mcc: String, - pub merchant_country_code: String, - pub merchant_name: String, + pub mcc: Option, + pub merchant_country_code: Option, + pub merchant_name: Option, pub endpoint_prefix: String, - pub three_ds_requestor_name: String, - pub three_ds_requestor_id: String, + pub three_ds_requestor_name: Option, + pub three_ds_requestor_id: Option, + pub merchant_configuration_id: Option, } impl TryFrom<&Option> for NetceteraMetaData { @@ -515,13 +516,13 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticatio .parse_value("NetceteraMetaData") .change_context(errors::ConnectorError::RequestEncodingFailed)?; let merchant_data = netcetera_types::MerchantData { - merchant_configuration_id: None, - mcc: Some(connector_meta_data.mcc), - merchant_country_code: Some(connector_meta_data.merchant_country_code), - merchant_name: Some(connector_meta_data.merchant_name), + merchant_configuration_id: connector_meta_data.merchant_configuration_id, + mcc: connector_meta_data.mcc, + merchant_country_code: connector_meta_data.merchant_country_code, + merchant_name: connector_meta_data.merchant_name, notification_url: request.return_url.clone(), - three_ds_requestor_id: Some(connector_meta_data.three_ds_requestor_id), - three_ds_requestor_name: Some(connector_meta_data.three_ds_requestor_name), + three_ds_requestor_id: connector_meta_data.three_ds_requestor_id, + three_ds_requestor_name: connector_meta_data.three_ds_requestor_name, white_list_status: None, trust_list_status: None, seller_info: None, diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index 6702b94c43b..1159e51da67 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -6539,7 +6539,7 @@ pub fn validate_mandate_data_and_future_usage( pub enum UnifiedAuthenticationServiceFlow { ClickToPayInitiate, ExternalAuthenticationInitiate { - acquirer_details: authentication::types::AcquirerDetails, + acquirer_details: Option, card_number: ::cards::CardNumber, token: String, }, @@ -6604,7 +6604,7 @@ pub async fn decide_action_for_unified_authentication_service( pub enum PaymentExternalAuthenticationFlow { PreAuthenticationFlow { - acquirer_details: authentication::types::AcquirerDetails, + acquirer_details: Option, card_number: ::cards::CardNumber, token: String, }, @@ -6681,17 +6681,27 @@ pub async fn get_payment_external_authentication_flow_during_confirm( connector_data.merchant_connector_id.as_ref(), ) .await?; - let acquirer_details: authentication::types::AcquirerDetails = payment_connector_mca + let acquirer_details = payment_connector_mca .get_metadata() - .get_required_value("merchant_connector_account.metadata")? - .peek() .clone() - .parse_value("AcquirerDetails") - .change_context(errors::ApiErrorResponse::PreconditionFailed { - message: - "acquirer_bin and acquirer_merchant_id not found in Payment Connector's Metadata" - .to_string(), - })?; + .and_then(|metadata| { + metadata + .peek() + .clone() + .parse_value::("AcquirerDetails") + .change_context(errors::ApiErrorResponse::PreconditionFailed { + message: + "acquirer_bin and acquirer_merchant_id not found in Payment Connector's Metadata" + .to_string(), + }) + .inspect_err(|err| { + logger::error!( + "Failed to parse acquirer details from Payment Connector's Metadata: {:?}", + err + ); + }) + .ok() + }); Some(PaymentExternalAuthenticationFlow::PreAuthenticationFlow { card_number, token, diff --git a/crates/router/src/core/payments/operations/payment_confirm.rs b/crates/router/src/core/payments/operations/payment_confirm.rs index 84ff9933875..05e61170039 100644 --- a/crates/router/src/core/payments/operations/payment_confirm.rs +++ b/crates/router/src/core/payments/operations/payment_confirm.rs @@ -983,7 +983,7 @@ impl Domain> for card_number, token, business_profile, - Some(acquirer_details), + acquirer_details, Some(payment_data.payment_attempt.payment_id.clone()), payment_data.payment_attempt.organization_id.clone(), ) @@ -1221,7 +1221,7 @@ impl Domain> for state, pre_auth_response, authentication.clone(), - Some(acquirer_details), + acquirer_details, ).await?; payment_data.authentication = Some(updated_authentication.clone());