diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index 6e8542c518..bcdb75824c 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -621,10 +621,10 @@ impl From<&PaymentMethodData> for AdditionalPaymentData { }, PaymentMethodData::BankRedirect(bank_redirect_data) => match bank_redirect_data { BankRedirectData::Eps { bank_name, .. } => Self::BankRedirect { - bank_name: Some(bank_name.to_owned()), + bank_name: bank_name.to_owned(), }, BankRedirectData::Ideal { bank_name, .. } => Self::BankRedirect { - bank_name: Some(bank_name.to_owned()), + bank_name: bank_name.to_owned(), }, _ => Self::BankRedirect { bank_name: None }, }, @@ -670,7 +670,7 @@ pub enum BankRedirectData { /// The hyperswitch bank code for eps #[schema(value_type = BankNames, example = "triodos_bank")] - bank_name: api_enums::BankNames, + bank_name: Option, }, Giropay { /// The billing details for bank redirection @@ -691,7 +691,7 @@ pub enum BankRedirectData { /// The hyperswitch bank code for ideal #[schema(value_type = BankNames, example = "abn_amro")] - bank_name: api_enums::BankNames, + bank_name: Option, }, Interac { /// The country for bank payment diff --git a/crates/router/src/connector/aci/transformers.rs b/crates/router/src/connector/aci/transformers.rs index e831cc4bc5..93dacbfdb1 100644 --- a/crates/router/src/connector/aci/transformers.rs +++ b/crates/router/src/connector/aci/transformers.rs @@ -212,7 +212,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for AciPaymentsRequest { PaymentDetails::BankRedirect(Box::new(BankRedirectionPMData { payment_brand: PaymentBrand::Ideal, bank_account_country: Some(api_models::enums::CountryAlpha2::NL), - bank_account_bank_name: Some(bank_name.to_string()), + bank_account_bank_name: bank_name + .map(|bank_name| bank_name.to_string()), bank_account_bic: None, bank_account_iban: None, billing_country: None, diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs index 432040a2b1..129d36cc48 100644 --- a/crates/router/src/connector/adyen/transformers.rs +++ b/crates/router/src/connector/adyen/transformers.rs @@ -539,7 +539,7 @@ pub struct BankRedirectionPMData { pub struct BankRedirectionWithIssuer<'a> { #[serde(rename = "type")] payment_type: PaymentType, - issuer: &'a str, + issuer: Option<&'a str>, } #[derive(Debug, Clone, Serialize, Deserialize)] @@ -1188,7 +1188,10 @@ impl<'a> TryFrom<&api_models::payments::BankRedirectData> for AdyenPaymentMethod api_models::payments::BankRedirectData::Eps { bank_name, .. } => Ok( AdyenPaymentMethod::Eps(Box::new(BankRedirectionWithIssuer { payment_type: PaymentType::Eps, - issuer: AdyenTestBankNames::try_from(bank_name)?.0, + issuer: bank_name + .map(|bank_name| AdyenTestBankNames::try_from(&bank_name)) + .transpose()? + .map(|adyen_bank_name| adyen_bank_name.0), })), ), api_models::payments::BankRedirectData::Giropay { .. } => Ok( @@ -1199,7 +1202,10 @@ impl<'a> TryFrom<&api_models::payments::BankRedirectData> for AdyenPaymentMethod api_models::payments::BankRedirectData::Ideal { bank_name, .. } => Ok( AdyenPaymentMethod::Ideal(Box::new(BankRedirectionWithIssuer { payment_type: PaymentType::Ideal, - issuer: AdyenTestBankNames::try_from(bank_name)?.0, + issuer: bank_name + .map(|bank_name| AdyenTestBankNames::try_from(&bank_name)) + .transpose()? + .map(|adyen_bank_name| adyen_bank_name.0), })), ), api_models::payments::BankRedirectData::OnlineBankingCzechRepublic { issuer } => { diff --git a/crates/router/src/connector/nexinets/transformers.rs b/crates/router/src/connector/nexinets/transformers.rs index 13a2060355..c26df486cc 100644 --- a/crates/router/src/connector/nexinets/transformers.rs +++ b/crates/router/src/connector/nexinets/transformers.rs @@ -103,7 +103,7 @@ pub enum RecurringType { #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct NexinetsBankRedirects { - bic: NexinetsBIC, + bic: Option, } #[derive(Debug, Serialize)] @@ -578,7 +578,9 @@ fn get_payment_details_and_product( api_models::payments::BankRedirectData::Ideal { bank_name, .. } => Ok(( Some(NexinetsPaymentDetails::BankRedirects(Box::new( NexinetsBankRedirects { - bic: NexinetsBIC::try_from(bank_name)?, + bic: bank_name + .map(|bank_name| NexinetsBIC::try_from(&bank_name)) + .transpose()?, }, ))), NexinetsProduct::Ideal, diff --git a/crates/router/src/connector/nuvei/transformers.rs b/crates/router/src/connector/nuvei/transformers.rs index 669e5e13b9..5471af1001 100644 --- a/crates/router/src/connector/nuvei/transformers.rs +++ b/crates/router/src/connector/nuvei/transformers.rs @@ -549,7 +549,7 @@ impl email: item.request.get_email()?, country: item.get_billing_country()?, }), - Some(NuveiBIC::try_from(bank_name)?), + bank_name.map(NuveiBIC::try_from).transpose()?, ) } _ => Err(errors::ConnectorError::NotSupported { diff --git a/crates/router/src/connector/stripe/transformers.rs b/crates/router/src/connector/stripe/transformers.rs index 8001c0afce..ff24de28d5 100644 --- a/crates/router/src/connector/stripe/transformers.rs +++ b/crates/router/src/connector/stripe/transformers.rs @@ -216,15 +216,15 @@ pub struct ChargesResponse { pub enum StripeBankName { Eps { #[serde(rename = "payment_method_data[eps][bank]")] - bank_name: StripeBankNames, + bank_name: Option, }, Ideal { #[serde(rename = "payment_method_data[ideal][bank]")] - ideal_bank_name: StripeBankNames, + ideal_bank_name: Option, }, Przelewy24 { #[serde(rename = "payment_method_data[p24][bank]")] - bank_name: StripeBankNames, + bank_name: Option, }, } @@ -248,23 +248,25 @@ fn get_bank_name( StripePaymentMethodType::Eps, api_models::payments::BankRedirectData::Eps { ref bank_name, .. }, ) => Ok(Some(StripeBankName::Eps { - bank_name: StripeBankNames::try_from(bank_name)?, + bank_name: bank_name + .map(|bank_name| StripeBankNames::try_from(&bank_name)) + .transpose()?, })), ( StripePaymentMethodType::Ideal, api_models::payments::BankRedirectData::Ideal { bank_name, .. }, ) => Ok(Some(StripeBankName::Ideal { - ideal_bank_name: StripeBankNames::try_from(bank_name)?, + ideal_bank_name: bank_name + .map(|bank_name| StripeBankNames::try_from(&bank_name)) + .transpose()?, })), ( StripePaymentMethodType::Przelewy24, api_models::payments::BankRedirectData::Przelewy24 { bank_name, .. }, ) => Ok(Some(StripeBankName::Przelewy24 { - bank_name: StripeBankNames::try_from(&bank_name.ok_or( - errors::ConnectorError::MissingRequiredField { - field_name: "bank_name", - }, - )?)?, + bank_name: bank_name + .map(|bank_name| StripeBankNames::try_from(&bank_name)) + .transpose()?, })), ( StripePaymentMethodType::Sofort diff --git a/crates/router/src/connector/worldline/transformers.rs b/crates/router/src/connector/worldline/transformers.rs index 592b6019d8..d6a8d2044f 100644 --- a/crates/router/src/connector/worldline/transformers.rs +++ b/crates/router/src/connector/worldline/transformers.rs @@ -133,7 +133,7 @@ pub struct Giropay { #[derive(Debug, Serialize)] pub struct Ideal { #[serde(rename = "issuerId")] - pub issuer_id: WorldlineBic, + pub issuer_id: Option, } #[derive(Debug, Serialize)] @@ -322,7 +322,9 @@ fn make_bank_redirect_request( payments::BankRedirectData::Ideal { bank_name, .. } => ( { PaymentMethodSpecificData::PaymentProduct809SpecificInput(Box::new(Ideal { - issuer_id: WorldlineBic::try_from(bank_name)?, + issuer_id: bank_name + .map(|bank_name| WorldlineBic::try_from(&bank_name)) + .transpose()?, })) }, 809, diff --git a/crates/router/src/core/payments/operations/payment_create.rs b/crates/router/src/core/payments/operations/payment_create.rs index 3754431d2f..a4f20e96f8 100644 --- a/crates/router/src/core/payments/operations/payment_create.rs +++ b/crates/router/src/core/payments/operations/payment_create.rs @@ -464,7 +464,11 @@ impl ValidateRequest for PaymentCreate request.shipping.is_some(), request.billing.is_some(), request.setup_future_usage.is_some(), - &request.customer_id, + &request + .customer + .clone() + .map(|customer| customer.id) + .or(request.customer_id.clone()), )?; }