feat(pm_list): add required fields for giropay (#3194)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
Co-authored-by: Prasunna Soppa <70575890+prasunna09@users.noreply.github.com>
This commit is contained in:
AkshayaFoiger
2024-02-12 13:26:05 +05:30
committed by GitHub
parent 834142e690
commit 33df3520d1
14 changed files with 267 additions and 20 deletions

View File

@ -390,6 +390,8 @@ bank_debit.sepa = { connector_list = "gocardless" } # Mandate supported payment
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} # Mandate supported payment method type and connector for bank_redirect bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} # Mandate supported payment method type and connector for bank_redirect
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"}
wallet.apple_pay = { connector_list = "stripe,adyen,cybersource,noon" } wallet.apple_pay = { connector_list = "stripe,adyen,cybersource,noon" }
bank_redirect.giropay = {connector_list = "adyen,globalpay"}
[mandates.update_mandate_supported] [mandates.update_mandate_supported]
card.credit ={connector_list ="cybersource"} # Update Mandate supported payment method type and connector for card card.credit ={connector_list ="cybersource"} # Update Mandate supported payment method type and connector for card

View File

@ -117,8 +117,10 @@ pay_later.klarna.connector_list = "adyen"
wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon" wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon"
wallet.google_pay.connector_list = "stripe,adyen,cybersource" wallet.google_pay.connector_list = "stripe,adyen,cybersource"
wallet.paypal.connector_list = "adyen" wallet.paypal.connector_list = "adyen"
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} bank_redirect.ideal.connector_list = "stripe,adyen,globalpay"
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
bank_redirect.giropay.connector_list = "adyen,globalpay"
[mandates.update_mandate_supported] [mandates.update_mandate_supported]
card.credit ={connector_list ="cybersource"} card.credit ={connector_list ="cybersource"}

View File

@ -117,8 +117,9 @@ pay_later.klarna.connector_list = "adyen"
wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon" wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon"
wallet.google_pay.connector_list = "stripe,adyen,cybersource" wallet.google_pay.connector_list = "stripe,adyen,cybersource"
wallet.paypal.connector_list = "adyen" wallet.paypal.connector_list = "adyen"
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} bank_redirect.ideal.connector_list = "stripe,adyen,globalpay"
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
bank_redirect.giropay.connector_list = "adyen,globalpay"
[mandates.update_mandate_supported] [mandates.update_mandate_supported]
card.credit ={connector_list ="cybersource"} card.credit ={connector_list ="cybersource"}

View File

@ -117,8 +117,10 @@ pay_later.klarna.connector_list = "adyen"
wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon" wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon"
wallet.google_pay.connector_list = "stripe,adyen,cybersource" wallet.google_pay.connector_list = "stripe,adyen,cybersource"
wallet.paypal.connector_list = "adyen" wallet.paypal.connector_list = "adyen"
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} bank_redirect.ideal.connector_list = "stripe,adyen,globalpay"
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"
bank_redirect.giropay.connector_list = "adyen,globalpay"
[mandates.update_mandate_supported] [mandates.update_mandate_supported]
card.credit ={connector_list ="cybersource"} card.credit ={connector_list ="cybersource"}

View File

@ -486,6 +486,7 @@ bank_debit.becs = { connector_list = "gocardless"}
bank_debit.sepa = { connector_list = "gocardless"} bank_debit.sepa = { connector_list = "gocardless"}
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"}
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"}
bank_redirect.giropay = {connector_list = "adyen,globalpay"}
[mandates.update_mandate_supported] [mandates.update_mandate_supported]
card.credit ={connector_list ="cybersource"} card.credit ={connector_list ="cybersource"}

View File

@ -351,6 +351,8 @@ bank_debit.becs = { connector_list = "gocardless"}
bank_debit.sepa = { connector_list = "gocardless"} bank_debit.sepa = { connector_list = "gocardless"}
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"}
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"}
bank_redirect.giropay = {connector_list = "adyen,globalpay"}
[connector_customer] [connector_customer]
connector_list = "gocardless,stax,stripe" connector_list = "gocardless,stax,stripe"

View File

