Skip to content

Commit

Permalink
feat(router): add merchant_configuration_id in netcetera metadata a…
Browse files Browse the repository at this point in the history
…nd make other merchant configurations optional (#7347)
  • Loading branch information
sai-harsha-vardhan committed Feb 25, 2025
1 parent d6e13dd commit 9e038a9
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 39 deletions.
1 change: 1 addition & 0 deletions crates/connector_configs/src/common_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ pub struct ApiModelMetaData {
pub locale: Option<String>,
pub card_brands: Option<Vec<String>>,
pub merchant_category_code: Option<String>,
pub merchant_configuration_id: Option<String>,
}

#[serde_with::skip_serializing_none]
Expand Down
1 change: 1 addition & 0 deletions crates/connector_configs/src/connector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ pub struct ConfigMetadata {
pub locale: Option<InputData>,
pub card_brands: Option<InputData>,
pub merchant_category_code: Option<InputData>,
pub merchant_configuration_id: Option<InputData>,
}

#[serde_with::skip_serializing_none]
Expand Down
16 changes: 11 additions & 5 deletions crates/connector_configs/toml/development.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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]
Expand Down
16 changes: 11 additions & 5 deletions crates/connector_configs/toml/production.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
16 changes: 11 additions & 5 deletions crates/connector_configs/toml/sandbox.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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"


Expand Down
23 changes: 12 additions & 11 deletions crates/router/src/connector/netcetera/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<String>,
pub merchant_country_code: Option<String>,
pub merchant_name: Option<String>,
pub endpoint_prefix: String,
pub three_ds_requestor_name: String,
pub three_ds_requestor_id: String,
pub three_ds_requestor_name: Option<String>,
pub three_ds_requestor_id: Option<String>,
pub merchant_configuration_id: Option<String>,
}

impl TryFrom<&Option<common_utils::pii::SecretSerdeValue>> for NetceteraMetaData {
Expand Down Expand Up @@ -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,
Expand Down
32 changes: 21 additions & 11 deletions crates/router/src/core/payments/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<authentication::types::AcquirerDetails>,
card_number: ::cards::CardNumber,
token: String,
},
Expand Down Expand Up @@ -6604,7 +6604,7 @@ pub async fn decide_action_for_unified_authentication_service<F: Clone>(

pub enum PaymentExternalAuthenticationFlow {
PreAuthenticationFlow {
acquirer_details: authentication::types::AcquirerDetails,
acquirer_details: Option<authentication::types::AcquirerDetails>,
card_number: ::cards::CardNumber,
token: String,
},
Expand Down Expand Up @@ -6681,17 +6681,27 @@ pub async fn get_payment_external_authentication_flow_during_confirm<F: Clone>(
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::<authentication::types::AcquirerDetails>("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,
Expand Down
4 changes: 2 additions & 2 deletions crates/router/src/core/payments/operations/payment_confirm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -983,7 +983,7 @@ impl<F: Clone + Send + Sync> Domain<F, api::PaymentsRequest, PaymentData<F>> 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(),
)
Expand Down Expand Up @@ -1221,7 +1221,7 @@ impl<F: Clone + Send + Sync> Domain<F, api::PaymentsRequest, PaymentData<F>> for
state,
pre_auth_response,
authentication.clone(),
Some(acquirer_details),
acquirer_details,
).await?;
payment_data.authentication = Some(updated_authentication.clone());

Expand Down

0 comments on commit 9e038a9

Please sign in to comment.