mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-02 12:06:56 +08:00
feat(router): add merchant_configuration_id in netcetera metadata and make other merchant configurations optional (#7347)
This commit is contained in:
committed by
GitHub
parent
049fcdb3fb
commit
57ab8693e2
@ -107,6 +107,7 @@ pub struct ApiModelMetaData {
|
|||||||
pub locale: Option<String>,
|
pub locale: Option<String>,
|
||||||
pub card_brands: Option<Vec<String>>,
|
pub card_brands: Option<Vec<String>>,
|
||||||
pub merchant_category_code: Option<String>,
|
pub merchant_category_code: Option<String>,
|
||||||
|
pub merchant_configuration_id: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[serde_with::skip_serializing_none]
|
#[serde_with::skip_serializing_none]
|
||||||
|
|||||||
@ -118,6 +118,7 @@ pub struct ConfigMetadata {
|
|||||||
pub locale: Option<InputData>,
|
pub locale: Option<InputData>,
|
||||||
pub card_brands: Option<InputData>,
|
pub card_brands: Option<InputData>,
|
||||||
pub merchant_category_code: Option<InputData>,
|
pub merchant_category_code: Option<InputData>,
|
||||||
|
pub merchant_configuration_id: Option<InputData>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[serde_with::skip_serializing_none]
|
#[serde_with::skip_serializing_none]
|
||||||
|
|||||||
@ -4103,7 +4103,7 @@ private_key="Base64 encoded PEM formatted private key"
|
|||||||
name="mcc"
|
name="mcc"
|
||||||
label="MCC"
|
label="MCC"
|
||||||
placeholder="Enter MCC"
|
placeholder="Enter MCC"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.endpoint_prefix]
|
[netcetera.metadata.endpoint_prefix]
|
||||||
name="endpoint_prefix"
|
name="endpoint_prefix"
|
||||||
@ -4115,25 +4115,31 @@ type="Text"
|
|||||||
name="merchant_country_code"
|
name="merchant_country_code"
|
||||||
label="3 digit numeric country code"
|
label="3 digit numeric country code"
|
||||||
placeholder="Enter 3 digit numeric country code"
|
placeholder="Enter 3 digit numeric country code"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.merchant_name]
|
[netcetera.metadata.merchant_name]
|
||||||
name="merchant_name"
|
name="merchant_name"
|
||||||
label="Name of the merchant"
|
label="Name of the merchant"
|
||||||
placeholder="Enter Name of the merchant"
|
placeholder="Enter Name of the merchant"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.three_ds_requestor_name]
|
[netcetera.metadata.three_ds_requestor_name]
|
||||||
name="three_ds_requestor_name"
|
name="three_ds_requestor_name"
|
||||||
label="ThreeDS requestor name"
|
label="ThreeDS requestor name"
|
||||||
placeholder="Enter ThreeDS requestor name"
|
placeholder="Enter ThreeDS requestor name"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.three_ds_requestor_id]
|
[netcetera.metadata.three_ds_requestor_id]
|
||||||
name="three_ds_requestor_id"
|
name="three_ds_requestor_id"
|
||||||
label="ThreeDS request id"
|
label="ThreeDS request id"
|
||||||
placeholder="Enter 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"
|
type="Text"
|
||||||
|
|
||||||
[taxjar]
|
[taxjar]
|
||||||
|
|||||||
@ -3041,31 +3041,37 @@ type="Text"
|
|||||||
name="mcc"
|
name="mcc"
|
||||||
label="MCC"
|
label="MCC"
|
||||||
placeholder="Enter MCC"
|
placeholder="Enter MCC"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.merchant_country_code]
|
[netcetera.metadata.merchant_country_code]
|
||||||
name="merchant_country_code"
|
name="merchant_country_code"
|
||||||
label="3 digit numeric country code"
|
label="3 digit numeric country code"
|
||||||
placeholder="Enter 3 digit numeric country code"
|
placeholder="Enter 3 digit numeric country code"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.merchant_name]
|
[netcetera.metadata.merchant_name]
|
||||||
name="merchant_name"
|
name="merchant_name"
|
||||||
label="Name of the merchant"
|
label="Name of the merchant"
|
||||||
placeholder="Enter Name of the merchant"
|
placeholder="Enter Name of the merchant"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.three_ds_requestor_name]
|
[netcetera.metadata.three_ds_requestor_name]
|
||||||
name="three_ds_requestor_name"
|
name="three_ds_requestor_name"
|
||||||
label="ThreeDS requestor name"
|
label="ThreeDS requestor name"
|
||||||
placeholder="Enter ThreeDS requestor name"
|
placeholder="Enter ThreeDS requestor name"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.three_ds_requestor_id]
|
[netcetera.metadata.three_ds_requestor_id]
|
||||||
name="three_ds_requestor_id"
|
name="three_ds_requestor_id"
|
||||||
label="ThreeDS request id"
|
label="ThreeDS request id"
|
||||||
placeholder="Enter 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"
|
type="Text"
|
||||||
|
|
||||||
[taxjar]
|
[taxjar]
|
||||||
|
|||||||
@ -4045,31 +4045,37 @@ type="Text"
|
|||||||
name="mcc"
|
name="mcc"
|
||||||
label="MCC"
|
label="MCC"
|
||||||
placeholder="Enter MCC"
|
placeholder="Enter MCC"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.merchant_country_code]
|
[netcetera.metadata.merchant_country_code]
|
||||||
name="merchant_country_code"
|
name="merchant_country_code"
|
||||||
label="3 digit numeric country code"
|
label="3 digit numeric country code"
|
||||||
placeholder="Enter 3 digit numeric country code"
|
placeholder="Enter 3 digit numeric country code"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.merchant_name]
|
[netcetera.metadata.merchant_name]
|
||||||
name="merchant_name"
|
name="merchant_name"
|
||||||
label="Name of the merchant"
|
label="Name of the merchant"
|
||||||
placeholder="Enter Name of the merchant"
|
placeholder="Enter Name of the merchant"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.three_ds_requestor_name]
|
[netcetera.metadata.three_ds_requestor_name]
|
||||||
name="three_ds_requestor_name"
|
name="three_ds_requestor_name"
|
||||||
label="ThreeDS requestor name"
|
label="ThreeDS requestor name"
|
||||||
placeholder="Enter ThreeDS requestor name"
|
placeholder="Enter ThreeDS requestor name"
|
||||||
required=true
|
required=false
|
||||||
type="Text"
|
type="Text"
|
||||||
[netcetera.metadata.three_ds_requestor_id]
|
[netcetera.metadata.three_ds_requestor_id]
|
||||||
name="three_ds_requestor_id"
|
name="three_ds_requestor_id"
|
||||||
label="ThreeDS request id"
|
label="ThreeDS request id"
|
||||||
placeholder="Enter 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"
|
type="Text"
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -253,12 +253,13 @@ pub struct NetceteraErrorDetails {
|
|||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct NetceteraMetaData {
|
pub struct NetceteraMetaData {
|
||||||
pub mcc: String,
|
pub mcc: Option<String>,
|
||||||
pub merchant_country_code: String,
|
pub merchant_country_code: Option<String>,
|
||||||
pub merchant_name: String,
|
pub merchant_name: Option<String>,
|
||||||
pub endpoint_prefix: String,
|
pub endpoint_prefix: String,
|
||||||
pub three_ds_requestor_name: String,
|
pub three_ds_requestor_name: Option<String>,
|
||||||
pub three_ds_requestor_id: String,
|
pub three_ds_requestor_id: Option<String>,
|
||||||
|
pub merchant_configuration_id: Option<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TryFrom<&Option<common_utils::pii::SecretSerdeValue>> for NetceteraMetaData {
|
impl TryFrom<&Option<common_utils::pii::SecretSerdeValue>> for NetceteraMetaData {
|
||||||
@ -515,13 +516,13 @@ impl TryFrom<&NetceteraRouterData<&types::authentication::ConnectorAuthenticatio
|
|||||||
.parse_value("NetceteraMetaData")
|
.parse_value("NetceteraMetaData")
|
||||||
.change_context(errors::ConnectorError::RequestEncodingFailed)?;
|
.change_context(errors::ConnectorError::RequestEncodingFailed)?;
|
||||||
let merchant_data = netcetera_types::MerchantData {
|
let merchant_data = netcetera_types::MerchantData {
|
||||||
merchant_configuration_id: None,
|
merchant_configuration_id: connector_meta_data.merchant_configuration_id,
|
||||||
mcc: Some(connector_meta_data.mcc),
|
mcc: connector_meta_data.mcc,
|
||||||
merchant_country_code: Some(connector_meta_data.merchant_country_code),
|
merchant_country_code: connector_meta_data.merchant_country_code,
|
||||||
merchant_name: Some(connector_meta_data.merchant_name),
|
merchant_name: connector_meta_data.merchant_name,
|
||||||
notification_url: request.return_url.clone(),
|
notification_url: request.return_url.clone(),
|
||||||
three_ds_requestor_id: Some(connector_meta_data.three_ds_requestor_id),
|
three_ds_requestor_id: connector_meta_data.three_ds_requestor_id,
|
||||||
three_ds_requestor_name: Some(connector_meta_data.three_ds_requestor_name),
|
three_ds_requestor_name: connector_meta_data.three_ds_requestor_name,
|
||||||
white_list_status: None,
|
white_list_status: None,
|
||||||
trust_list_status: None,
|
trust_list_status: None,
|
||||||
seller_info: None,
|
seller_info: None,
|
||||||
|
|||||||
@ -6539,7 +6539,7 @@ pub fn validate_mandate_data_and_future_usage(
|
|||||||
pub enum UnifiedAuthenticationServiceFlow {
|
pub enum UnifiedAuthenticationServiceFlow {
|
||||||
ClickToPayInitiate,
|
ClickToPayInitiate,
|
||||||
ExternalAuthenticationInitiate {
|
ExternalAuthenticationInitiate {
|
||||||
acquirer_details: authentication::types::AcquirerDetails,
|
acquirer_details: Option<authentication::types::AcquirerDetails>,
|
||||||
card_number: ::cards::CardNumber,
|
card_number: ::cards::CardNumber,
|
||||||
token: String,
|
token: String,
|
||||||
},
|
},
|
||||||
@ -6613,7 +6613,7 @@ pub async fn decide_action_for_unified_authentication_service<F: Clone>(
|
|||||||
|
|
||||||
pub enum PaymentExternalAuthenticationFlow {
|
pub enum PaymentExternalAuthenticationFlow {
|
||||||
PreAuthenticationFlow {
|
PreAuthenticationFlow {
|
||||||
acquirer_details: authentication::types::AcquirerDetails,
|
acquirer_details: Option<authentication::types::AcquirerDetails>,
|
||||||
card_number: ::cards::CardNumber,
|
card_number: ::cards::CardNumber,
|
||||||
token: String,
|
token: String,
|
||||||
},
|
},
|
||||||
@ -6690,17 +6690,27 @@ pub async fn get_payment_external_authentication_flow_during_confirm<F: Clone>(
|
|||||||
connector_data.merchant_connector_id.as_ref(),
|
connector_data.merchant_connector_id.as_ref(),
|
||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
let acquirer_details: authentication::types::AcquirerDetails = payment_connector_mca
|
let acquirer_details = payment_connector_mca
|
||||||
.get_metadata()
|
.get_metadata()
|
||||||
.get_required_value("merchant_connector_account.metadata")?
|
|
||||||
.peek()
|
|
||||||
.clone()
|
.clone()
|
||||||
.parse_value("AcquirerDetails")
|
.and_then(|metadata| {
|
||||||
.change_context(errors::ApiErrorResponse::PreconditionFailed {
|
metadata
|
||||||
message:
|
.peek()
|
||||||
"acquirer_bin and acquirer_merchant_id not found in Payment Connector's Metadata"
|
.clone()
|
||||||
.to_string(),
|
.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 {
|
Some(PaymentExternalAuthenticationFlow::PreAuthenticationFlow {
|
||||||
card_number,
|
card_number,
|
||||||
token,
|
token,
|
||||||
|
|||||||
@ -983,7 +983,7 @@ impl<F: Clone + Send + Sync> Domain<F, api::PaymentsRequest, PaymentData<F>> for
|
|||||||
card_number,
|
card_number,
|
||||||
token,
|
token,
|
||||||
business_profile,
|
business_profile,
|
||||||
Some(acquirer_details),
|
acquirer_details,
|
||||||
Some(payment_data.payment_attempt.payment_id.clone()),
|
Some(payment_data.payment_attempt.payment_id.clone()),
|
||||||
payment_data.payment_attempt.organization_id.clone(),
|
payment_data.payment_attempt.organization_id.clone(),
|
||||||
)
|
)
|
||||||
@ -1267,7 +1267,7 @@ impl<F: Clone + Send + Sync> Domain<F, api::PaymentsRequest, PaymentData<F>> for
|
|||||||
state,
|
state,
|
||||||
pre_auth_response,
|
pre_auth_response,
|
||||||
authentication.clone(),
|
authentication.clone(),
|
||||||
Some(acquirer_details),
|
acquirer_details,
|
||||||
).await?;
|
).await?;
|
||||||
payment_data.authentication = Some(updated_authentication.clone());
|
payment_data.authentication = Some(updated_authentication.clone());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user