feat: list payment_methods with the required fields in each method (#1310)

Co-authored-by: Sangamesh Kulkarni <59434228+Sangamesh26@users.noreply.github.com>
Co-authored-by: Prasunna Soppa <prasunna.soppa@juspay.in>
This commit is contained in:
Chethan Rao
2023-07-04 19:11:55 +05:30
committed by GitHub
parent 04c60d73cb
commit 6447b04574
8 changed files with 1004 additions and 3 deletions

View File

@ -1,3 +1,9 @@
use std::collections::HashMap;
use api_models::{enums, payment_methods::RequiredFieldInfo};
use super::settings::{ConnectorFields, PaymentMethodType};
impl Default for super::settings::Server {
fn default() -> Self {
Self {
@ -137,6 +143,811 @@ impl Default for super::settings::DrainerSettings {
}
}
impl Default for super::settings::RequiredFields {
fn default() -> Self {
Self(HashMap::from([
(
enums::PaymentMethod::Card,
PaymentMethodType(HashMap::from([(
enums::PaymentMethodType::Debit,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Aci,
vec![RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Bluesnap,
vec![
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Bambora,
vec![RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Cybersource,
vec![
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.phone.number".to_string(),
display_name: "phone_number".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.phone.country_code".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.line1".to_string(),
display_name: "line1".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.city".to_string(),
display_name: "city".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.state".to_string(),
display_name: "state".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.zip".to_string(),
display_name: "zip".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
),
(
enums::Connector::Dlocal,
vec![
RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Forte,
vec![
RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Globalpay,
vec![RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
}],
),
(
enums::Connector::Iatapay,
vec![RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
}],
),
(
enums::Connector::Multisafepay,
vec![
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.line1".to_string(),
display_name: "line1".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.line2".to_string(),
display_name: "line2".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.city".to_string(),
display_name: "city".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.zip".to_string(),
display_name: "zip".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
),
(
enums::Connector::Noon,
vec![RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Opennode,
vec![RequiredFieldInfo {
required_field: "description".to_string(),
display_name: "description".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Payu,
vec![RequiredFieldInfo {
required_field: "description".to_string(),
display_name: "description".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Rapyd,
vec![RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Shift4,
vec![RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Trustpay,
vec![
RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.line1".to_string(),
display_name: "line1".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.city".to_string(),
display_name: "city".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.zip".to_string(),
display_name: "zip".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "browser_info".to_string(),
display_name: "browser_info".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Worldline,
vec![RequiredFieldInfo {
required_field: "card.card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Zen,
vec![
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "browser_info".to_string(),
display_name: "browser_info".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "description".to_string(),
display_name: "description".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "metadata.order_details".to_string(),
display_name: "order_details".to_string(),
field_type: enums::FieldType::Text,
},
],
),
]),
},
)])),
),
(
enums::PaymentMethod::BankRedirect,
PaymentMethodType(HashMap::from([
(
enums::PaymentMethodType::Ach,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Stripe,
vec![RequiredFieldInfo {
required_field: "currency".to_string(),
display_name: "currency".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Adyen,
vec![RequiredFieldInfo {
required_field: "card_holder_name".to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
]),
},
),
(
enums::PaymentMethodType::Przelewy24,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Stripe,
vec![RequiredFieldInfo {
required_field: "bank_name".to_string(),
display_name: "bank_name".to_string(),
field_type: enums::FieldType::Text,
}],
)]),
},
),
(
enums::PaymentMethodType::BancontactCard,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Stripe,
vec![RequiredFieldInfo {
required_field: "bancontact_card.billing_name".to_string(),
display_name: "billing_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Adyen,
vec![
RequiredFieldInfo {
required_field: "bancontact_card.card_number"
.to_string(),
display_name: "card_number".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "bancontact_card.card_exp_month"
.to_string(),
display_name: "card_exp_month".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "bancontact_card.card_exp_year"
.to_string(),
display_name: "card_exp_year".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "bancontact_card.card_holder_name"
.to_string(),
display_name: "card_holder_name".to_string(),
field_type: enums::FieldType::Text,
},
],
),
]),
},
),
(
enums::PaymentMethodType::Sepa,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Adyen,
vec![RequiredFieldInfo {
required_field: "bank_account_holder_name".to_string(),
display_name: "bank_account_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
)]),
},
),
(
enums::PaymentMethodType::Bacs,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Adyen,
vec![RequiredFieldInfo {
required_field: "bank_account_holder_name".to_string(),
display_name: "bank_account_holder_name".to_string(),
field_type: enums::FieldType::Text,
}],
)]),
},
),
(
enums::PaymentMethodType::Giropay,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Worldline,
vec![RequiredFieldInfo {
required_field: "giropay.billing_details.billing_name"
.to_string(),
display_name: "billing_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
),
]),
},
),
(
enums::PaymentMethodType::Ideal,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Worldline,
vec![RequiredFieldInfo {
required_field: "ideal.bank_name".to_string(),
display_name: "bank_name".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "ideal.bank_name".to_string(),
display_name: "bank_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.first_name"
.to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
),
]),
},
),
(
enums::PaymentMethodType::Sofort,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
)]),
},
),
(
enums::PaymentMethodType::Eps,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
)]),
},
),
])),
),
(
enums::PaymentMethod::Wallet,
PaymentMethodType(HashMap::from([
(
enums::PaymentMethodType::ApplePay,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Bluesnap,
vec![RequiredFieldInfo {
required_field: "billing_address".to_string(),
display_name: "billing_address".to_string(),
field_type: enums::FieldType::Text,
}],
),
(
enums::Connector::Zen,
vec![RequiredFieldInfo {
required_field: "metadata.order_details".to_string(),
display_name: "order_details".to_string(),
field_type: enums::FieldType::Text,
}],
),
]),
},
),
(
enums::PaymentMethodType::Paypal,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Mollie,
vec![
RequiredFieldInfo {
required_field: "billing_address".to_string(),
display_name: "billing_address".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "shipping_address".to_string(),
display_name: "shipping_address".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
),
]),
},
),
(
enums::PaymentMethodType::GooglePay,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Zen,
vec![RequiredFieldInfo {
required_field: "metadata.order_details".to_string(),
display_name: "order_details".to_string(),
field_type: enums::FieldType::Text,
}],
)]),
},
),
])),
),
(
enums::PaymentMethod::PayLater,
PaymentMethodType(HashMap::from([
(
enums::PaymentMethodType::AfterpayClearpay,
ConnectorFields {
fields: HashMap::from([
(
enums::Connector::Stripe,
vec![
RequiredFieldInfo {
required_field: "shipping.address.first_name"
.to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "shipping.address.line1".to_string(),
display_name: "line1".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "shipping.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
RequiredFieldInfo {
required_field: "shipping.address.zip".to_string(),
display_name: "zip".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Adyen,
vec![
RequiredFieldInfo {
required_field: "shipping.address.first_name"
.to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "shipping.address.line1".to_string(),
display_name: "line1".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "shipping.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
RequiredFieldInfo {
required_field: "shipping.address.zip".to_string(),
display_name: "zip".to_string(),
field_type: enums::FieldType::Text,
},
],
),
(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "billing.address.first_name"
.to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
),
]),
},
),
(
enums::PaymentMethodType::Klarna,
ConnectorFields {
fields: HashMap::from([(
enums::Connector::Nuvei,
vec![
RequiredFieldInfo {
required_field: "billing.address.first_name".to_string(),
display_name: "first_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.last_name".to_string(),
display_name: "last_name".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "email".to_string(),
display_name: "email".to_string(),
field_type: enums::FieldType::Text,
},
RequiredFieldInfo {
required_field: "billing.address.country".to_string(),
display_name: "country".to_string(),
field_type: enums::FieldType::DropDown {
options: vec!["US".to_string(), "IN".to_string()],
},
},
],
)]),
},
),
])),
),
]))
}
}
#[allow(clippy::derivable_impls)]
impl Default for super::settings::ApiKeys {
fn default() -> Self {

View File

@ -4,7 +4,7 @@ use std::{
str::FromStr,
};
use api_models::enums;
use api_models::{enums, payment_methods::RequiredFieldInfo};
use common_utils::ext_traits::ConfigExt;
use config::{Environment, File};
#[cfg(feature = "email")]
@ -83,6 +83,7 @@ pub struct Settings {
pub dummy_connector: DummyConnector,
#[cfg(feature = "email")]
pub email: EmailSettings,
pub required_fields: RequiredFields,
pub delayed_session_response: DelayedSessionConfig,
}
@ -223,6 +224,17 @@ pub struct NotAvailableFlows {
pub capture_method: Option<enums::CaptureMethod>,
}
#[derive(Debug, Deserialize, Clone)]
pub struct RequiredFields(pub HashMap<enums::PaymentMethod, PaymentMethodType>);
#[derive(Debug, Deserialize, Clone)]
pub struct PaymentMethodType(pub HashMap<enums::PaymentMethodType, ConnectorFields>);
#[derive(Debug, Deserialize, Clone)]
pub struct ConnectorFields {
pub fields: HashMap<enums::Connector, Vec<RequiredFieldInfo>>,
}
fn string_set_deser<'a, D>(
deserializer: D,
) -> Result<Option<HashSet<api_models::enums::CountryAlpha2>>, D::Error>

View File

@ -1,10 +1,13 @@
use std::collections::{HashMap, HashSet};
use std::{
collections::{HashMap, HashSet},
str::FromStr,
};
use api_models::{
admin::{self, PaymentMethodsEnabled},
enums::{self as api_enums},
payment_methods::{
CardNetworkTypes, PaymentExperienceTypes, RequestPaymentMethodTypes,
CardNetworkTypes, PaymentExperienceTypes, RequestPaymentMethodTypes, RequiredFieldInfo,
ResponsePaymentMethodIntermediate, ResponsePaymentMethodTypes,
ResponsePaymentMethodsEnabled,
},
@ -860,11 +863,56 @@ pub async fn list_payment_methods(
let mut bank_transfer_consolidated_hm =
HashMap::<api_enums::PaymentMethodType, Vec<String>>::new();
let mut required_fields_hm = HashMap::<
api_enums::PaymentMethod,
HashMap<api_enums::PaymentMethodType, HashSet<RequiredFieldInfo>>,
>::new();
for element in response.clone() {
let payment_method = element.payment_method;
let payment_method_type = element.payment_method_type;
let connector = element.connector.clone();
let connector_variant = api_enums::Connector::from_str(connector.as_str())
.into_report()
.change_context(errors::ConnectorError::InvalidConnectorName)
.change_context(errors::ApiErrorResponse::InvalidDataValue {
field_name: "connector",
})
.attach_printable_lazy(|| format!("unable to parse connector name {connector:?}"))?;
state.conf.required_fields.0.get(&payment_method).map(
|required_fields_hm_for_each_payment_method_type| {
required_fields_hm_for_each_payment_method_type
.0
.get(&payment_method_type)
.map(|required_fields_hm_for_each_connector| {
required_fields_hm
.entry(payment_method)
.or_insert(HashMap::new());
required_fields_hm_for_each_connector
.fields
.get(&connector_variant)
.map(|required_fields_vec| {
// If payment_method_type already exist in required_fields_hm, extend the required_fields hs to existing hs.
let required_fields_hs =
HashSet::from_iter(required_fields_vec.iter().cloned());
let existing_req_fields_hs = required_fields_hm
.get_mut(&payment_method)
.and_then(|inner_hm| inner_hm.get_mut(&payment_method_type));
if let Some(inner_hs) = existing_req_fields_hs {
inner_hs.extend(required_fields_hs);
} else {
required_fields_hm.get_mut(&payment_method).map(|inner_hm| {
inner_hm.insert(payment_method_type, required_fields_hs)
});
}
})
})
},
);
if let Some(payment_experience) = element.payment_experience {
if let Some(payment_method_hm) =
payment_experiences_consolidated_hm.get_mut(&payment_method)
@ -993,6 +1041,11 @@ pub async fn list_payment_methods(
bank_names: None,
bank_debits: None,
bank_transfers: None,
// Required fields for PayLater payment method
required_fields: required_fields_hm
.get(key.0)
.and_then(|inner_hm| inner_hm.get(payment_method_types_hm.0))
.cloned(),
})
}
@ -1020,6 +1073,11 @@ pub async fn list_payment_methods(
bank_names: None,
bank_debits: None,
bank_transfers: None,
// Required fields for Card payment method
required_fields: required_fields_hm
.get(key.0)
.and_then(|inner_hm| inner_hm.get(payment_method_types_hm.0))
.cloned(),
})
}
@ -1043,6 +1101,11 @@ pub async fn list_payment_methods(
card_networks: None,
bank_debits: None,
bank_transfers: None,
// Required fields for BankRedirect payment method
required_fields: required_fields_hm
.get(&api_enums::PaymentMethod::BankRedirect)
.and_then(|inner_hm| inner_hm.get(key.0))
.cloned(),
}
})
}
@ -1069,6 +1132,11 @@ pub async fn list_payment_methods(
eligible_connectors: connectors.clone(),
}),
bank_transfers: None,
// Required fields for BankDebit payment method
required_fields: required_fields_hm
.get(&api_enums::PaymentMethod::BankDebit)
.and_then(|inner_hm| inner_hm.get(key.0))
.cloned(),
}
})
}
@ -1095,6 +1163,11 @@ pub async fn list_payment_methods(
bank_transfers: Some(api_models::payment_methods::BankTransferTypes {
eligible_connectors: connectors,
}),
// Required fields for BankTransfer payment method
required_fields: required_fields_hm
.get(&api_enums::PaymentMethod::BankTransfer)
.and_then(|inner_hm| inner_hm.get(key.0))
.cloned(),
}
})
}

View File

@ -150,6 +150,7 @@ Never share your secret api keys. Keep them guarded and secure.
api_models::enums::DisputeStage,
api_models::enums::DisputeStatus,
api_models::enums::CountryAlpha2,
api_models::enums::FieldType,
api_models::enums::FrmAction,
api_models::enums::FrmPreferredFlowTypes,
api_models::enums::RetryAction,
@ -249,6 +250,7 @@ Never share your secret api keys. Keep them guarded and secure.
api_models::payments::SepaBankTransferInstructions,
api_models::payments::BacsBankTransferInstructions,
api_models::payments::RedirectResponse,
api_models::payment_methods::RequiredFieldInfo,
api_models::refunds::RefundListRequest,
api_models::refunds::RefundListResponse,
api_models::refunds::TimeRange,