@ -1289,7 +1289,7 @@ pub enum BankRedirectData {
}, },
Giropay { Giropay {
/// The billing details for bank redirection /// The billing details for bank redirection
billing_details: BankRedirectBilling, billing_details: Option<BankRedirectBilling>,
/// Bank account details for Giropay /// Bank account details for Giropay
#[schema(value_type = Option<String>)] #[schema(value_type = Option<String>)]

View File

@ -4482,13 +4482,225 @@ impl Default for super::settings::RequiredFields {
ConnectorFields { ConnectorFields {
fields: HashMap::from([ fields: HashMap::from([
( (
enums::Connector::Stripe, enums::Connector::Aci,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::from([
(
"payment_method_data.bank_redirect.giropay.country".to_string(),
RequiredFieldInfo {
required_field: "payment_method_data.bank_redirect.giropay.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::UserCountry {
options: vec![
"DE".to_string(),
]},
value: None,
}
)
]),
common: HashMap::new(),
}
),
(
enums::Connector::Adyen,
RequiredFieldFinal { RequiredFieldFinal {
mandate: HashMap::new(), mandate: HashMap::new(),
non_mandate: HashMap::new(), non_mandate: HashMap::new(),
common: HashMap::new(), common: HashMap::new(),
} }
), ),
(
enums::Connector::Globalpay,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::new(),
common: HashMap::from([
("billing.address.country".to_string(),
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::UserAddressCountry {
options: vec![
"DE".to_string(),
]
},
value: None,
}
)
]),
}
),
(
enums::Connector::Mollie,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::new(),
common: HashMap::new(),
}
),
(
enums::Connector::Nuvei,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate:HashMap::from([
(
"email".to_string(),
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::UserEmailAddress,
value: None,
}
),
(
"billing.address.first_name".to_string(),
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "billing_first_name".to_string(),
field_type: enums::FieldType::UserBillingName,
value: None,
}
),
(
"billing.address.last_name".to_string(),
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "billing_last_name".to_string(),
field_type: enums::FieldType::UserBillingName,
value: None,
}
),
(
"billing.address.country".to_string(),
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::UserAddressCountry{
options: vec![
"DE".to_string(),
]
},
value: None,
}
)]
),
common: HashMap::new(),
}
),
(
enums::Connector::Paypal,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::from([
("payment_method_data.bank_redirect.giropay.country".to_string(),
RequiredFieldInfo {
required_field: "payment_method_data.bank_redirect.giropay.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::UserCountry {
options: vec![
"DE".to_string(),
]
},
value: None,
}
),
(
"payment_method_data.bank_redirect.giropay.billing_details.billing_name".to_string(),
RequiredFieldInfo {
required_field: "payment_method_data.bank_redirect.giropay.billing_details.billing_name".to_string(),
display_name: "billing_name".to_string(),
field_type: enums::FieldType::UserBillingName,
value: None,
}
)
]),
common: HashMap::new(),
}
),
(
enums::Connector::Stripe,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::from([
("payment_method_data.bank_redirect.giropay.billing_details.billing_name".to_string(),
RequiredFieldInfo {
required_field: "payment_method_data.bank_redirect.giropay.billing_details.billing_name".to_string(),
display_name: "billing_name".to_string(),
field_type: enums::FieldType::UserBillingName,
value: None,
}
)
]),
common: HashMap::new(),
}
),
(
enums::Connector::Shift4,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::new(),
common: HashMap::new(),
}
),
(
enums::Connector::Trustpay,
RequiredFieldFinal {
mandate: HashMap::new(),
non_mandate: HashMap::from([
(
"billing.address.first_name".to_string(),
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "billing_first_name".to_string(),
field_type: enums::FieldType::UserBillingName,
value: None,
}
),
(
"billing.address.line1".to_string(),
RequiredFieldInfo {
required_field: "billing.address.line1".to_string(),
display_name: "line1".to_string(),
field_type: enums::FieldType::UserAddressLine1,
value: None,
}
),
(
"billing.address.city".to_string(),
RequiredFieldInfo {
required_field: "billing.address.city".to_string(),
display_name: "city".to_string(),
field_type: enums::FieldType::UserAddressCity,
value: None,
}
),
(
"billing.address.zip".to_string(),
RequiredFieldInfo {
required_field: "billing.address.zip".to_string(),
display_name: "zip".to_string(),
field_type: enums::FieldType::UserAddressPincode,
value: None,
}
),
(
"billing.address.country".to_string(),
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::UserAddressCountry {
options: vec![
"DE".to_string(),
]
},
value: None,
}
),
]),
common: HashMap::new(),
}
),
]), ]),
}, },
), ),

View File

