diff --git a/api-reference/openapi_spec.json b/api-reference/openapi_spec.json index e0a7228c16..dc0bd4ef07 100644 --- a/api-reference/openapi_spec.json +++ b/api-reference/openapi_spec.json @@ -6170,6 +6170,17 @@ } } } + }, + { + "type": "object", + "required": [ + "local_bank_redirect" + ], + "properties": { + "local_bank_redirect": { + "type": "object" + } + } } ] }, @@ -13181,6 +13192,7 @@ "crypto", "bank_debit", "reward", + "real_time_payment", "upi", "voucher", "gift_card" @@ -13377,6 +13389,18 @@ } } }, + { + "type": "object", + "title": "RealTimePayment", + "required": [ + "real_time_payment" + ], + "properties": { + "real_time_payment": { + "$ref": "#/components/schemas/RealTimePaymentData" + } + } + }, { "type": "object", "title": "Crypto", @@ -13738,8 +13762,10 @@ "dana", "danamon_va", "debit", + "duit_now", "efecty", "eps", + "fps", "evoucher", "giropay", "givex", @@ -13751,6 +13777,7 @@ "indomaret", "klarna", "kakao_pay", + "local_bank_redirect", "mandiri_va", "knet", "mb_way", @@ -13773,6 +13800,7 @@ "pix", "pay_safe_card", "przelewy24", + "prompt_pay", "pse", "red_compra", "red_pagos", @@ -13786,6 +13814,7 @@ "upi_collect", "upi_intent", "vipps", + "viet_qr", "venmo", "walley", "we_chat_pay", @@ -17348,6 +17377,54 @@ } } }, + "RealTimePaymentData": { + "oneOf": [ + { + "type": "object", + "required": [ + "fps" + ], + "properties": { + "fps": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "duit_now" + ], + "properties": { + "duit_now": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "prompt_pay" + ], + "properties": { + "prompt_pay": { + "type": "object" + } + } + }, + { + "type": "object", + "required": [ + "viet_qr" + ], + "properties": { + "viet_qr": { + "type": "object" + } + } + } + ] + }, "ReceiverDetails": { "type": "object", "required": [ diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml index 180cf56db4..a8ddbc55f5 100644 --- a/config/deployments/sandbox.toml +++ b/config/deployments/sandbox.toml @@ -288,6 +288,7 @@ mifinity = { country = "BR,CN,SG,MY,DE,CH,DK,GB,ES,AD,GI,FI,FR,GR,HR,IT,JP,MX,AR [pm_filters.prophetpay] card_redirect.currency = "USD" + [pm_filters.stax] ach = { country = "US", currency = "USD" } diff --git a/config/development.toml b/config/development.toml index 2fcac14fb1..9a40a99cfc 100644 --- a/config/development.toml +++ b/config/development.toml @@ -438,6 +438,8 @@ local_bank_transfer = { country = "CN", currency = "CNY" } credit = { not_available_flows = { capture_method = "manual" } } debit = { not_available_flows = { capture_method = "manual" } } + + [pm_filters.mollie] credit = { not_available_flows = { capture_method = "manual" } } debit = { not_available_flows = { capture_method = "manual" } } diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index dbb1751a52..c2418d78ec 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -1437,6 +1437,7 @@ mod payment_method_data_serde { | PaymentMethodData::BankDebit(_) | PaymentMethodData::BankRedirect(_) | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::RealTimePayment(_) | PaymentMethodData::CardToken(_) | PaymentMethodData::Crypto(_) | PaymentMethodData::GiftCard(_) @@ -1485,6 +1486,8 @@ pub enum PaymentMethodData { BankDebit(BankDebitData), #[schema(title = "BankTransfer")] BankTransfer(Box), + #[schema(title = "RealTimePayment")] + RealTimePayment(Box), #[schema(title = "Crypto")] Crypto(CryptoData), #[schema(title = "MandatePayment")] @@ -1518,6 +1521,7 @@ impl GetAddressFromPaymentMethodData for PaymentMethodData { Self::Voucher(voucher_data) => voucher_data.get_billing_address(), Self::Crypto(_) | Self::Reward + | Self::RealTimePayment(_) | Self::Upi(_) | Self::GiftCard(_) | Self::CardToken(_) @@ -1552,6 +1556,7 @@ impl PaymentMethodData { Self::BankRedirect(_) => Some(api_enums::PaymentMethod::BankRedirect), Self::BankDebit(_) => Some(api_enums::PaymentMethod::BankDebit), Self::BankTransfer(_) => Some(api_enums::PaymentMethod::BankTransfer), + Self::RealTimePayment(_) => Some(api_enums::PaymentMethod::RealTimePayment), Self::Crypto(_) => Some(api_enums::PaymentMethod::Crypto), Self::Reward => Some(api_enums::PaymentMethod::Reward), Self::Upi(_) => Some(api_enums::PaymentMethod::Upi), @@ -1651,6 +1656,7 @@ impl GetPaymentMethodType for BankRedirectData { Self::OnlineBankingThailand { .. } => { api_enums::PaymentMethodType::OnlineBankingThailand } + Self::LocalBankRedirect { .. } => api_enums::PaymentMethodType::LocalBankRedirect, } } } @@ -1693,6 +1699,17 @@ impl GetPaymentMethodType for CryptoData { } } +impl GetPaymentMethodType for RealTimePaymentData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::Fps {} => api_enums::PaymentMethodType::Fps, + Self::DuitNow {} => api_enums::PaymentMethodType::DuitNow, + Self::PromptPay {} => api_enums::PaymentMethodType::PromptPay, + Self::VietQr {} => api_enums::PaymentMethodType::VietQr, + } + } +} + impl GetPaymentMethodType for UpiData { fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { match self { @@ -1803,6 +1820,7 @@ pub enum AdditionalPaymentData { BankDebit {}, MandatePayment {}, Reward {}, + RealTimePayment {}, Upi {}, GiftCard {}, Voucher {}, @@ -1948,6 +1966,7 @@ pub enum BankRedirectData { #[schema(value_type = BankNames)] issuer: common_enums::BankNames, }, + LocalBankRedirect {}, } impl GetAddressFromPaymentMethodData for BankRedirectData { @@ -2057,6 +2076,7 @@ impl GetAddressFromPaymentMethodData for BankRedirectData { } => get_billing_address_inner(Some(billing_details), None, None), Self::Trustly { country } => get_billing_address_inner(None, Some(country), None), Self::OnlineBankingFpx { .. } + | Self::LocalBankRedirect {} | Self::OnlineBankingThailand { .. } | Self::Bizum {} | Self::OnlineBankingPoland { .. } @@ -2266,6 +2286,15 @@ pub enum BankTransferData { }, } +#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize, ToSchema)] +#[serde(rename_all = "snake_case")] +pub enum RealTimePaymentData { + Fps {}, + DuitNow {}, + PromptPay {}, + VietQr {}, +} + impl GetAddressFromPaymentMethodData for BankTransferData { fn get_billing_address(&self) -> Option
{ match self { @@ -2734,6 +2763,7 @@ where | PaymentMethodDataResponse::GiftCard {} | PaymentMethodDataResponse::PayLater {} | PaymentMethodDataResponse::Paypal {} + | PaymentMethodDataResponse::RealTimePayment {} | PaymentMethodDataResponse::Upi {} | PaymentMethodDataResponse::Wallet {} | PaymentMethodDataResponse::BankTransfer {} @@ -2764,6 +2794,7 @@ pub enum PaymentMethodDataResponse { BankDebit {}, MandatePayment {}, Reward {}, + RealTimePayment {}, Upi {}, Voucher {}, GiftCard {}, @@ -3880,6 +3911,7 @@ impl From for PaymentMethodDataResponse { AdditionalPaymentData::BankDebit {} => Self::BankDebit {}, AdditionalPaymentData::MandatePayment {} => Self::MandatePayment {}, AdditionalPaymentData::Reward {} => Self::Reward {}, + AdditionalPaymentData::RealTimePayment {} => Self::RealTimePayment {}, AdditionalPaymentData::Upi {} => Self::Upi {}, AdditionalPaymentData::BankTransfer {} => Self::BankTransfer {}, AdditionalPaymentData::Voucher {} => Self::Voucher {}, diff --git a/crates/api_models/src/routing.rs b/crates/api_models/src/routing.rs index a7c4ed2447..66f3ff558e 100644 --- a/crates/api_models/src/routing.rs +++ b/crates/api_models/src/routing.rs @@ -116,6 +116,7 @@ impl EuclidDirFilter for ConnectorSelection { DirKeyKind::VoucherType, DirKeyKind::CardRedirectType, DirKeyKind::BankTransferType, + DirKeyKind::RealTimePaymentType, ]; } diff --git a/crates/api_models/src/surcharge_decision_configs.rs b/crates/api_models/src/surcharge_decision_configs.rs index 9c2d1ac26e..1f62dd2997 100644 --- a/crates/api_models/src/surcharge_decision_configs.rs +++ b/crates/api_models/src/surcharge_decision_configs.rs @@ -41,6 +41,7 @@ impl EuclidDirFilter for SurchargeDecisionConfigs { DirKeyKind::BankRedirectType, DirKeyKind::BankDebitType, DirKeyKind::CryptoType, + DirKeyKind::RealTimePaymentType, ]; } diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index 530d8fcdda..5d6b9c1489 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -1394,8 +1394,10 @@ pub enum PaymentMethodType { Dana, DanamonVa, Debit, + DuitNow, Efecty, Eps, + Fps, Evoucher, Giropay, Givex, @@ -1407,6 +1409,7 @@ pub enum PaymentMethodType { Indomaret, Klarna, KakaoPay, + LocalBankRedirect, MandiriVa, Knet, MbWay, @@ -1429,6 +1432,7 @@ pub enum PaymentMethodType { Pix, PaySafeCard, Przelewy24, + PromptPay, Pse, RedCompra, RedPagos, @@ -1442,6 +1446,7 @@ pub enum PaymentMethodType { UpiCollect, UpiIntent, Vipps, + VietQr, Venmo, Walley, WeChatPay, @@ -1486,6 +1491,7 @@ pub enum PaymentMethod { Crypto, BankDebit, Reward, + RealTimePayment, Upi, Voucher, GiftCard, diff --git a/crates/common_enums/src/transformers.rs b/crates/common_enums/src/transformers.rs index c92fe95d85..fc39cd1cf5 100644 --- a/crates/common_enums/src/transformers.rs +++ b/crates/common_enums/src/transformers.rs @@ -1815,6 +1815,8 @@ impl From for PaymentMethod { PaymentMethodType::Dana => Self::Wallet, PaymentMethodType::DanamonVa => Self::BankTransfer, PaymentMethodType::Debit => Self::Card, + PaymentMethodType::Fps => Self::RealTimePayment, + PaymentMethodType::DuitNow => Self::RealTimePayment, PaymentMethodType::Eps => Self::BankRedirect, PaymentMethodType::Evoucher => Self::Reward, PaymentMethodType::Giropay => Self::BankRedirect, @@ -1826,6 +1828,7 @@ impl From for PaymentMethod { PaymentMethodType::Klarna => Self::PayLater, PaymentMethodType::KakaoPay => Self::Wallet, PaymentMethodType::Knet => Self::CardRedirect, + PaymentMethodType::LocalBankRedirect => Self::BankRedirect, PaymentMethodType::MbWay => Self::Wallet, PaymentMethodType::MobilePay => Self::Wallet, PaymentMethodType::Momo => Self::Wallet, @@ -1848,6 +1851,7 @@ impl From for PaymentMethod { PaymentMethodType::Paypal => Self::Wallet, PaymentMethodType::PaySafeCard => Self::GiftCard, PaymentMethodType::Przelewy24 => Self::BankRedirect, + PaymentMethodType::PromptPay => Self::RealTimePayment, PaymentMethodType::SamsungPay => Self::Wallet, PaymentMethodType::Sepa => Self::BankDebit, PaymentMethodType::Sofort => Self::BankRedirect, @@ -1858,6 +1862,7 @@ impl From for PaymentMethod { PaymentMethodType::UpiIntent => Self::Upi, PaymentMethodType::Vipps => Self::Wallet, PaymentMethodType::Venmo => Self::Wallet, + PaymentMethodType::VietQr => Self::RealTimePayment, PaymentMethodType::Walley => Self::PayLater, PaymentMethodType::WeChatPay => Self::Wallet, PaymentMethodType::TouchNGo => Self::Wallet, diff --git a/crates/connector_configs/src/response_modifier.rs b/crates/connector_configs/src/response_modifier.rs index 6a1b433069..20eeef5f46 100644 --- a/crates/connector_configs/src/response_modifier.rs +++ b/crates/connector_configs/src/response_modifier.rs @@ -15,6 +15,7 @@ impl ConnectorApiIntegrationPayload { let mut crypto_details: Vec = Vec::new(); let mut bank_debit_details: Vec = Vec::new(); let mut reward_details: Vec = Vec::new(); + let mut real_time_payment_details: Vec = Vec::new(); let mut upi_details: Vec = Vec::new(); let mut voucher_details: Vec = Vec::new(); let mut gift_card_details: Vec = Vec::new(); @@ -148,6 +149,18 @@ impl ConnectorApiIntegrationPayload { } } } + api_models::enums::PaymentMethod::RealTimePayment => { + if let Some(payment_method_types) = methods.payment_method_types { + for method_type in payment_method_types { + real_time_payment_details.push(Provider { + payment_method_type: method_type.payment_method_type, + accepted_currencies: method_type.accepted_currencies.clone(), + accepted_countries: method_type.accepted_countries.clone(), + payment_experience: method_type.payment_experience, + }) + } + } + } api_models::enums::PaymentMethod::Upi => { if let Some(payment_method_types) = methods.payment_method_types { for method_type in payment_method_types { @@ -228,6 +241,13 @@ impl ConnectorApiIntegrationPayload { card_provider: None, }; + let real_time_payment = DashboardPaymentMethodPayload { + payment_method: api_models::enums::PaymentMethod::RealTimePayment, + payment_method_type: api_models::enums::PaymentMethod::RealTimePayment.to_string(), + provider: Some(real_time_payment_details), + card_provider: None, + }; + let wallet = DashboardPaymentMethodPayload { payment_method: api_models::enums::PaymentMethod::Wallet, payment_method_type: api_models::enums::PaymentMethod::Wallet.to_string(), @@ -295,6 +315,7 @@ impl ConnectorApiIntegrationPayload { upi, voucher, reward, + real_time_payment, wallet, bank_redirect, bank_debit, diff --git a/crates/connector_configs/src/transformer.rs b/crates/connector_configs/src/transformer.rs index e958fc5de0..f6b1372b48 100644 --- a/crates/connector_configs/src/transformer.rs +++ b/crates/connector_configs/src/transformer.rs @@ -134,6 +134,7 @@ impl DashboardRequestPayload { | PaymentMethod::Crypto | PaymentMethod::BankDebit | PaymentMethod::Reward + | PaymentMethod::RealTimePayment | PaymentMethod::Upi | PaymentMethod::Voucher | PaymentMethod::GiftCard diff --git a/crates/euclid/src/dssa/graph.rs b/crates/euclid/src/dssa/graph.rs index ba9d5fdddc..e6439a2f55 100644 --- a/crates/euclid/src/dssa/graph.rs +++ b/crates/euclid/src/dssa/graph.rs @@ -68,6 +68,7 @@ impl cgraph::NodeViz for dir::DirValue { Self::BusinessLabel(bl) => bl.value.to_string(), Self::SetupFutureUsage(sfu) => sfu.to_string(), Self::CardRedirectType(crt) => crt.to_string(), + Self::RealTimePaymentType(rtpt) => rtpt.to_string(), } } } diff --git a/crates/euclid/src/dssa/truth.rs b/crates/euclid/src/dssa/truth.rs index 388180eed5..7e79e4ddc6 100644 --- a/crates/euclid/src/dssa/truth.rs +++ b/crates/euclid/src/dssa/truth.rs @@ -26,5 +26,9 @@ pub static ANALYSIS_GRAPH: Lazy> GiftCardType(any); + + // Payment Method should be `RealTimePayment` for a RealTimePaymentType to + // be present + PaymentMethod(RealTimePayment) ->> RealTimePaymentType(any); } }); diff --git a/crates/euclid/src/frontend/ast/lowering.rs b/crates/euclid/src/frontend/ast/lowering.rs index ffce88a35d..48a1a0ab8b 100644 --- a/crates/euclid/src/frontend/ast/lowering.rs +++ b/crates/euclid/src/frontend/ast/lowering.rs @@ -272,6 +272,8 @@ fn lower_comparison_inner( dir::DirKeyKind::CardRedirectType => lower_enum!(CardRedirectType, value), + dir::DirKeyKind::RealTimePaymentType => lower_enum!(RealTimePaymentType, value), + dir::DirKeyKind::CardBin => { let validation_closure = |st: &String| -> Result<(), AnalysisErrorType> { if st.len() == 6 && st.chars().all(|x| x.is_ascii_digit()) { diff --git a/crates/euclid/src/frontend/dir.rs b/crates/euclid/src/frontend/dir.rs index f2b9ab9904..68a32a528b 100644 --- a/crates/euclid/src/frontend/dir.rs +++ b/crates/euclid/src/frontend/dir.rs @@ -311,6 +311,13 @@ pub enum DirKeyKind { )] #[serde(rename = "card_redirect")] CardRedirectType, + #[serde(rename = "real_time_payment")] + #[strum( + serialize = "real_time_payment", + detailed_message = "Supported types of real time payment method", + props(Category = "Payment Method Types") + )] + RealTimePaymentType, } pub trait EuclidDirFilter: Sized @@ -358,6 +365,7 @@ impl DirKeyKind { Self::BusinessLabel => types::DataType::StrValue, Self::SetupFutureUsage => types::DataType::EnumVariant, Self::CardRedirectType => types::DataType::EnumVariant, + Self::RealTimePaymentType => types::DataType::EnumVariant, } } pub fn get_value_set(&self) -> Option> { @@ -484,6 +492,11 @@ impl DirKeyKind { .map(DirValue::CardRedirectType) .collect(), ), + Self::RealTimePaymentType => Some( + enums::RealTimePaymentType::iter() + .map(DirValue::RealTimePaymentType) + .collect(), + ), } } } @@ -549,6 +562,8 @@ pub enum DirValue { SetupFutureUsage(enums::SetupFutureUsage), #[serde(rename = "card_redirect")] CardRedirectType(enums::CardRedirectType), + #[serde(rename = "real_time_payment")] + RealTimePaymentType(enums::RealTimePaymentType), } impl DirValue { @@ -582,6 +597,7 @@ impl DirValue { Self::CardRedirectType(_) => (DirKeyKind::CardRedirectType, None), Self::VoucherType(_) => (DirKeyKind::VoucherType, None), Self::GiftCardType(_) => (DirKeyKind::GiftCardType, None), + Self::RealTimePaymentType(_) => (DirKeyKind::RealTimePaymentType, None), }; DirKey::new(kind, data) @@ -616,6 +632,7 @@ impl DirValue { Self::BusinessLabel(_) => None, Self::SetupFutureUsage(_) => None, Self::CardRedirectType(_) => None, + Self::RealTimePaymentType(_) => None, } } @@ -655,6 +672,7 @@ impl DirValue { (Self::MandateType(mt1), Self::MandateType(mt2)) => mt1 == mt2, (Self::MandateAcceptanceType(mat1), Self::MandateAcceptanceType(mat2)) => mat1 == mat2, (Self::RewardType(rt1), Self::RewardType(rt2)) => rt1 == rt2, + (Self::RealTimePaymentType(rtp1), Self::RealTimePaymentType(rtp2)) => rtp1 == rtp2, (Self::Connector(c1), Self::Connector(c2)) => c1 == c2, (Self::BusinessLabel(bl1), Self::BusinessLabel(bl2)) => bl1 == bl2, (Self::SetupFutureUsage(sfu1), Self::SetupFutureUsage(sfu2)) => sfu1 == sfu2, diff --git a/crates/euclid/src/frontend/dir/enums.rs b/crates/euclid/src/frontend/dir/enums.rs index dd9a2da7a3..5d0defc735 100644 --- a/crates/euclid/src/frontend/dir/enums.rs +++ b/crates/euclid/src/frontend/dir/enums.rs @@ -149,6 +149,7 @@ pub enum BankRedirectType { BancontactCard, Blik, Interac, + LocalBankRedirect, OnlineBankingCzechRepublic, OnlineBankingFinland, OnlineBankingPoland, @@ -252,6 +253,28 @@ pub enum CryptoType { CryptoCurrency, } +#[derive( + Clone, + Debug, + Hash, + PartialEq, + Eq, + strum::Display, + strum::VariantNames, + strum::EnumIter, + strum::EnumString, + serde::Serialize, + serde::Deserialize, +)] +#[serde(rename_all = "snake_case")] +#[strum(serialize_all = "snake_case")] +pub enum RealTimePaymentType { + Fps, + DuitNow, + PromptPay, + VietQr, +} + #[derive( Clone, Debug, @@ -321,6 +344,7 @@ collect_variants!(BankRedirectType); collect_variants!(BankDebitType); collect_variants!(CryptoType); collect_variants!(RewardType); +collect_variants!(RealTimePaymentType); collect_variants!(UpiType); collect_variants!(VoucherType); collect_variants!(GiftCardType); diff --git a/crates/euclid/src/frontend/dir/lowering.rs b/crates/euclid/src/frontend/dir/lowering.rs index 1c4cfa7cfb..f91c63a816 100644 --- a/crates/euclid/src/frontend/dir/lowering.rs +++ b/crates/euclid/src/frontend/dir/lowering.rs @@ -154,6 +154,7 @@ impl From for global_enums::PaymentMethodType { enums::BankRedirectType::BancontactCard => Self::BancontactCard, enums::BankRedirectType::Blik => Self::Blik, enums::BankRedirectType::Interac => Self::Interac, + enums::BankRedirectType::LocalBankRedirect => Self::LocalBankRedirect, enums::BankRedirectType::OnlineBankingCzechRepublic => Self::OnlineBankingCzechRepublic, enums::BankRedirectType::OnlineBankingFinland => Self::OnlineBankingFinland, enums::BankRedirectType::OnlineBankingPoland => Self::OnlineBankingPoland, @@ -184,6 +185,17 @@ impl From for global_enums::PaymentMethodType { } } +impl From for global_enums::PaymentMethodType { + fn from(value: enums::RealTimePaymentType) -> Self { + match value { + enums::RealTimePaymentType::Fps => Self::Fps, + enums::RealTimePaymentType::DuitNow => Self::DuitNow, + enums::RealTimePaymentType::PromptPay => Self::PromptPay, + enums::RealTimePaymentType::VietQr => Self::VietQr, + } + } +} + /// Analyses of the lowering of the DirValues to EuclidValues . /// /// For example, @@ -209,6 +221,7 @@ fn lower_value(dir_value: dir::DirValue) -> Result EuclidValue::PaymentMethodType(crt.into()), dir::DirValue::BankRedirectType(brt) => EuclidValue::PaymentMethodType(brt.into()), dir::DirValue::CryptoType(ct) => EuclidValue::PaymentMethodType(ct.into()), + dir::DirValue::RealTimePaymentType(rtpt) => EuclidValue::PaymentMethodType(rtpt.into()), dir::DirValue::AuthenticationType(at) => EuclidValue::AuthenticationType(at), dir::DirValue::CaptureMethod(cm) => EuclidValue::CaptureMethod(cm), dir::DirValue::PaymentAmount(pa) => EuclidValue::PaymentAmount(pa), diff --git a/crates/euclid/src/frontend/dir/transformers.rs b/crates/euclid/src/frontend/dir/transformers.rs index ff4125712a..3f83ee3db0 100644 --- a/crates/euclid/src/frontend/dir/transformers.rs +++ b/crates/euclid/src/frontend/dir/transformers.rs @@ -11,7 +11,9 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet global_enums::PaymentMethodType::Giropay => Ok(dirval!(BankRedirectType = Giropay)), global_enums::PaymentMethodType::Ideal => Ok(dirval!(BankRedirectType = Ideal)), global_enums::PaymentMethodType::Sofort => Ok(dirval!(BankRedirectType = Sofort)), + global_enums::PaymentMethodType::DuitNow => Ok(dirval!(RealTimePaymentType = DuitNow)), global_enums::PaymentMethodType::Eps => Ok(dirval!(BankRedirectType = Eps)), + global_enums::PaymentMethodType::Fps => Ok(dirval!(RealTimePaymentType = Fps)), global_enums::PaymentMethodType::Klarna => Ok(dirval!(PayLaterType = Klarna)), global_enums::PaymentMethodType::Affirm => Ok(dirval!(PayLaterType = Affirm)), global_enums::PaymentMethodType::AfterpayClearpay => { @@ -33,6 +35,7 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet | global_enums::PaymentMethod::BankRedirect | global_enums::PaymentMethod::Crypto | global_enums::PaymentMethod::Reward + | global_enums::PaymentMethod::RealTimePayment | global_enums::PaymentMethod::Upi | global_enums::PaymentMethod::Voucher | global_enums::PaymentMethod::GiftCard => Err(AnalysisErrorType::NotSupported), @@ -47,6 +50,7 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet | global_enums::PaymentMethod::BankRedirect | global_enums::PaymentMethod::Crypto | global_enums::PaymentMethod::Reward + | global_enums::PaymentMethod::RealTimePayment | global_enums::PaymentMethod::Upi | global_enums::PaymentMethod::Voucher | global_enums::PaymentMethod::GiftCard => Err(AnalysisErrorType::NotSupported), @@ -62,6 +66,7 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet | global_enums::PaymentMethod::BankRedirect | global_enums::PaymentMethod::Crypto | global_enums::PaymentMethod::Reward + | global_enums::PaymentMethod::RealTimePayment | global_enums::PaymentMethod::Upi | global_enums::PaymentMethod::Voucher | global_enums::PaymentMethod::GiftCard => Err(AnalysisErrorType::NotSupported), @@ -102,6 +107,9 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet global_enums::PaymentMethodType::Przelewy24 => { Ok(dirval!(BankRedirectType = Przelewy24)) } + global_enums::PaymentMethodType::PromptPay => { + Ok(dirval!(RealTimePaymentType = PromptPay)) + } global_enums::PaymentMethodType::WeChatPay => Ok(dirval!(WalletType = WeChatPay)), global_enums::PaymentMethodType::ClassicReward => { @@ -116,12 +124,16 @@ impl IntoDirValue for (global_enums::PaymentMethodType, global_enums::PaymentMet global_enums::PaymentMethodType::Twint => Ok(dirval!(WalletType = Twint)), global_enums::PaymentMethodType::Gcash => Ok(dirval!(WalletType = Gcash)), global_enums::PaymentMethodType::Vipps => Ok(dirval!(WalletType = Vipps)), + global_enums::PaymentMethodType::VietQr => Ok(dirval!(RealTimePaymentType = VietQr)), global_enums::PaymentMethodType::Momo => Ok(dirval!(WalletType = Momo)), global_enums::PaymentMethodType::Alma => Ok(dirval!(PayLaterType = Alma)), global_enums::PaymentMethodType::Dana => Ok(dirval!(WalletType = Dana)), global_enums::PaymentMethodType::OnlineBankingFpx => { Ok(dirval!(BankRedirectType = OnlineBankingFpx)) } + global_enums::PaymentMethodType::LocalBankRedirect => { + Ok(dirval!(BankRedirectType = LocalBankRedirect)) + } global_enums::PaymentMethodType::OnlineBankingThailand => { Ok(dirval!(BankRedirectType = OnlineBankingThailand)) } diff --git a/crates/euclid_wasm/src/lib.rs b/crates/euclid_wasm/src/lib.rs index df78786a57..3047051014 100644 --- a/crates/euclid_wasm/src/lib.rs +++ b/crates/euclid_wasm/src/lib.rs @@ -262,6 +262,7 @@ pub fn get_variant_values(key: &str) -> Result { dir::DirKeyKind::GiftCardType => dir_enums::GiftCardType::VARIANTS, dir::DirKeyKind::VoucherType => dir_enums::VoucherType::VARIANTS, dir::DirKeyKind::BankDebitType => dir_enums::BankDebitType::VARIANTS, + dir::DirKeyKind::RealTimePaymentType => dir_enums::RealTimePaymentType::VARIANTS, dir::DirKeyKind::PaymentAmount | dir::DirKeyKind::Connector diff --git a/crates/hyperswitch_domain_models/src/payment_method_data.rs b/crates/hyperswitch_domain_models/src/payment_method_data.rs index 89af698b8d..b7305100dd 100644 --- a/crates/hyperswitch_domain_models/src/payment_method_data.rs +++ b/crates/hyperswitch_domain_models/src/payment_method_data.rs @@ -17,6 +17,7 @@ pub enum PaymentMethodData { Crypto(CryptoData), MandatePayment, Reward, + RealTimePayment(Box), Upi(UpiData), Voucher(VoucherData), GiftCard(Box), @@ -41,6 +42,7 @@ impl PaymentMethodData { Self::BankTransfer(_) => Some(common_enums::PaymentMethod::BankTransfer), Self::Crypto(_) => Some(common_enums::PaymentMethod::Crypto), Self::Reward => Some(common_enums::PaymentMethod::Reward), + Self::RealTimePayment(_) => Some(common_enums::PaymentMethod::RealTimePayment), Self::Upi(_) => Some(common_enums::PaymentMethod::Upi), Self::Voucher(_) => Some(common_enums::PaymentMethod::Voucher), Self::GiftCard(_) => Some(common_enums::PaymentMethod::GiftCard), @@ -245,6 +247,15 @@ pub struct ApplepayPaymentMethod { #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)] +pub enum RealTimePaymentData { + DuitNow {}, + Fps {}, + PromptPay {}, + VietQr {}, +} + +#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)] + pub enum BankRedirectData { BancontactCard { card_number: Option, @@ -292,6 +303,7 @@ pub enum BankRedirectData { OnlineBankingThailand { issuer: common_enums::BankNames, }, + LocalBankRedirect {}, } #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize)] @@ -456,6 +468,9 @@ impl From for PaymentMethodData { } api_models::payments::PaymentMethodData::MandatePayment => Self::MandatePayment, api_models::payments::PaymentMethodData::Reward => Self::Reward, + api_models::payments::PaymentMethodData::RealTimePayment(real_time_payment_data) => { + Self::RealTimePayment(Box::new(From::from(*real_time_payment_data))) + } api_models::payments::PaymentMethodData::Upi(upi_data) => { Self::Upi(From::from(upi_data)) } @@ -706,6 +721,9 @@ impl From for BankRedirectData { api_models::payments::BankRedirectData::OnlineBankingThailand { issuer } => { Self::OnlineBankingThailand { issuer } } + api_models::payments::BankRedirectData::LocalBankRedirect { .. } => { + Self::LocalBankRedirect {} + } } } } @@ -874,3 +892,14 @@ impl From for BankTransferData { } } } + +impl From for RealTimePaymentData { + fn from(value: api_models::payments::RealTimePaymentData) -> Self { + match value { + api_models::payments::RealTimePaymentData::Fps {} => Self::Fps {}, + api_models::payments::RealTimePaymentData::DuitNow {} => Self::DuitNow {}, + api_models::payments::RealTimePaymentData::PromptPay {} => Self::PromptPay {}, + api_models::payments::RealTimePaymentData::VietQr {} => Self::VietQr {}, + } + } +} diff --git a/crates/kgraph_utils/src/mca.rs b/crates/kgraph_utils/src/mca.rs index 4d857f43d9..cb24d9de93 100644 --- a/crates/kgraph_utils/src/mca.rs +++ b/crates/kgraph_utils/src/mca.rs @@ -92,6 +92,9 @@ fn get_dir_value_payment_method( api_enums::PaymentMethodType::OnlineBankingThailand => { Ok(dirval!(BankRedirectType = OnlineBankingThailand)) } + api_enums::PaymentMethodType::LocalBankRedirect => { + Ok(dirval!(BankRedirectType = LocalBankRedirect)) + } api_enums::PaymentMethodType::TouchNGo => Ok(dirval!(WalletType = TouchNGo)), api_enums::PaymentMethodType::Atome => Ok(dirval!(PayLaterType = Atome)), api_enums::PaymentMethodType::Boleto => Ok(dirval!(VoucherType = Boleto)), @@ -135,6 +138,10 @@ fn get_dir_value_payment_method( api_enums::PaymentMethodType::UpiIntent => Ok(dirval!(UpiType = UpiIntent)), api_enums::PaymentMethodType::UpiCollect => Ok(dirval!(UpiType = UpiCollect)), api_enums::PaymentMethodType::Mifinity => Ok(dirval!(WalletType = Mifinity)), + api_enums::PaymentMethodType::Fps => Ok(dirval!(RealTimePaymentType = Fps)), + api_enums::PaymentMethodType::DuitNow => Ok(dirval!(RealTimePaymentType = DuitNow)), + api_enums::PaymentMethodType::PromptPay => Ok(dirval!(RealTimePaymentType = PromptPay)), + api_enums::PaymentMethodType::VietQr => Ok(dirval!(RealTimePaymentType = VietQr)), } } @@ -402,6 +409,7 @@ fn global_vec_pmt( global_vector.append(collect_global_variants!(BankDebitType)); global_vector.append(collect_global_variants!(CryptoType)); global_vector.append(collect_global_variants!(RewardType)); + global_vector.append(collect_global_variants!(RealTimePaymentType)); global_vector.append(collect_global_variants!(UpiType)); global_vector.append(collect_global_variants!(VoucherType)); global_vector.append(collect_global_variants!(GiftCardType)); diff --git a/crates/kgraph_utils/src/transformers.rs b/crates/kgraph_utils/src/transformers.rs index 89dbda689c..1b1bd93120 100644 --- a/crates/kgraph_utils/src/transformers.rs +++ b/crates/kgraph_utils/src/transformers.rs @@ -98,6 +98,7 @@ impl IntoDirValue for api_enums::PaymentMethod { Self::BankDebit => Ok(dirval!(PaymentMethod = BankDebit)), Self::BankTransfer => Ok(dirval!(PaymentMethod = BankTransfer)), Self::Reward => Ok(dirval!(PaymentMethod = Reward)), + Self::RealTimePayment => Ok(dirval!(PaymentMethod = RealTimePayment)), Self::Upi => Ok(dirval!(PaymentMethod = Upi)), Self::Voucher => Ok(dirval!(PaymentMethod = Voucher)), Self::GiftCard => Ok(dirval!(PaymentMethod = GiftCard)), @@ -154,6 +155,7 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { | api_enums::PaymentMethod::Wallet | api_enums::PaymentMethod::Crypto | api_enums::PaymentMethod::Reward + | api_enums::PaymentMethod::RealTimePayment | api_enums::PaymentMethod::Upi | api_enums::PaymentMethod::Voucher | api_enums::PaymentMethod::GiftCard => Err(KgraphError::ContextConstructionError( @@ -170,6 +172,7 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { | api_enums::PaymentMethod::Wallet | api_enums::PaymentMethod::Crypto | api_enums::PaymentMethod::Reward + | api_enums::PaymentMethod::RealTimePayment | api_enums::PaymentMethod::Upi | api_enums::PaymentMethod::Voucher | api_enums::PaymentMethod::GiftCard => Err(KgraphError::ContextConstructionError( @@ -187,6 +190,7 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { | api_enums::PaymentMethod::Wallet | api_enums::PaymentMethod::Crypto | api_enums::PaymentMethod::Reward + | api_enums::PaymentMethod::RealTimePayment | api_enums::PaymentMethod::Upi | api_enums::PaymentMethod::Voucher | api_enums::PaymentMethod::GiftCard => Err(KgraphError::ContextConstructionError( @@ -243,6 +247,9 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { api_enums::PaymentMethodType::OnlineBankingFpx => { Ok(dirval!(BankRedirectType = OnlineBankingFpx)) } + api_enums::PaymentMethodType::LocalBankRedirect => { + Ok(dirval!(BankRedirectType = LocalBankRedirect)) + } api_enums::PaymentMethodType::OnlineBankingThailand => { Ok(dirval!(BankRedirectType = OnlineBankingThailand)) } @@ -289,6 +296,10 @@ impl IntoDirValue for (api_enums::PaymentMethodType, api_enums::PaymentMethod) { } api_enums::PaymentMethodType::Venmo => Ok(dirval!(WalletType = Venmo)), api_enums::PaymentMethodType::Mifinity => Ok(dirval!(WalletType = Mifinity)), + api_enums::PaymentMethodType::Fps => Ok(dirval!(RealTimePaymentType = Fps)), + api_enums::PaymentMethodType::DuitNow => Ok(dirval!(RealTimePaymentType = DuitNow)), + api_enums::PaymentMethodType::PromptPay => Ok(dirval!(RealTimePaymentType = PromptPay)), + api_enums::PaymentMethodType::VietQr => Ok(dirval!(RealTimePaymentType = VietQr)), } } } diff --git a/crates/openapi/src/openapi.rs b/crates/openapi/src/openapi.rs index 0b9604d6c4..603c6637aa 100644 --- a/crates/openapi/src/openapi.rs +++ b/crates/openapi/src/openapi.rs @@ -303,6 +303,7 @@ Never share your secret api keys. Keep them guarded and secure. api_models::payments::AlfamartVoucherData, api_models::payments::IndomaretVoucherData, api_models::payments::BankRedirectData, + api_models::payments::RealTimePaymentData, api_models::payments::BankRedirectBilling, api_models::payments::BankRedirectBilling, api_models::payments::ConnectorMetadata, diff --git a/crates/router/src/compatibility/stripe/payment_intents/types.rs b/crates/router/src/compatibility/stripe/payment_intents/types.rs index 5df2ba1487..3c7562d507 100644 --- a/crates/router/src/compatibility/stripe/payment_intents/types.rs +++ b/crates/router/src/compatibility/stripe/payment_intents/types.rs @@ -15,6 +15,7 @@ use time::PrimitiveDateTime; use crate::{ compatibility::stripe::refunds::types as stripe_refunds, + connector::utils::AddressData, consts, core::errors, pii::{Email, PeekInterface}, @@ -85,6 +86,8 @@ pub enum StripePaymentMethodType { Card, Wallet, Upi, + BankRedirect, + RealTimePayment, } impl From for api_enums::PaymentMethod { @@ -93,6 +96,8 @@ impl From for api_enums::PaymentMethod { StripePaymentMethodType::Card => Self::Card, StripePaymentMethodType::Wallet => Self::Wallet, StripePaymentMethodType::Upi => Self::Upi, + StripePaymentMethodType::BankRedirect => Self::BankRedirect, + StripePaymentMethodType::RealTimePayment => Self::RealTimePayment, } } } @@ -317,14 +322,17 @@ impl TryFrom for payments::PaymentsRequest { let amount = item.amount.map(|amount| MinorUnit::new(amount).into()); let payment_method_data = item.payment_method_data.as_ref().map(|pmd| { + let billing = pmd.billing_details.clone().map(payments::Address::from); let payment_method_data = match pmd.payment_method_details.as_ref() { Some(spmd) => Some(payments::PaymentMethodData::from(spmd.to_owned())), - None => get_pmd_based_on_payment_method_type(item.payment_method_types), + None => { + get_pmd_based_on_payment_method_type(item.payment_method_types, billing.clone()) + } }; payments::PaymentMethodDataRequest { payment_method_data, - billing: pmd.billing_details.clone().map(payments::Address::from), + billing, } }); @@ -898,11 +906,51 @@ pub struct StripePaymentRetrieveBody { //To handle payment types that have empty payment method data fn get_pmd_based_on_payment_method_type( payment_method_type: Option, + billing_details: Option, ) -> Option { match payment_method_type { Some(api_enums::PaymentMethodType::UpiIntent) => Some(payments::PaymentMethodData::Upi( payments::UpiData::UpiIntent(payments::UpiIntentData {}), )), + Some(api_enums::PaymentMethodType::Fps) => { + Some(payments::PaymentMethodData::RealTimePayment(Box::new( + payments::RealTimePaymentData::Fps {}, + ))) + } + Some(api_enums::PaymentMethodType::DuitNow) => { + Some(payments::PaymentMethodData::RealTimePayment(Box::new( + payments::RealTimePaymentData::DuitNow {}, + ))) + } + Some(api_enums::PaymentMethodType::PromptPay) => { + Some(payments::PaymentMethodData::RealTimePayment(Box::new( + payments::RealTimePaymentData::PromptPay {}, + ))) + } + Some(api_enums::PaymentMethodType::VietQr) => { + Some(payments::PaymentMethodData::RealTimePayment(Box::new( + payments::RealTimePaymentData::VietQr {}, + ))) + } + Some(api_enums::PaymentMethodType::Ideal) => Some( + payments::PaymentMethodData::BankRedirect(payments::BankRedirectData::Ideal { + billing_details: billing_details.as_ref().map(|billing_data| { + payments::BankRedirectBilling { + billing_name: billing_data.get_optional_full_name(), + email: billing_data.email.clone(), + } + }), + bank_name: None, + country: billing_details + .as_ref() + .and_then(|billing_data| billing_data.get_optional_country()), + }), + ), + Some(api_enums::PaymentMethodType::LocalBankTransfer) => { + Some(payments::PaymentMethodData::BankRedirect( + payments::BankRedirectData::LocalBankRedirect {}, + )) + } _ => None, } } diff --git a/crates/router/src/connector/aci/transformers.rs b/crates/router/src/connector/aci/transformers.rs index 525e6beb03..c9f81ec722 100644 --- a/crates/router/src/connector/aci/transformers.rs +++ b/crates/router/src/connector/aci/transformers.rs @@ -272,6 +272,7 @@ impl | domain::BankRedirectData::OnlineBankingPoland { .. } | domain::BankRedirectData::OnlineBankingSlovakia { .. } | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} | domain::BankRedirectData::OpenBankingUk { .. } => Err( errors::ConnectorError::NotImplemented("Payment method".to_string()), )?, @@ -441,6 +442,7 @@ impl TryFrom<&AciRouterData<&types::PaymentsAuthorizeRouterData>> for AciPayment | domain::PaymentMethodData::BankDebit(_) | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::Upi(_) diff --git a/crates/router/src/connector/adyen.rs b/crates/router/src/connector/adyen.rs index 06040b7f6b..fd2fd2865a 100644 --- a/crates/router/src/connector/adyen.rs +++ b/crates/router/src/connector/adyen.rs @@ -201,6 +201,8 @@ impl ConnectorValidation for Adyen { } }, PaymentMethodType::CardRedirect + | PaymentMethodType::Fps + | PaymentMethodType::DuitNow | PaymentMethodType::Interac | PaymentMethodType::Multibanco | PaymentMethodType::Przelewy24 @@ -210,6 +212,7 @@ impl ConnectorValidation for Adyen { | PaymentMethodType::LocalBankTransfer | PaymentMethodType::Efecty | PaymentMethodType::PagoEfectivo + | PaymentMethodType::PromptPay | PaymentMethodType::RedCompra | PaymentMethodType::RedPagos | PaymentMethodType::CryptoCurrency @@ -218,7 +221,9 @@ impl ConnectorValidation for Adyen { | PaymentMethodType::Cashapp | PaymentMethodType::UpiCollect | PaymentMethodType::UpiIntent - | PaymentMethodType::Mifinity => { + | PaymentMethodType::VietQr + | PaymentMethodType::Mifinity + | PaymentMethodType::LocalBankRedirect => { capture_method_not_supported!(connector, capture_method, payment_method_type) } }, diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs index dbd522b1b3..9354e7e744 100644 --- a/crates/router/src/connector/adyen/transformers.rs +++ b/crates/router/src/connector/adyen/transformers.rs @@ -1578,6 +1578,7 @@ impl<'a> TryFrom<&AdyenRouterData<&types::PaymentsAuthorizeRouterData>> domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardToken(_) => { Err(errors::ConnectorError::NotImplemented( @@ -2407,6 +2408,7 @@ impl<'a> domain::BankRedirectData::Sofort { .. } => Ok(AdyenPaymentMethod::Sofort), domain::BankRedirectData::Trustly { .. } => Ok(AdyenPaymentMethod::Trustly), domain::BankRedirectData::Interac { .. } + | domain::BankRedirectData::LocalBankRedirect {} | domain::BankRedirectData::Przelewy24 { .. } => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Adyen"), @@ -2568,6 +2570,7 @@ impl<'a> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/airwallex/transformers.rs b/crates/router/src/connector/airwallex/transformers.rs index 9e830cf5ae..fcb492bedf 100644 --- a/crates/router/src/connector/airwallex/transformers.rs +++ b/crates/router/src/connector/airwallex/transformers.rs @@ -200,6 +200,7 @@ impl TryFrom<&AirwallexRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/authorizedotnet/transformers.rs b/crates/router/src/connector/authorizedotnet/transformers.rs index 24f5d08a7e..26d1cacb5c 100644 --- a/crates/router/src/connector/authorizedotnet/transformers.rs +++ b/crates/router/src/connector/authorizedotnet/transformers.rs @@ -338,6 +338,7 @@ impl TryFrom<&types::SetupMandateRouterData> for CreateCustomerProfileRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -515,6 +516,7 @@ impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -572,6 +574,7 @@ impl | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/bambora/transformers.rs b/crates/router/src/connector/bambora/transformers.rs index af4afeca10..6bb96f5e9b 100644 --- a/crates/router/src/connector/bambora/transformers.rs +++ b/crates/router/src/connector/bambora/transformers.rs @@ -181,6 +181,7 @@ impl TryFrom> for Bambora | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/bankofamerica/transformers.rs b/crates/router/src/connector/bankofamerica/transformers.rs index 143c1a4c6f..5c8aec1686 100644 --- a/crates/router/src/connector/bankofamerica/transformers.rs +++ b/crates/router/src/connector/bankofamerica/transformers.rs @@ -320,6 +320,7 @@ impl TryFrom<&types::SetupMandateRouterData> for BankOfAmericaPaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -394,6 +395,7 @@ impl | common_enums::PaymentMethod::Crypto | common_enums::PaymentMethod::BankDebit | common_enums::PaymentMethod::Reward + | common_enums::PaymentMethod::RealTimePayment | common_enums::PaymentMethod::Upi | common_enums::PaymentMethod::Voucher | common_enums::PaymentMethod::GiftCard => None, @@ -1217,6 +1219,7 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -1267,6 +1270,7 @@ impl TryFrom<(&domain::PaymentMethodData, String)> for BankOfAmericaAuthSetupReq | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -1891,6 +1895,7 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsPreProcessingRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -2000,6 +2005,7 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCompleteAuthorizeRouterDat | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -2228,6 +2234,7 @@ impl | common_enums::PaymentMethod::Crypto | common_enums::PaymentMethod::BankDebit | common_enums::PaymentMethod::Reward + | common_enums::PaymentMethod::RealTimePayment | common_enums::PaymentMethod::Upi | common_enums::PaymentMethod::Voucher | common_enums::PaymentMethod::GiftCard => None, @@ -2301,6 +2308,7 @@ impl | common_enums::PaymentMethod::Crypto | common_enums::PaymentMethod::BankDebit | common_enums::PaymentMethod::Reward + | common_enums::PaymentMethod::RealTimePayment | common_enums::PaymentMethod::Upi | common_enums::PaymentMethod::Voucher | common_enums::PaymentMethod::GiftCard => None, @@ -2516,6 +2524,7 @@ impl | common_enums::PaymentMethod::Crypto | common_enums::PaymentMethod::BankDebit | common_enums::PaymentMethod::Reward + | common_enums::PaymentMethod::RealTimePayment | common_enums::PaymentMethod::Upi | common_enums::PaymentMethod::Voucher | common_enums::PaymentMethod::GiftCard => None, diff --git a/crates/router/src/connector/billwerk/transformers.rs b/crates/router/src/connector/billwerk/transformers.rs index 113f26b55f..ddaa58cfd0 100644 --- a/crates/router/src/connector/billwerk/transformers.rs +++ b/crates/router/src/connector/billwerk/transformers.rs @@ -99,6 +99,7 @@ impl TryFrom<&types::TokenizationRouterData> for BillwerkTokenRequest { | domain::payments::PaymentMethodData::Crypto(_) | domain::payments::PaymentMethodData::MandatePayment | domain::payments::PaymentMethodData::Reward + | domain::payments::PaymentMethodData::RealTimePayment(_) | domain::payments::PaymentMethodData::Upi(_) | domain::payments::PaymentMethodData::Voucher(_) | domain::payments::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/bluesnap/transformers.rs b/crates/router/src/connector/bluesnap/transformers.rs index b341f4e049..281dad5894 100644 --- a/crates/router/src/connector/bluesnap/transformers.rs +++ b/crates/router/src/connector/bluesnap/transformers.rs @@ -228,6 +228,7 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::Voucher(_) @@ -391,6 +392,7 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::Voucher(_) diff --git a/crates/router/src/connector/boku/transformers.rs b/crates/router/src/connector/boku/transformers.rs index d07f343c91..a1a239a6e1 100644 --- a/crates/router/src/connector/boku/transformers.rs +++ b/crates/router/src/connector/boku/transformers.rs @@ -88,6 +88,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for BokuPaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/braintree/braintree_graphql_transformers.rs b/crates/router/src/connector/braintree/braintree_graphql_transformers.rs index 729f1f8592..bb8f2f5e38 100644 --- a/crates/router/src/connector/braintree/braintree_graphql_transformers.rs +++ b/crates/router/src/connector/braintree/braintree_graphql_transformers.rs @@ -125,6 +125,7 @@ impl TryFrom<&BraintreeRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -157,6 +158,7 @@ impl TryFrom<&BraintreeRouterData<&types::PaymentsCompleteAuthorizeRouterData>> | api_models::enums::PaymentMethod::Crypto | api_models::enums::PaymentMethod::BankDebit | api_models::enums::PaymentMethod::Reward + | api_models::enums::PaymentMethod::RealTimePayment | api_models::enums::PaymentMethod::Upi | api_models::enums::PaymentMethod::Voucher | api_models::enums::PaymentMethod::GiftCard => { @@ -881,6 +883,7 @@ impl TryFrom<&types::TokenizationRouterData> for BraintreeTokenRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -1434,6 +1437,7 @@ fn get_braintree_redirect_form( | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/braintree/transformers.rs b/crates/router/src/connector/braintree/transformers.rs index 2da6271b34..7fc34e75f9 100644 --- a/crates/router/src/connector/braintree/transformers.rs +++ b/crates/router/src/connector/braintree/transformers.rs @@ -171,6 +171,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for BraintreePaymentsRequest { | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/checkout/transformers.rs b/crates/router/src/connector/checkout/transformers.rs index 3556290731..0a73d135f4 100644 --- a/crates/router/src/connector/checkout/transformers.rs +++ b/crates/router/src/connector/checkout/transformers.rs @@ -126,6 +126,7 @@ impl TryFrom<&types::TokenizationRouterData> for TokenRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::CardRedirect(_) @@ -361,6 +362,7 @@ impl TryFrom<&CheckoutRouterData<&types::PaymentsAuthorizeRouterData>> for Payme | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::CardRedirect(_) diff --git a/crates/router/src/connector/cryptopay/transformers.rs b/crates/router/src/connector/cryptopay/transformers.rs index 6c99972784..1101d42d4c 100644 --- a/crates/router/src/connector/cryptopay/transformers.rs +++ b/crates/router/src/connector/cryptopay/transformers.rs @@ -74,6 +74,7 @@ impl TryFrom<&CryptopayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::MandatePayment {} | domain::PaymentMethodData::Reward {} + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/cybersource/transformers.rs b/crates/router/src/connector/cybersource/transformers.rs index a76a336fa1..b51bb5f4eb 100644 --- a/crates/router/src/connector/cybersource/transformers.rs +++ b/crates/router/src/connector/cybersource/transformers.rs @@ -210,6 +210,7 @@ impl TryFrom<&types::SetupMandateRouterData> for CybersourceZeroMandateRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -1371,6 +1372,7 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -1470,6 +1472,7 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -2209,6 +2212,7 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsPreProcessingRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -2317,6 +2321,7 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsCompleteAuthorizeRouterData> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/dlocal/transformers.rs b/crates/router/src/connector/dlocal/transformers.rs index b736c6a6c5..b018dbcd2e 100644 --- a/crates/router/src/connector/dlocal/transformers.rs +++ b/crates/router/src/connector/dlocal/transformers.rs @@ -162,6 +162,7 @@ impl TryFrom<&DlocalRouterData<&types::PaymentsAuthorizeRouterData>> for DlocalP | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/fiserv/transformers.rs b/crates/router/src/connector/fiserv/transformers.rs index 2dedb92d1d..d2ed4a3c15 100644 --- a/crates/router/src/connector/fiserv/transformers.rs +++ b/crates/router/src/connector/fiserv/transformers.rs @@ -184,6 +184,7 @@ impl TryFrom<&FiservRouterData<&types::PaymentsAuthorizeRouterData>> for FiservP | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/forte/transformers.rs b/crates/router/src/connector/forte/transformers.rs index 9a0881f63d..637a3acd1e 100644 --- a/crates/router/src/connector/forte/transformers.rs +++ b/crates/router/src/connector/forte/transformers.rs @@ -111,6 +111,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for FortePaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment {} | domain::PaymentMethodData::Reward {} + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/globepay/transformers.rs b/crates/router/src/connector/globepay/transformers.rs index ee2dedfe0a..3cf1204a69 100644 --- a/crates/router/src/connector/globepay/transformers.rs +++ b/crates/router/src/connector/globepay/transformers.rs @@ -69,6 +69,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for GlobepayPaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/gocardless/transformers.rs b/crates/router/src/connector/gocardless/transformers.rs index 465086f60e..d31d985500 100644 --- a/crates/router/src/connector/gocardless/transformers.rs +++ b/crates/router/src/connector/gocardless/transformers.rs @@ -242,6 +242,7 @@ impl TryFrom<&types::TokenizationRouterData> for CustomerBankAccount { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -410,6 +411,7 @@ impl TryFrom<&types::SetupMandateRouterData> for GocardlessMandateRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/helcim/transformers.rs b/crates/router/src/connector/helcim/transformers.rs index a3341ddab4..f882b341f6 100644 --- a/crates/router/src/connector/helcim/transformers.rs +++ b/crates/router/src/connector/helcim/transformers.rs @@ -159,6 +159,7 @@ impl TryFrom<&types::SetupMandateRouterData> for HelcimVerifyRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -260,6 +261,7 @@ impl TryFrom<&HelcimRouterData<&types::PaymentsAuthorizeRouterData>> for HelcimP | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/iatapay/transformers.rs b/crates/router/src/connector/iatapay/transformers.rs index b36792e90c..f733dcdc96 100644 --- a/crates/router/src/connector/iatapay/transformers.rs +++ b/crates/router/src/connector/iatapay/transformers.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; -use api_models::enums::PaymentMethod; use common_utils::{errors::CustomResult, ext_traits::Encode}; use error_stack::ResultExt; use masking::{Secret, SwitchStrategy}; @@ -98,8 +97,8 @@ pub struct IatapayPaymentsRequest { merchant_id: Secret, merchant_payment_id: Option, amount: f64, - currency: String, - country: String, + currency: common_enums::Currency, + country: common_enums::CountryAlpha2, locale: String, redirect_urls: RedirectUrls, notification_url: String, @@ -130,38 +129,101 @@ impl >, >, ) -> Result { - let payment_method = item.router_data.payment_method; - let country = match payment_method { - PaymentMethod::Upi => "IN".to_string(), - PaymentMethod::Card - | PaymentMethod::CardRedirect - | PaymentMethod::PayLater - | PaymentMethod::Wallet - | PaymentMethod::BankRedirect - | PaymentMethod::BankTransfer - | PaymentMethod::Crypto - | PaymentMethod::BankDebit - | PaymentMethod::Reward - | PaymentMethod::Voucher - | PaymentMethod::GiftCard => item.router_data.get_billing_country()?.to_string(), - }; let return_url = item.router_data.get_return_url()?; - let (payer_info, preferred_checkout_method) = + // Iatapay processes transactions through the payment method selected based on the country + let (country, payer_info, preferred_checkout_method) = match item.router_data.request.payment_method_data.clone() { domain::PaymentMethodData::Upi(upi_type) => match upi_type { domain::UpiData::UpiCollect(upi_data) => ( + common_enums::CountryAlpha2::IN, upi_data.vpa_id.map(|id| PayerInfo { token_id: id.switch_strategy(), }), Some(PreferredCheckoutMethod::Vpa), ), - domain::UpiData::UpiIntent(_) => (None, Some(PreferredCheckoutMethod::Qr)), + domain::UpiData::UpiIntent(_) => ( + common_enums::CountryAlpha2::IN, + None, + Some(PreferredCheckoutMethod::Qr), + ), }, + domain::PaymentMethodData::BankRedirect(bank_redirect_data) => { + match bank_redirect_data { + domain::BankRedirectData::Ideal { .. } => { + (common_enums::CountryAlpha2::NL, None, None) + } + domain::BankRedirectData::LocalBankRedirect {} => { + let billing_country = item.router_data.get_billing_country()?; + ( + if matches!( + billing_country, + common_enums::CountryAlpha2::AT + | common_enums::CountryAlpha2::BE + | common_enums::CountryAlpha2::DE + | common_enums::CountryAlpha2::EE + | common_enums::CountryAlpha2::ES + | common_enums::CountryAlpha2::FI + | common_enums::CountryAlpha2::FR + | common_enums::CountryAlpha2::IE + | common_enums::CountryAlpha2::IT + | common_enums::CountryAlpha2::LU + | common_enums::CountryAlpha2::LV + | common_enums::CountryAlpha2::LT + | common_enums::CountryAlpha2::NL + | common_enums::CountryAlpha2::PT + ) { + billing_country + } else { + common_enums::CountryAlpha2::AT + }, + None, + None, + ) + } + domain::BankRedirectData::BancontactCard { .. } + | domain::BankRedirectData::Bizum {} + | domain::BankRedirectData::Blik { .. } + | domain::BankRedirectData::Eps { .. } + | domain::BankRedirectData::Giropay { .. } + | domain::BankRedirectData::Interac { .. } + | domain::BankRedirectData::OnlineBankingCzechRepublic { .. } + | domain::BankRedirectData::OnlineBankingFinland {} + | domain::BankRedirectData::OnlineBankingPoland { .. } + | domain::BankRedirectData::OnlineBankingSlovakia { .. } + | domain::BankRedirectData::OpenBankingUk { .. } + | domain::BankRedirectData::Przelewy24 { .. } + | domain::BankRedirectData::Sofort { .. } + | domain::BankRedirectData::Trustly { .. } + | domain::BankRedirectData::OnlineBankingFpx { .. } + | domain::BankRedirectData::OnlineBankingThailand { .. } => { + Err(errors::ConnectorError::NotImplemented( + connector_util::get_unimplemented_payment_method_error_message( + "iatapay", + ), + ))? + } + } + } + domain::PaymentMethodData::RealTimePayment(real_time_payment_data) => { + match *real_time_payment_data { + domain::RealTimePaymentData::DuitNow {} => { + (common_enums::CountryAlpha2::MY, None, None) + } + domain::RealTimePaymentData::Fps {} => { + (common_enums::CountryAlpha2::HK, None, None) + } + domain::RealTimePaymentData::PromptPay {} => { + (common_enums::CountryAlpha2::TH, None, None) + } + domain::RealTimePaymentData::VietQr {} => { + (common_enums::CountryAlpha2::VN, None, None) + } + } + } domain::PaymentMethodData::Card(_) | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::Wallet(_) | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) | domain::PaymentMethodData::BankDebit(_) | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Crypto(_) @@ -169,15 +231,19 @@ impl | domain::PaymentMethodData::Reward | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::CardToken(_) => (None, None), + | domain::PaymentMethodData::CardToken(_) => { + Err(errors::ConnectorError::NotImplemented( + connector_util::get_unimplemented_payment_method_error_message("iatapay"), + ))? + } }; let payload = Self { merchant_id: IatapayAuthType::try_from(&item.router_data.connector_auth_type)? .merchant_id, merchant_payment_id: Some(item.router_data.connector_request_reference_id.clone()), amount: item.amount, - currency: item.router_data.request.currency.to_string(), - country: country.clone(), + currency: item.router_data.request.currency, + country, locale: format!("en-{}", country), redirect_urls: get_redirect_url(return_url), payer_info, diff --git a/crates/router/src/connector/klarna.rs b/crates/router/src/connector/klarna.rs index c5c078711c..4796f15cb6 100644 --- a/crates/router/src/connector/klarna.rs +++ b/crates/router/src/connector/klarna.rs @@ -585,6 +585,7 @@ impl | common_enums::PaymentMethodType::Momo | common_enums::PaymentMethodType::MomoAtm | common_enums::PaymentMethodType::Multibanco + | common_enums::PaymentMethodType::LocalBankRedirect | common_enums::PaymentMethodType::OnlineBankingThailand | common_enums::PaymentMethodType::OnlineBankingCzechRepublic | common_enums::PaymentMethodType::OnlineBankingFinland @@ -623,7 +624,11 @@ impl | common_enums::PaymentMethodType::FamilyMart | common_enums::PaymentMethodType::Seicomart | common_enums::PaymentMethodType::PayEasy - | common_enums::PaymentMethodType::Mifinity, + | common_enums::PaymentMethodType::Mifinity + | common_enums::PaymentMethodType::Fps + | common_enums::PaymentMethodType::DuitNow + | common_enums::PaymentMethodType::PromptPay + | common_enums::PaymentMethodType::VietQr, ) => Err(error_stack::report!(errors::ConnectorError::NotSupported { message: payment_method_type.to_string(), connector: "klarna", @@ -641,6 +646,7 @@ impl | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/mifinity/transformers.rs b/crates/router/src/connector/mifinity/transformers.rs index ec68c399ad..5f0e4b9c9d 100644 --- a/crates/router/src/connector/mifinity/transformers.rs +++ b/crates/router/src/connector/mifinity/transformers.rs @@ -188,6 +188,7 @@ impl TryFrom<&MifinityRouterData<&types::PaymentsAuthorizeRouterData>> for Mifin | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/multisafepay/transformers.rs b/crates/router/src/connector/multisafepay/transformers.rs index 49e4c51626..2daf83cbac 100644 --- a/crates/router/src/connector/multisafepay/transformers.rs +++ b/crates/router/src/connector/multisafepay/transformers.rs @@ -522,7 +522,8 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::BankRedirectData::Sofort { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("multisafepay"), ))? @@ -584,7 +585,8 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::BankRedirectData::Sofort { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("multisafepay"), ))? @@ -600,6 +602,7 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -769,7 +772,8 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::BankRedirectData::Sofort { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => None, + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => None, } } domain::PaymentMethodData::MandatePayment => None, @@ -778,6 +782,7 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/nexinets/transformers.rs b/crates/router/src/connector/nexinets/transformers.rs index 8491091b9e..c25da631b7 100644 --- a/crates/router/src/connector/nexinets/transformers.rs +++ b/crates/router/src/connector/nexinets/transformers.rs @@ -607,7 +607,8 @@ fn get_payment_details_and_product( | domain::BankRedirectData::Przelewy24 { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("nexinets"), ))? @@ -620,6 +621,7 @@ fn get_payment_details_and_product( | PaymentMethodData::Crypto(_) | PaymentMethodData::MandatePayment | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) | PaymentMethodData::Upi(_) | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/nmi/transformers.rs b/crates/router/src/connector/nmi/transformers.rs index b13b14d275..c9d86b17ba 100644 --- a/crates/router/src/connector/nmi/transformers.rs +++ b/crates/router/src/connector/nmi/transformers.rs @@ -585,6 +585,7 @@ impl | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/noon/transformers.rs b/crates/router/src/connector/noon/transformers.rs index 720851f79f..0624e3cf95 100644 --- a/crates/router/src/connector/noon/transformers.rs +++ b/crates/router/src/connector/noon/transformers.rs @@ -323,6 +323,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for NoonPaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment {} | domain::PaymentMethodData::Reward {} + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/nuvei/transformers.rs b/crates/router/src/connector/nuvei/transformers.rs index 2f3b9459ee..a23a05e34e 100644 --- a/crates/router/src/connector/nuvei/transformers.rs +++ b/crates/router/src/connector/nuvei/transformers.rs @@ -959,7 +959,8 @@ where | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } | domain::BankRedirectData::OnlineBankingThailand { .. } - | domain::BankRedirectData::OpenBankingUk { .. } => { + | domain::BankRedirectData::OpenBankingUk { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("nuvei"), ) @@ -989,6 +990,7 @@ where | domain::PaymentMethodData::BankTransfer(_) | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::CardRedirect(_) @@ -1192,6 +1194,7 @@ impl TryFrom<(&types::PaymentsCompleteAuthorizeRouterData, Secret)> | Some(domain::PaymentMethodData::Voucher(..)) | Some(domain::PaymentMethodData::CardRedirect(..)) | Some(domain::PaymentMethodData::Reward) + | Some(domain::PaymentMethodData::RealTimePayment(..)) | Some(domain::PaymentMethodData::Upi(..)) | Some(domain::PaymentMethodData::CardToken(..)) | None => Err(errors::ConnectorError::NotImplemented( diff --git a/crates/router/src/connector/opayo/transformers.rs b/crates/router/src/connector/opayo/transformers.rs index 327ec5def0..b6c05dff2d 100644 --- a/crates/router/src/connector/opayo/transformers.rs +++ b/crates/router/src/connector/opayo/transformers.rs @@ -52,6 +52,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for OpayoPaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/payeezy/transformers.rs b/crates/router/src/connector/payeezy/transformers.rs index 9b6da9a0e9..c2d8e0dfdd 100644 --- a/crates/router/src/connector/payeezy/transformers.rs +++ b/crates/router/src/connector/payeezy/transformers.rs @@ -134,6 +134,7 @@ impl TryFrom<&PayeezyRouterData<&types::PaymentsAuthorizeRouterData>> for Payeez | diesel_models::enums::PaymentMethod::Crypto | diesel_models::enums::PaymentMethod::BankDebit | diesel_models::enums::PaymentMethod::Reward + | diesel_models::enums::PaymentMethod::RealTimePayment | diesel_models::enums::PaymentMethod::Upi | diesel_models::enums::PaymentMethod::Voucher | diesel_models::enums::PaymentMethod::GiftCard => { @@ -254,6 +255,7 @@ fn get_payment_method_data( | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/payme/transformers.rs b/crates/router/src/connector/payme/transformers.rs index 6e7653887b..7c6f426d38 100644 --- a/crates/router/src/connector/payme/transformers.rs +++ b/crates/router/src/connector/payme/transformers.rs @@ -420,6 +420,7 @@ impl TryFrom<&PaymentMethodData> for SalePaymentMethod { | PaymentMethodData::Crypto(_) | PaymentMethodData::MandatePayment | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::CardRedirect(_) | PaymentMethodData::Upi(_) @@ -661,6 +662,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for PayRequest { | PaymentMethodData::Crypto(_) | PaymentMethodData::MandatePayment | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) | PaymentMethodData::Upi(_) | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) @@ -719,6 +721,7 @@ impl TryFrom<&types::PaymentsCompleteAuthorizeRouterData> for Pay3dsRequest { | Some(PaymentMethodData::Crypto(_)) | Some(PaymentMethodData::MandatePayment) | Some(PaymentMethodData::Reward) + | Some(PaymentMethodData::RealTimePayment(_)) | Some(PaymentMethodData::Upi(_)) | Some(PaymentMethodData::Voucher(_)) | Some(PaymentMethodData::GiftCard(_)) @@ -757,6 +760,7 @@ impl TryFrom<&types::TokenizationRouterData> for CaptureBuyerRequest { | PaymentMethodData::Crypto(_) | PaymentMethodData::MandatePayment | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) | PaymentMethodData::Upi(_) | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/paypal/transformers.rs b/crates/router/src/connector/paypal/transformers.rs index 0a0e96c501..755623b878 100644 --- a/crates/router/src/connector/paypal/transformers.rs +++ b/crates/router/src/connector/paypal/transformers.rs @@ -363,7 +363,8 @@ fn get_payment_source( | domain::BankRedirectData::OpenBankingUk { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Paypal"), ))? @@ -557,6 +558,7 @@ impl TryFrom<&PaypalRouterData<&types::PaymentsAuthorizeRouterData>> for PaypalP .into()) } domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardToken(_) => { diff --git a/crates/router/src/connector/placetopay/transformers.rs b/crates/router/src/connector/placetopay/transformers.rs index ef6bde8f1a..50813a8162 100644 --- a/crates/router/src/connector/placetopay/transformers.rs +++ b/crates/router/src/connector/placetopay/transformers.rs @@ -147,6 +147,7 @@ impl TryFrom<&PlacetopayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/powertranz/transformers.rs b/crates/router/src/connector/powertranz/transformers.rs index e47e0f5120..6fe1a7173b 100644 --- a/crates/router/src/connector/powertranz/transformers.rs +++ b/crates/router/src/connector/powertranz/transformers.rs @@ -112,6 +112,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for PowertranzPaymentsRequest | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/shift4/transformers.rs b/crates/router/src/connector/shift4/transformers.rs index ac597b7346..80ef0daaf2 100644 --- a/crates/router/src/connector/shift4/transformers.rs +++ b/crates/router/src/connector/shift4/transformers.rs @@ -245,6 +245,7 @@ where | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardToken(_) => { Err(errors::ConnectorError::NotImplemented( @@ -466,6 +467,7 @@ impl TryFrom<&types::RouterData Err(errors::ConnectorError::NotImplemented( @@ -496,7 +498,8 @@ impl TryFrom<&domain::BankRedirectData> for PaymentMethodType { | domain::BankRedirectData::OnlineBankingSlovakia { .. } | domain::BankRedirectData::OpenBankingUk { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Shift4"), ) diff --git a/crates/router/src/connector/square/transformers.rs b/crates/router/src/connector/square/transformers.rs index 8e7b7a7c33..15de18c889 100644 --- a/crates/router/src/connector/square/transformers.rs +++ b/crates/router/src/connector/square/transformers.rs @@ -171,6 +171,7 @@ impl TryFrom<&types::TokenizationRouterData> for SquareTokenRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::CardToken(_) => { @@ -286,6 +287,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for SquarePaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::CardToken(_) => { diff --git a/crates/router/src/connector/stax/transformers.rs b/crates/router/src/connector/stax/transformers.rs index d307265402..65ee90830a 100644 --- a/crates/router/src/connector/stax/transformers.rs +++ b/crates/router/src/connector/stax/transformers.rs @@ -103,6 +103,7 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardRedirect(_) @@ -254,6 +255,7 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardRedirect(_) diff --git a/crates/router/src/connector/stripe/transformers.rs b/crates/router/src/connector/stripe/transformers.rs index 37122aa08f..10d091a3b8 100644 --- a/crates/router/src/connector/stripe/transformers.rs +++ b/crates/router/src/connector/stripe/transformers.rs @@ -694,6 +694,7 @@ impl TryFrom for StripePaymentMethodType { | enums::PaymentMethodType::Gcash | enums::PaymentMethodType::Interac | enums::PaymentMethodType::KakaoPay + | enums::PaymentMethodType::LocalBankRedirect | enums::PaymentMethodType::MbWay | enums::PaymentMethodType::MobilePay | enums::PaymentMethodType::Momo @@ -737,6 +738,10 @@ impl TryFrom for StripePaymentMethodType { | enums::PaymentMethodType::PayEasy | enums::PaymentMethodType::LocalBankTransfer | enums::PaymentMethodType::Walley + | enums::PaymentMethodType::Fps + | enums::PaymentMethodType::DuitNow + | enums::PaymentMethodType::PromptPay + | enums::PaymentMethodType::VietQr | enums::PaymentMethodType::Mifinity => Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("stripe"), ) @@ -1009,7 +1014,8 @@ impl TryFrom<&domain::BankRedirectData> for StripePaymentMethodType { | domain::BankRedirectData::OnlineBankingSlovakia { .. } | domain::BankRedirectData::OnlineBankingThailand { .. } | domain::BankRedirectData::OpenBankingUk { .. } - | domain::BankRedirectData::Trustly { .. } => { + | domain::BankRedirectData::Trustly { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("stripe"), )) @@ -1323,6 +1329,7 @@ fn create_stripe_payment_method( }, domain::PaymentMethodData::Upi(_) + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("stripe"), @@ -1538,7 +1545,8 @@ impl TryFrom<(&domain::BankRedirectData, Option)> | domain::BankRedirectData::OnlineBankingSlovakia { .. } | domain::BankRedirectData::OnlineBankingThailand { .. } | domain::BankRedirectData::OpenBankingUk { .. } - | domain::BankRedirectData::Trustly { .. } => { + | domain::BankRedirectData::Trustly { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("stripe"), ) @@ -1695,6 +1703,7 @@ impl TryFrom<(&types::PaymentsAuthorizeRouterData, MinorUnit)> for PaymentIntent | domain::payments::PaymentMethodData::Crypto(_) | domain::payments::PaymentMethodData::MandatePayment | domain::payments::PaymentMethodData::Reward + | domain::payments::PaymentMethodData::RealTimePayment(_) | domain::payments::PaymentMethodData::Upi(_) | domain::payments::PaymentMethodData::Voucher(_) | domain::payments::PaymentMethodData::GiftCard(_) @@ -3263,6 +3272,7 @@ impl | Some(domain::PaymentMethodData::PayLater(..)) | Some(domain::PaymentMethodData::Crypto(..)) | Some(domain::PaymentMethodData::Reward) + | Some(domain::PaymentMethodData::RealTimePayment(..)) | Some(domain::PaymentMethodData::MandatePayment) | Some(domain::PaymentMethodData::Upi(..)) | Some(domain::PaymentMethodData::GiftCard(..)) @@ -3716,6 +3726,7 @@ impl domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardRedirect(_) diff --git a/crates/router/src/connector/trustpay/transformers.rs b/crates/router/src/connector/trustpay/transformers.rs index f6c494170f..1227191beb 100644 --- a/crates/router/src/connector/trustpay/transformers.rs +++ b/crates/router/src/connector/trustpay/transformers.rs @@ -241,7 +241,8 @@ impl TryFrom<&domain::BankRedirectData> for TrustpayPaymentMethod { | domain::BankRedirectData::Przelewy24 { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("trustpay"), ) @@ -435,6 +436,7 @@ impl TryFrom<&TrustpayRouterData<&types::PaymentsAuthorizeRouterData>> for Trust | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/tsys/transformers.rs b/crates/router/src/connector/tsys/transformers.rs index 2febb9c72e..cea51ce77e 100644 --- a/crates/router/src/connector/tsys/transformers.rs +++ b/crates/router/src/connector/tsys/transformers.rs @@ -72,6 +72,7 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for TsysPaymentsRequest { | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index 0f84545cc1..e1ef11265c 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -588,6 +588,8 @@ impl RouterData for types::RouterData Result; fn get_phone_with_country_code(&self) -> Result, Error>; + fn get_optional_country(&self) -> Option; + fn get_optional_full_name(&self) -> Option>; } impl AddressData for api::Address { @@ -602,6 +604,18 @@ impl AddressData for api::Address { .transpose()? .ok_or_else(missing_field_err("phone")) } + + fn get_optional_country(&self) -> Option { + self.address + .as_ref() + .and_then(|billing_address_details| billing_address_details.country) + } + + fn get_optional_full_name(&self) -> Option> { + self.address + .as_ref() + .and_then(|billing_address| billing_address.get_optional_full_name()) + } } pub trait PaymentsPreProcessingData { @@ -2555,6 +2569,7 @@ pub enum PaymentMethodDataType { ApplePayRedirect, ApplePayThirdPartySdk, DanaRedirect, + DuitNow, GooglePay, GooglePayRedirect, GooglePayThirdPartySdk, @@ -2585,6 +2600,7 @@ pub enum PaymentMethodDataType { Giropay, Ideal, Interac, + LocalBankRedirect, OnlineBankingCzechRepublic, OnlineBankingFinland, OnlineBankingPoland, @@ -2635,6 +2651,9 @@ pub enum PaymentMethodDataType { CardToken, LocalBankTransfer, Mifinity, + Fps, + PromptPay, + VietQr, } impl From for PaymentMethodDataType { @@ -2727,6 +2746,9 @@ impl From for PaymentMethodDataType { domain::payments::BankRedirectData::OnlineBankingThailand { .. } => { Self::OnlineBankingThailand } + domain::payments::BankRedirectData::LocalBankRedirect { } => { + Self::LocalBankRedirect + } } } domain::payments::PaymentMethodData::BankDebit(bank_debit_data) => { @@ -2799,6 +2821,12 @@ impl From for PaymentMethodDataType { domain::payments::VoucherData::Seicomart(_) => Self::Seicomart, domain::payments::VoucherData::PayEasy(_) => Self::PayEasy, }, + domain::PaymentMethodData::RealTimePayment(real_time_payment_data) => match *real_time_payment_data{ + hyperswitch_domain_models::payment_method_data::RealTimePaymentData::DuitNow { } => Self::DuitNow, + hyperswitch_domain_models::payment_method_data::RealTimePaymentData::Fps { } => Self::Fps, + hyperswitch_domain_models::payment_method_data::RealTimePaymentData::PromptPay { } => Self::PromptPay, + hyperswitch_domain_models::payment_method_data::RealTimePaymentData::VietQr { } => Self::VietQr, + }, domain::payments::PaymentMethodData::GiftCard(gift_card_data) => { match *gift_card_data { domain::payments::GiftCardData::Givex(_) => Self::Givex, diff --git a/crates/router/src/connector/volt/transformers.rs b/crates/router/src/connector/volt/transformers.rs index 19e3b06fae..12064fdf0f 100644 --- a/crates/router/src/connector/volt/transformers.rs +++ b/crates/router/src/connector/volt/transformers.rs @@ -129,7 +129,8 @@ impl TryFrom<&VoltRouterData<&types::PaymentsAuthorizeRouterData>> for VoltPayme | domain::BankRedirectData::Sofort { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Volt"), ) @@ -145,6 +146,7 @@ impl TryFrom<&VoltRouterData<&types::PaymentsAuthorizeRouterData>> for VoltPayme | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/connector/worldline/transformers.rs b/crates/router/src/connector/worldline/transformers.rs index 06d608a172..fe1bcab0bb 100644 --- a/crates/router/src/connector/worldline/transformers.rs +++ b/crates/router/src/connector/worldline/transformers.rs @@ -245,6 +245,7 @@ impl | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) @@ -403,7 +404,8 @@ fn make_bank_redirect_request( | domain::BankRedirectData::Sofort { .. } | domain::BankRedirectData::Trustly { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { return Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("worldline"), ) diff --git a/crates/router/src/connector/worldpay/transformers.rs b/crates/router/src/connector/worldpay/transformers.rs index b82aa338e2..5caf6b0e1f 100644 --- a/crates/router/src/connector/worldpay/transformers.rs +++ b/crates/router/src/connector/worldpay/transformers.rs @@ -103,6 +103,7 @@ fn fetch_payment_instrument( | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::CardRedirect(_) diff --git a/crates/router/src/connector/zen/transformers.rs b/crates/router/src/connector/zen/transformers.rs index a8edd9f99e..026c39f0e3 100644 --- a/crates/router/src/connector/zen/transformers.rs +++ b/crates/router/src/connector/zen/transformers.rs @@ -692,6 +692,7 @@ impl TryFrom<&ZenRouterData<&types::PaymentsAuthorizeRouterData>> for ZenPayment domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::CardToken(_) => { Err(errors::ConnectorError::NotImplemented( @@ -722,7 +723,8 @@ impl TryFrom<&domain::BankRedirectData> for ZenPaymentsRequest { | domain::BankRedirectData::OnlineBankingSlovakia { .. } | domain::BankRedirectData::OpenBankingUk { .. } | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } => { + | domain::BankRedirectData::OnlineBankingThailand { .. } + | domain::BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Zen"), ) diff --git a/crates/router/src/connector/zsl/transformers.rs b/crates/router/src/connector/zsl/transformers.rs index 83aa218995..f44d46cd8e 100644 --- a/crates/router/src/connector/zsl/transformers.rs +++ b/crates/router/src/connector/zsl/transformers.rs @@ -177,6 +177,7 @@ impl TryFrom<&ZslRouterData<&types::PaymentsAuthorizeRouterData>> for ZslPayment | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::Reward + | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) diff --git a/crates/router/src/core/payment_methods.rs b/crates/router/src/core/payment_methods.rs index 1172ed0eab..4bde9f42c8 100644 --- a/crates/router/src/core/payment_methods.rs +++ b/crates/router/src/core/payment_methods.rs @@ -49,6 +49,7 @@ pub async fn retrieve_payment_method( pm @ Some(api::PaymentMethodData::Upi(_)) => Ok((pm.to_owned(), None)), pm @ Some(api::PaymentMethodData::Voucher(_)) => Ok((pm.to_owned(), None)), pm @ Some(api::PaymentMethodData::Reward) => Ok((pm.to_owned(), None)), + pm @ Some(api::PaymentMethodData::RealTimePayment(_)) => Ok((pm.to_owned(), None)), pm @ Some(api::PaymentMethodData::CardRedirect(_)) => Ok((pm.to_owned(), None)), pm @ Some(api::PaymentMethodData::GiftCard(_)) => Ok((pm.to_owned(), None)), pm_opt @ Some(pm @ api::PaymentMethodData::BankTransfer(_)) => { diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index c94c1c714c..052c4b1928 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -2305,6 +2305,7 @@ pub fn validate_payment_method_type_against_payment_method( | api_enums::PaymentMethodType::Eps | api_enums::PaymentMethodType::BancontactCard | api_enums::PaymentMethodType::Blik + | api_enums::PaymentMethodType::LocalBankRedirect | api_enums::PaymentMethodType::OnlineBankingThailand | api_enums::PaymentMethodType::OnlineBankingCzechRepublic | api_enums::PaymentMethodType::OnlineBankingFinland @@ -2349,6 +2350,13 @@ pub fn validate_payment_method_type_against_payment_method( payment_method_type, api_enums::PaymentMethodType::Evoucher | api_enums::PaymentMethodType::ClassicReward ), + api_enums::PaymentMethod::RealTimePayment => matches!( + payment_method_type, + api_enums::PaymentMethodType::Fps + | api_enums::PaymentMethodType::DuitNow + | api_enums::PaymentMethodType::PromptPay + | api_enums::PaymentMethodType::VietQr + ), api_enums::PaymentMethod::Upi => matches!( payment_method_type, api_enums::PaymentMethodType::UpiCollect | api_enums::PaymentMethodType::UpiIntent @@ -3880,6 +3888,9 @@ pub async fn get_additional_payment_data( api_models::payments::PaymentMethodData::Reward => { api_models::payments::AdditionalPaymentData::Reward {} } + api_models::payments::PaymentMethodData::RealTimePayment(_) => { + api_models::payments::AdditionalPaymentData::RealTimePayment {} + } api_models::payments::PaymentMethodData::Upi(_) => { api_models::payments::AdditionalPaymentData::Upi {} } @@ -4347,6 +4358,11 @@ pub fn get_key_params_for_surcharge_details( )), api_models::payments::PaymentMethodData::MandatePayment => None, api_models::payments::PaymentMethodData::Reward => None, + api_models::payments::PaymentMethodData::RealTimePayment(real_time_payment) => Some(( + common_enums::PaymentMethod::RealTimePayment, + real_time_payment.get_payment_method_type(), + None, + )), api_models::payments::PaymentMethodData::Upi(upi_data) => Some(( common_enums::PaymentMethod::Upi, upi_data.get_payment_method_type(), diff --git a/crates/router/src/types/domain/payments.rs b/crates/router/src/types/domain/payments.rs index 6fc8f26db5..a3ed6b886a 100644 --- a/crates/router/src/types/domain/payments.rs +++ b/crates/router/src/types/domain/payments.rs @@ -5,6 +5,7 @@ pub use hyperswitch_domain_models::payment_method_data::{ GoPayRedirection, GooglePayPaymentMethodInfo, GooglePayRedirectData, GooglePayThirdPartySdkData, GooglePayWalletData, GpayTokenizationData, IndomaretVoucherData, KakaoPayRedirection, MbWayRedirection, MifinityData, PayLaterData, PaymentMethodData, - SamsungPayWalletData, SepaAndBacsBillingDetails, SwishQrData, TouchNGoRedirection, - UpiCollectData, UpiData, UpiIntentData, VoucherData, WalletData, WeChatPayQr, + RealTimePaymentData, SamsungPayWalletData, SepaAndBacsBillingDetails, SwishQrData, + TouchNGoRedirection, UpiCollectData, UpiData, UpiIntentData, VoucherData, WalletData, + WeChatPayQr, }; diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index b71a14c4b2..94d84d8cca 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -452,6 +452,7 @@ impl ForeignFrom for api_enums::PaymentMethod { | api_enums::PaymentMethodType::Eps | api_enums::PaymentMethodType::BancontactCard | api_enums::PaymentMethodType::Blik + | api_enums::PaymentMethodType::LocalBankRedirect | api_enums::PaymentMethodType::OnlineBankingThailand | api_enums::PaymentMethodType::OnlineBankingCzechRepublic | api_enums::PaymentMethodType::OnlineBankingFinland @@ -508,6 +509,10 @@ impl ForeignFrom for api_enums::PaymentMethod { | api_enums::PaymentMethodType::Knet | api_enums::PaymentMethodType::MomoAtm | api_enums::PaymentMethodType::CardRedirect => Self::CardRedirect, + api_enums::PaymentMethodType::Fps + | api_enums::PaymentMethodType::DuitNow + | api_enums::PaymentMethodType::PromptPay + | api_enums::PaymentMethodType::VietQr => Self::RealTimePayment, } } } @@ -528,6 +533,7 @@ impl ForeignTryFrom for api_enums::PaymentMethod { payments::PaymentMethodData::BankTransfer(..) => Ok(Self::BankTransfer), payments::PaymentMethodData::Crypto(..) => Ok(Self::Crypto), payments::PaymentMethodData::Reward => Ok(Self::Reward), + payments::PaymentMethodData::RealTimePayment(..) => Ok(Self::RealTimePayment), payments::PaymentMethodData::Upi(..) => Ok(Self::Upi), payments::PaymentMethodData::Voucher(..) => Ok(Self::Voucher), payments::PaymentMethodData::GiftCard(..) => Ok(Self::GiftCard),