@ -166,10 +166,15 @@ impl
api_models::payments::BankRedirectData::Giropay { api_models::payments::BankRedirectData::Giropay {
bank_account_bic, bank_account_bic,
bank_account_iban, bank_account_iban,
country,
.. ..
} => Self::BankRedirect(Box::new(BankRedirectionPMData { } => Self::BankRedirect(Box::new(BankRedirectionPMData {
payment_brand: PaymentBrand::Giropay, payment_brand: PaymentBrand::Giropay,
bank_account_country: Some(api_models::enums::CountryAlpha2::DE), bank_account_country: Some(country.ok_or(
errors::ConnectorError::MissingRequiredField {
field_name: "giropay.country",
},
)?),
bank_account_bank_name: None, bank_account_bank_name: None,
bank_account_bic: bank_account_bic.clone(), bank_account_bic: bank_account_bic.clone(),
bank_account_iban: bank_account_iban.clone(), bank_account_iban: bank_account_iban.clone(),

View File

@ -315,7 +315,12 @@ fn get_payment_source(
country, country,
.. ..
} => Ok(PaymentSourceItem::Giropay(RedirectRequest { } => Ok(PaymentSourceItem::Giropay(RedirectRequest {
name: billing_details.get_billing_name()?, name: billing_details
.clone()
.ok_or(errors::ConnectorError::MissingRequiredField {
field_name: "giropay.billing_details",
})?
.get_billing_name()?,
country_code: country.ok_or(errors::ConnectorError::MissingRequiredField { country_code: country.ok_or(errors::ConnectorError::MissingRequiredField {
field_name: "giropay.country", field_name: "giropay.country",
})?, })?,

View File

@ -18,7 +18,8 @@ use url::Url;
use crate::{ use crate::{
collect_missing_value_keys, collect_missing_value_keys,
connector::utils::{ connector::utils::{
self as connector_util, ApplePay, ApplePayDecrypt, PaymentsPreProcessingData, RouterData, self as connector_util, ApplePay, ApplePayDecrypt, BankRedirectBillingData,
PaymentsPreProcessingData, RouterData,
}, },
consts, consts,
core::errors, core::errors,
@ -1111,7 +1112,14 @@ impl TryFrom<(&payments::BankRedirectData, Option<bool>)> for StripeBillingAddre
payments::BankRedirectData::Giropay { payments::BankRedirectData::Giropay {
billing_details, .. billing_details, ..
} => Ok(Self { } => Ok(Self {
name: billing_details.billing_name.clone(), name: Some(
billing_details
.clone()
.ok_or(errors::ConnectorError::MissingRequiredField {
field_name: "giropay.billing_details",
})?
.get_billing_name()?,
),
..Self::default() ..Self::default()
}), }),
payments::BankRedirectData::Ideal { payments::BankRedirectData::Ideal {

View File

@ -5,7 +5,7 @@ use serde::{Deserialize, Serialize};
use url::Url; use url::Url;
use crate::{ use crate::{
connector::utils::{self, CardData}, connector::utils::{self, BankRedirectBillingData, CardData},
core::errors, core::errors,
services, services,
types::{ types::{
@ -385,11 +385,12 @@ fn make_bank_redirect_request(
{ {
PaymentMethodSpecificData::PaymentProduct816SpecificInput(Box::new(Giropay { PaymentMethodSpecificData::PaymentProduct816SpecificInput(Box::new(Giropay {
bank_account_iban: BankAccountIban { bank_account_iban: BankAccountIban {
account_holder_name: billing_details.billing_name.clone().ok_or( account_holder_name: billing_details
errors::ConnectorError::MissingRequiredField { .clone()
field_name: "billing_details.billing_name", .ok_or(errors::ConnectorError::MissingRequiredField {
}, field_name: "giropay.billing_details",
)?, })?
.get_billing_name()?,
iban: bank_account_iban.clone(), iban: bank_account_iban.clone(),
}, },
})) }))

View File

@ -251,6 +251,8 @@ bank_debit.becs = { connector_list = "gocardless"}
bank_debit.sepa = { connector_list = "gocardless"} bank_debit.sepa = { connector_list = "gocardless"}
bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"} bank_redirect.ideal = {connector_list = "stripe,adyen,globalpay"}
bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"} bank_redirect.sofort = {connector_list = "stripe,adyen,globalpay"}
bank_redirect.giropay = {connector_list = "adyen,globalpay"}
[mandates.update_mandate_supported] [mandates.update_mandate_supported]
card.credit ={connector_list ="cybersource"} card.credit ={connector_list ="cybersource"}

View File

@ -5227,12 +5227,16 @@
"giropay": { "giropay": {
"type": "object", "type": "object",
"required": [ "required": [
"billing_details",
"country" "country"
], ],
"properties": { "properties": {
"billing_details": { "billing_details": {
"$ref": "#/components/schemas/BankRedirectBilling" "allOf": [
{
"$ref": "#/components/schemas/BankRedirectBilling"
}
],
"nullable": true
}, },
"bank_account_bic": { "bank_account_bic": {
"type": "string", "type": "string",