diff --git a/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs index bfa2da851f..8499aecaed 100644 --- a/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs @@ -196,7 +196,8 @@ impl TryFrom> for Bambora | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("bambora"), ) .into()), diff --git a/crates/hyperswitch_connectors/src/connectors/fiserv/transformers.rs b/crates/hyperswitch_connectors/src/connectors/fiserv/transformers.rs index 0ae59d4526..b2cbd570b4 100644 --- a/crates/hyperswitch_connectors/src/connectors/fiserv/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/fiserv/transformers.rs @@ -198,7 +198,8 @@ impl TryFrom<&FiservRouterData<&types::PaymentsAuthorizeRouterData>> for FiservP | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => { + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("fiserv"), )) diff --git a/crates/hyperswitch_connectors/src/connectors/helcim/transformers.rs b/crates/hyperswitch_connectors/src/connectors/helcim/transformers.rs index 3aed97a2cb..90380d0232 100644 --- a/crates/hyperswitch_connectors/src/connectors/helcim/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/helcim/transformers.rs @@ -180,7 +180,8 @@ impl TryFrom<&SetupMandateRouterData> for HelcimVerifyRequest { | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( crate::utils::get_unimplemented_payment_method_error_message("Helcim"), ))?, } @@ -273,7 +274,8 @@ impl TryFrom<&HelcimRouterData<&PaymentsAuthorizeRouterData>> for HelcimPayments | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( crate::utils::get_unimplemented_payment_method_error_message("Helcim"), ))?, } diff --git a/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs b/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs index 8c767e848d..f7b2016a37 100644 --- a/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs @@ -117,7 +117,8 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme | PaymentMethodData::CardRedirect(_) | PaymentMethodData::Upi(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Stax"), ))?, } @@ -267,7 +268,8 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest { | PaymentMethodData::CardRedirect(_) | PaymentMethodData::Upi(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Stax"), ))?, } diff --git a/crates/hyperswitch_domain_models/src/api.rs b/crates/hyperswitch_domain_models/src/api.rs index d62516234e..b013d2b790 100644 --- a/crates/hyperswitch_domain_models/src/api.rs +++ b/crates/hyperswitch_domain_models/src/api.rs @@ -5,6 +5,8 @@ use common_utils::{ impl_api_event_type, }; +use super::payment_method_data::PaymentMethodData; + #[derive(Debug, Eq, PartialEq)] pub enum ApplicationResponse { Json(R), @@ -33,7 +35,7 @@ impl_api_event_type!(Miscellaneous, (PaymentLinkFormData, GenericLinkFormData)); #[derive(Debug, Eq, PartialEq)] pub struct RedirectionFormData { pub redirect_form: crate::router_response_types::RedirectForm, - pub payment_method_data: Option, + pub payment_method_data: Option, pub amount: String, pub currency: String, } diff --git a/crates/hyperswitch_domain_models/src/payment_method_data.rs b/crates/hyperswitch_domain_models/src/payment_method_data.rs index a440ba944f..5bff7b489c 100644 --- a/crates/hyperswitch_domain_models/src/payment_method_data.rs +++ b/crates/hyperswitch_domain_models/src/payment_method_data.rs @@ -1,4 +1,9 @@ -use common_utils::pii::{self, Email}; +use api_models::payments::ExtendedCardInfo; +use common_enums::enums as api_enums; +use common_utils::{ + id_type, + pii::{self, Email}, +}; use masking::Secret; use serde::{Deserialize, Serialize}; use time::Date; @@ -23,6 +28,7 @@ pub enum PaymentMethodData { GiftCard(Box), CardToken(CardToken), OpenBanking(OpenBankingData), + NetworkToken(NetworkTokenData), } #[derive(Debug, Clone, PartialEq, Eq)] @@ -34,7 +40,7 @@ pub enum ApplePayFlow { impl PaymentMethodData { pub fn get_payment_method(&self) -> Option { match self { - Self::Card(_) => Some(common_enums::PaymentMethod::Card), + Self::Card(_) | Self::NetworkToken(_) => Some(common_enums::PaymentMethod::Card), Self::CardRedirect(_) => Some(common_enums::PaymentMethod::CardRedirect), Self::Wallet(_) => Some(common_enums::PaymentMethod::Wallet), Self::PayLater(_) => Some(common_enums::PaymentMethod::PayLater), @@ -468,6 +474,20 @@ pub struct SepaAndBacsBillingDetails { pub name: Secret, } +#[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize, Default)] +pub struct NetworkTokenData { + pub token_number: cards::CardNumber, + pub token_exp_month: Secret, + pub token_exp_year: Secret, + pub token_cryptogram: Secret, + pub card_issuer: Option, + pub card_network: Option, + pub card_type: Option, + pub card_issuing_country: Option, + pub bank_code: Option, + pub nick_name: Option>, +} + impl From for PaymentMethodData { fn from(api_model_payment_method_data: api_models::payments::PaymentMethodData) -> Self { match api_model_payment_method_data { @@ -952,3 +972,259 @@ impl From for OpenBankingData { } } } + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TokenizedCardValue1 { + pub card_number: String, + pub exp_year: String, + pub exp_month: String, + pub nickname: Option, + pub card_last_four: Option, + pub card_token: Option, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct TokenizedCardValue2 { + pub card_security_code: Option, + pub card_fingerprint: Option, + pub external_id: Option, + pub customer_id: Option, + pub payment_method_id: Option, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct TokenizedWalletValue1 { + pub data: WalletData, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct TokenizedWalletValue2 { + pub customer_id: Option, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct TokenizedBankTransferValue1 { + pub data: BankTransferData, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct TokenizedBankTransferValue2 { + pub customer_id: Option, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct TokenizedBankRedirectValue1 { + pub data: BankRedirectData, +} + +#[derive(Debug, serde::Serialize, serde::Deserialize)] +pub struct TokenizedBankRedirectValue2 { + pub customer_id: Option, +} + +pub trait GetPaymentMethodType { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType; +} + +impl GetPaymentMethodType for CardRedirectData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::Knet {} => api_enums::PaymentMethodType::Knet, + Self::Benefit {} => api_enums::PaymentMethodType::Benefit, + Self::MomoAtm {} => api_enums::PaymentMethodType::MomoAtm, + Self::CardRedirect {} => api_enums::PaymentMethodType::CardRedirect, + } + } +} + +impl GetPaymentMethodType for WalletData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::AliPayQr(_) | Self::AliPayRedirect(_) => api_enums::PaymentMethodType::AliPay, + Self::AliPayHkRedirect(_) => api_enums::PaymentMethodType::AliPayHk, + Self::MomoRedirect(_) => api_enums::PaymentMethodType::Momo, + Self::KakaoPayRedirect(_) => api_enums::PaymentMethodType::KakaoPay, + Self::GoPayRedirect(_) => api_enums::PaymentMethodType::GoPay, + Self::GcashRedirect(_) => api_enums::PaymentMethodType::Gcash, + Self::ApplePay(_) | Self::ApplePayRedirect(_) | Self::ApplePayThirdPartySdk(_) => { + api_enums::PaymentMethodType::ApplePay + } + Self::DanaRedirect {} => api_enums::PaymentMethodType::Dana, + Self::GooglePay(_) | Self::GooglePayRedirect(_) | Self::GooglePayThirdPartySdk(_) => { + api_enums::PaymentMethodType::GooglePay + } + Self::MbWayRedirect(_) => api_enums::PaymentMethodType::MbWay, + Self::MobilePayRedirect(_) => api_enums::PaymentMethodType::MobilePay, + Self::PaypalRedirect(_) | Self::PaypalSdk(_) => api_enums::PaymentMethodType::Paypal, + Self::SamsungPay(_) => api_enums::PaymentMethodType::SamsungPay, + Self::TwintRedirect {} => api_enums::PaymentMethodType::Twint, + Self::VippsRedirect {} => api_enums::PaymentMethodType::Vipps, + Self::TouchNGoRedirect(_) => api_enums::PaymentMethodType::TouchNGo, + Self::WeChatPayRedirect(_) | Self::WeChatPayQr(_) => { + api_enums::PaymentMethodType::WeChatPay + } + Self::CashappQr(_) => api_enums::PaymentMethodType::Cashapp, + Self::SwishQr(_) => api_enums::PaymentMethodType::Swish, + Self::Mifinity(_) => api_enums::PaymentMethodType::Mifinity, + } + } +} + +impl GetPaymentMethodType for PayLaterData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::KlarnaRedirect { .. } => api_enums::PaymentMethodType::Klarna, + Self::KlarnaSdk { .. } => api_enums::PaymentMethodType::Klarna, + Self::AffirmRedirect {} => api_enums::PaymentMethodType::Affirm, + Self::AfterpayClearpayRedirect { .. } => api_enums::PaymentMethodType::AfterpayClearpay, + Self::PayBrightRedirect {} => api_enums::PaymentMethodType::PayBright, + Self::WalleyRedirect {} => api_enums::PaymentMethodType::Walley, + Self::AlmaRedirect {} => api_enums::PaymentMethodType::Alma, + Self::AtomeRedirect {} => api_enums::PaymentMethodType::Atome, + } + } +} + +impl GetPaymentMethodType for BankRedirectData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::BancontactCard { .. } => api_enums::PaymentMethodType::BancontactCard, + Self::Bizum {} => api_enums::PaymentMethodType::Bizum, + Self::Blik { .. } => api_enums::PaymentMethodType::Blik, + Self::Eps { .. } => api_enums::PaymentMethodType::Eps, + Self::Giropay { .. } => api_enums::PaymentMethodType::Giropay, + Self::Ideal { .. } => api_enums::PaymentMethodType::Ideal, + Self::Interac { .. } => api_enums::PaymentMethodType::Interac, + Self::OnlineBankingCzechRepublic { .. } => { + api_enums::PaymentMethodType::OnlineBankingCzechRepublic + } + Self::OnlineBankingFinland { .. } => api_enums::PaymentMethodType::OnlineBankingFinland, + Self::OnlineBankingPoland { .. } => api_enums::PaymentMethodType::OnlineBankingPoland, + Self::OnlineBankingSlovakia { .. } => { + api_enums::PaymentMethodType::OnlineBankingSlovakia + } + Self::OpenBankingUk { .. } => api_enums::PaymentMethodType::OpenBankingUk, + Self::Przelewy24 { .. } => api_enums::PaymentMethodType::Przelewy24, + Self::Sofort { .. } => api_enums::PaymentMethodType::Sofort, + Self::Trustly { .. } => api_enums::PaymentMethodType::Trustly, + Self::OnlineBankingFpx { .. } => api_enums::PaymentMethodType::OnlineBankingFpx, + Self::OnlineBankingThailand { .. } => { + api_enums::PaymentMethodType::OnlineBankingThailand + } + Self::LocalBankRedirect { .. } => api_enums::PaymentMethodType::LocalBankRedirect, + } + } +} + +impl GetPaymentMethodType for BankDebitData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::AchBankDebit { .. } => api_enums::PaymentMethodType::Ach, + Self::SepaBankDebit { .. } => api_enums::PaymentMethodType::Sepa, + Self::BecsBankDebit { .. } => api_enums::PaymentMethodType::Becs, + Self::BacsBankDebit { .. } => api_enums::PaymentMethodType::Bacs, + } + } +} + +impl GetPaymentMethodType for BankTransferData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::AchBankTransfer { .. } => api_enums::PaymentMethodType::Ach, + Self::SepaBankTransfer { .. } => api_enums::PaymentMethodType::Sepa, + Self::BacsBankTransfer { .. } => api_enums::PaymentMethodType::Bacs, + Self::MultibancoBankTransfer { .. } => api_enums::PaymentMethodType::Multibanco, + Self::PermataBankTransfer { .. } => api_enums::PaymentMethodType::PermataBankTransfer, + Self::BcaBankTransfer { .. } => api_enums::PaymentMethodType::BcaBankTransfer, + Self::BniVaBankTransfer { .. } => api_enums::PaymentMethodType::BniVa, + Self::BriVaBankTransfer { .. } => api_enums::PaymentMethodType::BriVa, + Self::CimbVaBankTransfer { .. } => api_enums::PaymentMethodType::CimbVa, + Self::DanamonVaBankTransfer { .. } => api_enums::PaymentMethodType::DanamonVa, + Self::MandiriVaBankTransfer { .. } => api_enums::PaymentMethodType::MandiriVa, + Self::Pix { .. } => api_enums::PaymentMethodType::Pix, + Self::Pse {} => api_enums::PaymentMethodType::Pse, + Self::LocalBankTransfer { .. } => api_enums::PaymentMethodType::LocalBankTransfer, + } + } +} + +impl GetPaymentMethodType for CryptoData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + api_enums::PaymentMethodType::CryptoCurrency + } +} + +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 { + Self::UpiCollect(_) => api_enums::PaymentMethodType::UpiCollect, + Self::UpiIntent(_) => api_enums::PaymentMethodType::UpiIntent, + } + } +} +impl GetPaymentMethodType for VoucherData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::Boleto(_) => api_enums::PaymentMethodType::Boleto, + Self::Efecty => api_enums::PaymentMethodType::Efecty, + Self::PagoEfectivo => api_enums::PaymentMethodType::PagoEfectivo, + Self::RedCompra => api_enums::PaymentMethodType::RedCompra, + Self::RedPagos => api_enums::PaymentMethodType::RedPagos, + Self::Alfamart(_) => api_enums::PaymentMethodType::Alfamart, + Self::Indomaret(_) => api_enums::PaymentMethodType::Indomaret, + Self::Oxxo => api_enums::PaymentMethodType::Oxxo, + Self::SevenEleven(_) => api_enums::PaymentMethodType::SevenEleven, + Self::Lawson(_) => api_enums::PaymentMethodType::Lawson, + Self::MiniStop(_) => api_enums::PaymentMethodType::MiniStop, + Self::FamilyMart(_) => api_enums::PaymentMethodType::FamilyMart, + Self::Seicomart(_) => api_enums::PaymentMethodType::Seicomart, + Self::PayEasy(_) => api_enums::PaymentMethodType::PayEasy, + } + } +} +impl GetPaymentMethodType for GiftCardData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::Givex(_) => api_enums::PaymentMethodType::Givex, + Self::PaySafeCard {} => api_enums::PaymentMethodType::PaySafeCard, + } + } +} + +impl GetPaymentMethodType for OpenBankingData { + fn get_payment_method_type(&self) -> api_enums::PaymentMethodType { + match self { + Self::OpenBankingPIS {} => api_enums::PaymentMethodType::OpenBankingPIS, + } + } +} + +impl From for ExtendedCardInfo { + fn from(value: Card) -> Self { + Self { + card_number: value.card_number, + card_exp_month: value.card_exp_month, + card_exp_year: value.card_exp_year, + card_holder_name: None, + card_cvc: value.card_cvc, + card_issuer: value.card_issuer, + card_network: value.card_network, + card_type: value.card_type, + card_issuing_country: value.card_issuing_country, + bank_code: value.bank_code, + } + } +} diff --git a/crates/router/src/connector/aci/transformers.rs b/crates/router/src/connector/aci/transformers.rs index 175138add7..933b432635 100644 --- a/crates/router/src/connector/aci/transformers.rs +++ b/crates/router/src/connector/aci/transformers.rs @@ -448,7 +448,8 @@ impl TryFrom<&AciRouterData<&types::PaymentsAuthorizeRouterData>> for AciPayment | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Aci"), ))? diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs index b1f14e8305..71c5bb438d 100644 --- a/crates/router/src/connector/adyen/transformers.rs +++ b/crates/router/src/connector/adyen/transformers.rs @@ -1556,7 +1556,8 @@ impl<'a> TryFrom<&AdyenRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Adyen"), ))? @@ -2558,7 +2559,8 @@ impl<'a> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotSupported { message: "Network tokenization for payment method".to_string(), connector: "Adyen", diff --git a/crates/router/src/connector/airwallex/transformers.rs b/crates/router/src/connector/airwallex/transformers.rs index 9fab84559b..4d84f64534 100644 --- a/crates/router/src/connector/airwallex/transformers.rs +++ b/crates/router/src/connector/airwallex/transformers.rs @@ -205,7 +205,8 @@ impl TryFrom<&AirwallexRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("airwallex"), )) diff --git a/crates/router/src/connector/authorizedotnet/transformers.rs b/crates/router/src/connector/authorizedotnet/transformers.rs index 33570a782f..14f61d1ded 100644 --- a/crates/router/src/connector/authorizedotnet/transformers.rs +++ b/crates/router/src/connector/authorizedotnet/transformers.rs @@ -343,7 +343,8 @@ impl TryFrom<&types::SetupMandateRouterData> for CreateCustomerProfileRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("authorizedotnet"), ))? @@ -522,7 +523,8 @@ impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message( "authorizedotnet", @@ -581,7 +583,8 @@ impl | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("authorizedotnet"), ))? diff --git a/crates/router/src/connector/bankofamerica/transformers.rs b/crates/router/src/connector/bankofamerica/transformers.rs index 34244bbb81..46a522c737 100644 --- a/crates/router/src/connector/bankofamerica/transformers.rs +++ b/crates/router/src/connector/bankofamerica/transformers.rs @@ -322,7 +322,8 @@ impl TryFrom<&types::SetupMandateRouterData> for BankOfAmericaPaymentsRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("BankOfAmerica"), ))? @@ -1073,7 +1074,8 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message( "Bank of America", diff --git a/crates/router/src/connector/billwerk/transformers.rs b/crates/router/src/connector/billwerk/transformers.rs index e91184c878..c6f2be9dbf 100644 --- a/crates/router/src/connector/billwerk/transformers.rs +++ b/crates/router/src/connector/billwerk/transformers.rs @@ -103,7 +103,8 @@ impl TryFrom<&types::TokenizationRouterData> for BillwerkTokenRequest { | domain::payments::PaymentMethodData::Voucher(_) | domain::payments::PaymentMethodData::GiftCard(_) | domain::payments::PaymentMethodData::OpenBanking(_) - | domain::payments::PaymentMethodData::CardToken(_) => { + | domain::payments::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("billwerk"), ) diff --git a/crates/router/src/connector/bluesnap/transformers.rs b/crates/router/src/connector/bluesnap/transformers.rs index dc67c1961b..6ebcdf0e76 100644 --- a/crates/router/src/connector/bluesnap/transformers.rs +++ b/crates/router/src/connector/bluesnap/transformers.rs @@ -228,7 +228,8 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( "Selected payment method via Token flow through bluesnap".to_string(), ) @@ -393,7 +394,8 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("bluesnap"), )) diff --git a/crates/router/src/connector/boku/transformers.rs b/crates/router/src/connector/boku/transformers.rs index eeb914fd84..5fd6b0e6a2 100644 --- a/crates/router/src/connector/boku/transformers.rs +++ b/crates/router/src/connector/boku/transformers.rs @@ -111,7 +111,8 @@ impl TryFrom<&BokuRouterData<&types::PaymentsAuthorizeRouterData>> for BokuPayme | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("boku"), ))? diff --git a/crates/router/src/connector/braintree/transformers.rs b/crates/router/src/connector/braintree/transformers.rs index e5f97dc333..22982ceb21 100644 --- a/crates/router/src/connector/braintree/transformers.rs +++ b/crates/router/src/connector/braintree/transformers.rs @@ -309,7 +309,8 @@ impl TryFrom<&BraintreeRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("braintree"), ) @@ -1098,7 +1099,8 @@ impl TryFrom<&types::TokenizationRouterData> for BraintreeTokenRequest { | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("braintree"), ) @@ -1702,7 +1704,8 @@ fn get_braintree_redirect_form( | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::CardToken(_) => Err( + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => Err( errors::ConnectorError::NotImplemented("given payment method".to_owned()), )?, }, diff --git a/crates/router/src/connector/checkout/transformers.rs b/crates/router/src/connector/checkout/transformers.rs index be48d2a864..223256155c 100644 --- a/crates/router/src/connector/checkout/transformers.rs +++ b/crates/router/src/connector/checkout/transformers.rs @@ -133,7 +133,8 @@ impl TryFrom<&types::TokenizationRouterData> for TokenRequest { | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("checkout"), ) @@ -370,7 +371,8 @@ impl TryFrom<&CheckoutRouterData<&types::PaymentsAuthorizeRouterData>> for Payme | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("checkout"), )) diff --git a/crates/router/src/connector/cryptopay/transformers.rs b/crates/router/src/connector/cryptopay/transformers.rs index c15afd7fd4..cd22890ca5 100644 --- a/crates/router/src/connector/cryptopay/transformers.rs +++ b/crates/router/src/connector/cryptopay/transformers.rs @@ -79,7 +79,8 @@ impl TryFrom<&CryptopayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("CryptoPay"), )) diff --git a/crates/router/src/connector/cybersource/transformers.rs b/crates/router/src/connector/cybersource/transformers.rs index c68f0e6069..67f88e24ab 100644 --- a/crates/router/src/connector/cybersource/transformers.rs +++ b/crates/router/src/connector/cybersource/transformers.rs @@ -215,7 +215,8 @@ impl TryFrom<&types::SetupMandateRouterData> for CybersourceZeroMandateRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Cybersource"), ))? @@ -1400,7 +1401,8 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Cybersource"), ) @@ -1507,7 +1509,8 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Cybersource"), ) @@ -2220,7 +2223,8 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsPreProcessingRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Cybersource"), )) @@ -2330,7 +2334,8 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsCompleteAuthorizeRouterData> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Cybersource"), ) diff --git a/crates/router/src/connector/datatrans/transformers.rs b/crates/router/src/connector/datatrans/transformers.rs index 96c7bcd8b2..afc9288b65 100644 --- a/crates/router/src/connector/datatrans/transformers.rs +++ b/crates/router/src/connector/datatrans/transformers.rs @@ -188,7 +188,8 @@ impl TryFrom<&DatatransRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( connector_utils::get_unimplemented_payment_method_error_message("Datatrans"), ))? diff --git a/crates/router/src/connector/dlocal/transformers.rs b/crates/router/src/connector/dlocal/transformers.rs index ca18d12a08..a613cdb205 100644 --- a/crates/router/src/connector/dlocal/transformers.rs +++ b/crates/router/src/connector/dlocal/transformers.rs @@ -167,7 +167,8 @@ impl TryFrom<&DlocalRouterData<&types::PaymentsAuthorizeRouterData>> for DlocalP | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( crate::connector::utils::get_unimplemented_payment_method_error_message( "Dlocal", diff --git a/crates/router/src/connector/forte/transformers.rs b/crates/router/src/connector/forte/transformers.rs index 0533d71ffe..b039282b71 100644 --- a/crates/router/src/connector/forte/transformers.rs +++ b/crates/router/src/connector/forte/transformers.rs @@ -116,7 +116,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for FortePaymentsRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Forte"), ))? diff --git a/crates/router/src/connector/globepay/transformers.rs b/crates/router/src/connector/globepay/transformers.rs index 8974c9f94b..df89d3deb9 100644 --- a/crates/router/src/connector/globepay/transformers.rs +++ b/crates/router/src/connector/globepay/transformers.rs @@ -74,7 +74,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for GlobepayPaymentsRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("globepay"), ))? diff --git a/crates/router/src/connector/gocardless/transformers.rs b/crates/router/src/connector/gocardless/transformers.rs index fb27f5138a..572e4efa33 100644 --- a/crates/router/src/connector/gocardless/transformers.rs +++ b/crates/router/src/connector/gocardless/transformers.rs @@ -247,7 +247,8 @@ impl TryFrom<&types::TokenizationRouterData> for CustomerBankAccount { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Gocardless"), ) @@ -417,7 +418,8 @@ impl TryFrom<&types::SetupMandateRouterData> for GocardlessMandateRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( "Setup Mandate flow for selected payment method through Gocardless".to_string(), )) diff --git a/crates/router/src/connector/iatapay/transformers.rs b/crates/router/src/connector/iatapay/transformers.rs index 845e079e13..f6b8c266ce 100644 --- a/crates/router/src/connector/iatapay/transformers.rs +++ b/crates/router/src/connector/iatapay/transformers.rs @@ -205,7 +205,8 @@ impl | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::OpenBanking(_) => { + | domain::PaymentMethodData::OpenBanking(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("iatapay"), ))? diff --git a/crates/router/src/connector/itaubank/transformers.rs b/crates/router/src/connector/itaubank/transformers.rs index 5c53cfbf16..9af0a25dd8 100644 --- a/crates/router/src/connector/itaubank/transformers.rs +++ b/crates/router/src/connector/itaubank/transformers.rs @@ -119,7 +119,8 @@ impl TryFrom<&ItaubankRouterData<&types::PaymentsAuthorizeRouterData>> for Itaub | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::OpenBanking(_) => { + | domain::PaymentMethodData::OpenBanking(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( "Selected payment method through itaubank".to_string(), ) diff --git a/crates/router/src/connector/klarna.rs b/crates/router/src/connector/klarna.rs index fbfb8b7197..0e6fab8058 100644 --- a/crates/router/src/connector/klarna.rs +++ b/crates/router/src/connector/klarna.rs @@ -652,7 +652,8 @@ impl | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::OpenBanking(_) | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(report!(errors::ConnectorError::NotImplemented( connector_utils::get_unimplemented_payment_method_error_message( req.connector.as_str(), diff --git a/crates/router/src/connector/mifinity/transformers.rs b/crates/router/src/connector/mifinity/transformers.rs index 7fd34b9369..0af3826c87 100644 --- a/crates/router/src/connector/mifinity/transformers.rs +++ b/crates/router/src/connector/mifinity/transformers.rs @@ -195,7 +195,8 @@ impl TryFrom<&MifinityRouterData<&types::PaymentsAuthorizeRouterData>> for Mifin | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Mifinity"), ) diff --git a/crates/router/src/connector/multisafepay/transformers.rs b/crates/router/src/connector/multisafepay/transformers.rs index ac0a04de18..0fd483a421 100644 --- a/crates/router/src/connector/multisafepay/transformers.rs +++ b/crates/router/src/connector/multisafepay/transformers.rs @@ -607,7 +607,8 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("multisafepay"), ))? @@ -788,7 +789,8 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::OpenBanking(_) => { + | domain::PaymentMethodData::OpenBanking(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("multisafepay"), ))? diff --git a/crates/router/src/connector/nexinets/transformers.rs b/crates/router/src/connector/nexinets/transformers.rs index 7e32ae5ebe..43cb4cecec 100644 --- a/crates/router/src/connector/nexinets/transformers.rs +++ b/crates/router/src/connector/nexinets/transformers.rs @@ -626,7 +626,8 @@ fn get_payment_details_and_product( | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("nexinets"), ))?, } diff --git a/crates/router/src/connector/nmi/transformers.rs b/crates/router/src/connector/nmi/transformers.rs index e0858e16a4..069a51ae52 100644 --- a/crates/router/src/connector/nmi/transformers.rs +++ b/crates/router/src/connector/nmi/transformers.rs @@ -585,7 +585,8 @@ impl | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("nmi"), ) diff --git a/crates/router/src/connector/noon/transformers.rs b/crates/router/src/connector/noon/transformers.rs index 8336cbf131..b7df6829da 100644 --- a/crates/router/src/connector/noon/transformers.rs +++ b/crates/router/src/connector/noon/transformers.rs @@ -353,7 +353,8 @@ impl TryFrom<&NoonRouterData<&types::PaymentsAuthorizeRouterData>> for NoonPayme | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( conn_utils::get_unimplemented_payment_method_error_message("Noon"), )) diff --git a/crates/router/src/connector/nuvei/transformers.rs b/crates/router/src/connector/nuvei/transformers.rs index 1aa3451735..e671164082 100644 --- a/crates/router/src/connector/nuvei/transformers.rs +++ b/crates/router/src/connector/nuvei/transformers.rs @@ -996,7 +996,8 @@ where | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("nuvei"), ) @@ -1199,6 +1200,7 @@ impl TryFrom<(&types::PaymentsCompleteAuthorizeRouterData, Secret)> | Some(domain::PaymentMethodData::Upi(..)) | Some(domain::PaymentMethodData::OpenBanking(_)) | Some(domain::PaymentMethodData::CardToken(..)) + | Some(domain::PaymentMethodData::NetworkToken(..)) | None => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("nuvei"), )), diff --git a/crates/router/src/connector/opayo/transformers.rs b/crates/router/src/connector/opayo/transformers.rs index 5771b45100..dcb4e201e8 100644 --- a/crates/router/src/connector/opayo/transformers.rs +++ b/crates/router/src/connector/opayo/transformers.rs @@ -57,7 +57,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for OpayoPaymentsRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Opayo"), ) diff --git a/crates/router/src/connector/payeezy/transformers.rs b/crates/router/src/connector/payeezy/transformers.rs index 8da3e7502b..0bb10c9845 100644 --- a/crates/router/src/connector/payeezy/transformers.rs +++ b/crates/router/src/connector/payeezy/transformers.rs @@ -261,9 +261,12 @@ fn get_payment_method_data( | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Payeezy"), - ))?, + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Payeezy"), + ))? + } } } diff --git a/crates/router/src/connector/payme/transformers.rs b/crates/router/src/connector/payme/transformers.rs index 2ec35b7a7d..c12e478b08 100644 --- a/crates/router/src/connector/payme/transformers.rs +++ b/crates/router/src/connector/payme/transformers.rs @@ -430,7 +430,8 @@ impl TryFrom<&PaymentMethodData> for SalePaymentMethod { | PaymentMethodData::Upi(_) | PaymentMethodData::Voucher(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => { + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()) } } @@ -675,7 +676,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for PayRequest { | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("payme"), ))?, } @@ -736,6 +738,7 @@ impl TryFrom<&types::PaymentsCompleteAuthorizeRouterData> for Pay3dsRequest { | Some(PaymentMethodData::GiftCard(_)) | Some(PaymentMethodData::OpenBanking(_)) | Some(PaymentMethodData::CardToken(_)) + | Some(PaymentMethodData::NetworkToken(_)) | None => { Err(errors::ConnectorError::NotImplemented("Tokenize Flow".to_string()).into()) } @@ -775,7 +778,8 @@ impl TryFrom<&types::TokenizationRouterData> for CaptureBuyerRequest { | PaymentMethodData::Voucher(_) | PaymentMethodData::GiftCard(_) | PaymentMethodData::OpenBanking(_) - | PaymentMethodData::CardToken(_) => { + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented("Tokenize Flow".to_string()).into()) } } diff --git a/crates/router/src/connector/paypal/transformers.rs b/crates/router/src/connector/paypal/transformers.rs index fb70581cd9..24b2f2b88e 100644 --- a/crates/router/src/connector/paypal/transformers.rs +++ b/crates/router/src/connector/paypal/transformers.rs @@ -552,7 +552,8 @@ impl TryFrom<&PaypalRouterData<&types::PaymentsAuthorizeRouterData>> for PaypalP | domain::PaymentMethodData::Crypto(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Paypal"), ) diff --git a/crates/router/src/connector/placetopay/transformers.rs b/crates/router/src/connector/placetopay/transformers.rs index 50c897653d..919fe25bdd 100644 --- a/crates/router/src/connector/placetopay/transformers.rs +++ b/crates/router/src/connector/placetopay/transformers.rs @@ -142,7 +142,8 @@ impl TryFrom<&PlacetopayRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Placetopay"), ) diff --git a/crates/router/src/connector/powertranz/transformers.rs b/crates/router/src/connector/powertranz/transformers.rs index fedaabb5e7..97c2994b4c 100644 --- a/crates/router/src/connector/powertranz/transformers.rs +++ b/crates/router/src/connector/powertranz/transformers.rs @@ -117,7 +117,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for PowertranzPaymentsRequest | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotSupported { message: utils::SELECTED_PAYMENT_METHOD.to_string(), connector: "powertranz", diff --git a/crates/router/src/connector/razorpay/transformers.rs b/crates/router/src/connector/razorpay/transformers.rs index 8cf3289188..69d6bdce38 100644 --- a/crates/router/src/connector/razorpay/transformers.rs +++ b/crates/router/src/connector/razorpay/transformers.rs @@ -399,7 +399,8 @@ impl | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()) } }?; diff --git a/crates/router/src/connector/shift4/transformers.rs b/crates/router/src/connector/shift4/transformers.rs index f384d8d296..13c0395cf9 100644 --- a/crates/router/src/connector/shift4/transformers.rs +++ b/crates/router/src/connector/shift4/transformers.rs @@ -248,7 +248,8 @@ where | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Shift4"), ) @@ -472,6 +473,7 @@ impl TryFrom<&types::RouterData 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 67be82bb2d..db7058f338 100644 --- a/crates/router/src/connector/square/transformers.rs +++ b/crates/router/src/connector/square/transformers.rs @@ -175,7 +175,8 @@ impl TryFrom<&types::TokenizationRouterData> for SquareTokenRequest { | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Square"), ))? @@ -292,7 +293,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for SquarePaymentsRequest { | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Square"), ))? diff --git a/crates/router/src/connector/stripe/transformers.rs b/crates/router/src/connector/stripe/transformers.rs index 90ddc9f0b9..6b26818c29 100644 --- a/crates/router/src/connector/stripe/transformers.rs +++ b/crates/router/src/connector/stripe/transformers.rs @@ -1334,10 +1334,13 @@ fn create_stripe_payment_method( | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::MandatePayment | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( - connector_util::get_unimplemented_payment_method_error_message("stripe"), - ) - .into()), + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { + Err(errors::ConnectorError::NotImplemented( + connector_util::get_unimplemented_payment_method_error_message("stripe"), + ) + .into()) + } } } @@ -1711,7 +1714,8 @@ impl TryFrom<(&types::PaymentsAuthorizeRouterData, MinorUnit)> for PaymentIntent | domain::payments::PaymentMethodData::Voucher(_) | domain::payments::PaymentMethodData::GiftCard(_) | domain::payments::PaymentMethodData::OpenBanking(_) - | domain::payments::PaymentMethodData::CardToken(_) => { + | domain::payments::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotSupported { message: "Network tokenization for payment method".to_string(), connector: "Stripe", @@ -3299,6 +3303,7 @@ impl | Some(domain::PaymentMethodData::Voucher(..)) | Some(domain::PaymentMethodData::OpenBanking(..)) | Some(domain::PaymentMethodData::CardToken(..)) + | Some(domain::PaymentMethodData::NetworkToken(..)) | None => Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("stripe"), ) @@ -3752,7 +3757,8 @@ impl | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( connector_util::get_unimplemented_payment_method_error_message("stripe"), ))? diff --git a/crates/router/src/connector/trustpay/transformers.rs b/crates/router/src/connector/trustpay/transformers.rs index 85539e253b..d05db4d28a 100644 --- a/crates/router/src/connector/trustpay/transformers.rs +++ b/crates/router/src/connector/trustpay/transformers.rs @@ -434,7 +434,8 @@ impl TryFrom<&TrustpayRouterData<&types::PaymentsAuthorizeRouterData>> for Trust | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("trustpay"), ) diff --git a/crates/router/src/connector/tsys/transformers.rs b/crates/router/src/connector/tsys/transformers.rs index 53561d93a9..347a95151d 100644 --- a/crates/router/src/connector/tsys/transformers.rs +++ b/crates/router/src/connector/tsys/transformers.rs @@ -77,7 +77,8 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for TsysPaymentsRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("tsys"), ))? diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index d61d78d37f..d5c01503ed 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -2677,12 +2677,14 @@ pub enum PaymentMethodDataType { PromptPay, VietQr, OpenBanking, + NetworkToken, } impl From for PaymentMethodDataType { fn from(pm_data: domain::payments::PaymentMethodData) -> Self { match pm_data { domain::payments::PaymentMethodData::Card(_) => Self::Card, + domain::payments::PaymentMethodData::NetworkToken(_) => Self::NetworkToken, domain::payments::PaymentMethodData::CardRedirect(card_redirect_data) => { match card_redirect_data { domain::CardRedirectData::Knet {} => Self::Knet, diff --git a/crates/router/src/connector/volt/transformers.rs b/crates/router/src/connector/volt/transformers.rs index fcc95cd0d4..451c70279c 100644 --- a/crates/router/src/connector/volt/transformers.rs +++ b/crates/router/src/connector/volt/transformers.rs @@ -141,7 +141,8 @@ impl TryFrom<&VoltRouterData<&types::PaymentsAuthorizeRouterData>> for VoltPayme | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Volt"), ) diff --git a/crates/router/src/connector/wellsfargo/transformers.rs b/crates/router/src/connector/wellsfargo/transformers.rs index 93ed04288a..44d0332dae 100644 --- a/crates/router/src/connector/wellsfargo/transformers.rs +++ b/crates/router/src/connector/wellsfargo/transformers.rs @@ -205,7 +205,8 @@ impl TryFrom<&types::SetupMandateRouterData> for WellsfargoZeroMandateRequest { | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Wellsfargo"), ))? @@ -1280,7 +1281,8 @@ impl TryFrom<&WellsfargoRouterData<&types::PaymentsAuthorizeRouterData>> | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Wellsfargo"), ) diff --git a/crates/router/src/connector/worldline/transformers.rs b/crates/router/src/connector/worldline/transformers.rs index 11d9da7785..e0278dc4cc 100644 --- a/crates/router/src/connector/worldline/transformers.rs +++ b/crates/router/src/connector/worldline/transformers.rs @@ -250,7 +250,8 @@ impl | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { 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 cab949789b..de82e11548 100644 --- a/crates/router/src/connector/worldpay/transformers.rs +++ b/crates/router/src/connector/worldpay/transformers.rs @@ -109,10 +109,13 @@ fn fetch_payment_instrument( | domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("worldpay"), - ) - .into()), + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { + Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("worldpay"), + ) + .into()) + } } } diff --git a/crates/router/src/connector/zen/transformers.rs b/crates/router/src/connector/zen/transformers.rs index 2562277ee9..d2e8ce4028 100644 --- a/crates/router/src/connector/zen/transformers.rs +++ b/crates/router/src/connector/zen/transformers.rs @@ -695,7 +695,8 @@ impl TryFrom<&ZenRouterData<&types::PaymentsAuthorizeRouterData>> for ZenPayment | domain::PaymentMethodData::RealTimePayment(_) | domain::PaymentMethodData::Upi(_) | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { + | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) => { 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 19a79ab48a..60aed55b1f 100644 --- a/crates/router/src/connector/zsl/transformers.rs +++ b/crates/router/src/connector/zsl/transformers.rs @@ -182,6 +182,7 @@ impl TryFrom<&ZslRouterData<&types::PaymentsAuthorizeRouterData>> for ZslPayment | domain::PaymentMethodData::Voucher(_) | domain::PaymentMethodData::GiftCard(_) | domain::PaymentMethodData::CardToken(_) + | domain::PaymentMethodData::NetworkToken(_) | domain::PaymentMethodData::OpenBanking(_) => { Err(errors::ConnectorError::NotImplemented( connector_utils::get_unimplemented_payment_method_error_message( diff --git a/crates/router/src/core/authentication.rs b/crates/router/src/core/authentication.rs index 2e292d1609..450a1986b2 100644 --- a/crates/router/src/core/authentication.rs +++ b/crates/router/src/core/authentication.rs @@ -22,7 +22,7 @@ pub async fn perform_authentication( state: &SessionState, merchant_id: common_utils::id_type::MerchantId, authentication_connector: String, - payment_method_data: payments::PaymentMethodData, + payment_method_data: domain::PaymentMethodData, payment_method: common_enums::PaymentMethod, billing_address: payments::Address, shipping_address: Option, diff --git a/crates/router/src/core/authentication/transformers.rs b/crates/router/src/core/authentication/transformers.rs index 5ca3d05f12..02d64e449a 100644 --- a/crates/router/src/core/authentication/transformers.rs +++ b/crates/router/src/core/authentication/transformers.rs @@ -28,7 +28,7 @@ const IRRELEVANT_CONNECTOR_REQUEST_REFERENCE_ID_IN_AUTHENTICATION_FLOW: &str = pub fn construct_authentication_router_data( merchant_id: common_utils::id_type::MerchantId, authentication_connector: String, - payment_method_data: payments::PaymentMethodData, + payment_method_data: domain::PaymentMethodData, payment_method: PaymentMethod, billing_address: payments::Address, shipping_address: Option, @@ -47,7 +47,7 @@ pub fn construct_authentication_router_data( three_ds_requestor_url: String, ) -> RouterResult { let router_request = types::authentication::ConnectorAuthenticationRequestData { - payment_method_data: From::from(payment_method_data), + payment_method_data, billing_address, shipping_address, browser_details, diff --git a/crates/router/src/core/blocklist/utils.rs b/crates/router/src/core/blocklist/utils.rs index 8edd75d3df..555be16a1c 100644 --- a/crates/router/src/core/blocklist/utils.rs +++ b/crates/router/src/core/blocklist/utils.rs @@ -304,7 +304,7 @@ where let merchant_fingerprint_secret = get_merchant_fingerprint_secret(state, merchant_id).await?; // Hashed Fingerprint to check whether or not this payment should be blocked. - let card_number_fingerprint = if let Some(api_models::payments::PaymentMethodData::Card(card)) = + let card_number_fingerprint = if let Some(domain::PaymentMethodData::Card(card)) = payment_data.payment_method_data.as_ref() { generate_fingerprint( @@ -332,9 +332,7 @@ where .payment_method_data .as_ref() .and_then(|pm_data| match pm_data { - api_models::payments::PaymentMethodData::Card(card) => { - Some(card.card_number.get_card_isin()) - } + domain::PaymentMethodData::Card(card) => Some(card.card_number.get_card_isin()), _ => None, }); @@ -344,7 +342,7 @@ where .payment_method_data .as_ref() .and_then(|pm_data| match pm_data { - api_models::payments::PaymentMethodData::Card(card) => { + domain::PaymentMethodData::Card(card) => { Some(card.card_number.get_extended_card_bin()) } _ => None, @@ -446,14 +444,12 @@ where pub async fn generate_payment_fingerprint( state: &SessionState, merchant_id: common_utils::id_type::MerchantId, - payment_method_data: Option, + payment_method_data: Option, ) -> CustomResult, errors::ApiErrorResponse> { let merchant_fingerprint_secret = get_merchant_fingerprint_secret(state, &merchant_id).await?; Ok( - if let Some(api_models::payments::PaymentMethodData::Card(card)) = - payment_method_data.as_ref() - { + if let Some(domain::PaymentMethodData::Card(card)) = payment_method_data.as_ref() { generate_fingerprint( state, StrongSecret::new(card.card_number.get_card_no()), diff --git a/crates/router/src/core/payment_methods.rs b/crates/router/src/core/payment_methods.rs index 09b36946b7..a33fe5bb06 100644 --- a/crates/router/src/core/payment_methods.rs +++ b/crates/router/src/core/payment_methods.rs @@ -9,9 +9,9 @@ pub mod vault; use std::{borrow::Cow, collections::HashSet}; pub use api_models::enums::Connector; +use api_models::payment_methods; #[cfg(feature = "payouts")] pub use api_models::{enums::PayoutConnectors, payouts as payout_types}; -use api_models::{payment_methods, payments::CardToken}; use common_utils::{ext_traits::Encode, id_type::CustomerId}; use diesel_models::{ enums, GenericLinkNew, PaymentMethodCollectLink, PaymentMethodCollectLinkData, @@ -35,10 +35,7 @@ use crate::{ }, routes::{app::StorageInterface, SessionState}, services, - types::{ - api::{self, payments}, - domain, storage, - }, + types::{domain, storage}, }; const PAYMENT_METHOD_STATUS_UPDATE_TASK: &str = "PAYMENT_METHOD_STATUS_UPDATE"; @@ -46,15 +43,15 @@ const PAYMENT_METHOD_STATUS_TAG: &str = "PAYMENT_METHOD_STATUS"; #[instrument(skip_all)] pub async fn retrieve_payment_method( - pm_data: &Option, + pm_data: &Option, state: &SessionState, payment_intent: &PaymentIntent, payment_attempt: &PaymentAttempt, merchant_key_store: &domain::MerchantKeyStore, business_profile: Option<&domain::BusinessProfile>, -) -> RouterResult<(Option, Option)> { +) -> RouterResult<(Option, Option)> { match pm_data { - pm_opt @ Some(pm @ api::PaymentMethodData::Card(_)) => { + pm_opt @ Some(pm @ domain::PaymentMethodData::Card(_)) => { let payment_token = helpers::store_payment_method_data_in_vault( state, payment_attempt, @@ -68,17 +65,17 @@ pub async fn retrieve_payment_method( Ok((pm_opt.to_owned(), payment_token)) } - pm @ Some(api::PaymentMethodData::PayLater(_)) => Ok((pm.to_owned(), None)), - pm @ Some(api::PaymentMethodData::Crypto(_)) => Ok((pm.to_owned(), None)), - pm @ Some(api::PaymentMethodData::BankDebit(_)) => Ok((pm.to_owned(), None)), - 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 @ Some(api::PaymentMethodData::OpenBanking(_)) => Ok((pm.to_owned(), None)), - pm_opt @ Some(pm @ api::PaymentMethodData::BankTransfer(_)) => { + pm @ Some(domain::PaymentMethodData::PayLater(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::Crypto(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::BankDebit(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::Upi(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::Voucher(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::Reward) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::RealTimePayment(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::CardRedirect(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::GiftCard(_)) => Ok((pm.to_owned(), None)), + pm @ Some(domain::PaymentMethodData::OpenBanking(_)) => Ok((pm.to_owned(), None)), + pm_opt @ Some(pm @ domain::PaymentMethodData::BankTransfer(_)) => { let payment_token = helpers::store_payment_method_data_in_vault( state, payment_attempt, @@ -92,7 +89,7 @@ pub async fn retrieve_payment_method( Ok((pm_opt.to_owned(), payment_token)) } - pm_opt @ Some(pm @ api::PaymentMethodData::Wallet(_)) => { + pm_opt @ Some(pm @ domain::PaymentMethodData::Wallet(_)) => { let payment_token = helpers::store_payment_method_data_in_vault( state, payment_attempt, @@ -106,7 +103,7 @@ pub async fn retrieve_payment_method( Ok((pm_opt.to_owned(), payment_token)) } - pm_opt @ Some(pm @ api::PaymentMethodData::BankRedirect(_)) => { + pm_opt @ Some(pm @ domain::PaymentMethodData::BankRedirect(_)) => { let payment_token = helpers::store_payment_method_data_in_vault( state, payment_attempt, @@ -434,7 +431,7 @@ pub async fn retrieve_payment_method_with_token( merchant_key_store: &domain::MerchantKeyStore, token_data: &storage::PaymentTokenData, payment_intent: &PaymentIntent, - card_token_data: Option<&CardToken>, + card_token_data: Option<&domain::CardToken>, customer: &Option, storage_scheme: common_enums::enums::MerchantStorageScheme, ) -> RouterResult { diff --git a/crates/router/src/core/payment_methods/vault.rs b/crates/router/src/core/payment_methods/vault.rs index 4e17ec6abd..918522e7a9 100644 --- a/crates/router/src/core/payment_methods/vault.rs +++ b/crates/router/src/core/payment_methods/vault.rs @@ -47,20 +47,16 @@ pub trait Vaultable: Sized { ) -> CustomResult<(Self, SupplementaryVaultData), errors::VaultError>; } -impl Vaultable for api::Card { +impl Vaultable for domain::Card { fn get_value1( &self, _customer_id: Option, ) -> CustomResult { - let value1 = api::TokenizedCardValue1 { + let value1 = domain::TokenizedCardValue1 { card_number: self.card_number.peek().clone(), exp_year: self.card_exp_year.peek().clone(), exp_month: self.card_exp_month.peek().clone(), - name_on_card: self - .card_holder_name - .as_ref() - .map(|name| name.peek().clone()), - nickname: None, + nickname: self.nick_name.as_ref().map(|name| name.peek().clone()), card_last_four: None, card_token: None, }; @@ -75,7 +71,7 @@ impl Vaultable for api::Card { &self, customer_id: Option, ) -> CustomResult { - let value2 = api::TokenizedCardValue2 { + let value2 = domain::TokenizedCardValue2 { card_security_code: Some(self.card_cvc.peek().clone()), card_fingerprint: None, external_id: None, @@ -93,12 +89,12 @@ impl Vaultable for api::Card { value1: String, value2: String, ) -> CustomResult<(Self, SupplementaryVaultData), errors::VaultError> { - let value1: api::TokenizedCardValue1 = value1 + let value1: domain::TokenizedCardValue1 = value1 .parse_struct("TokenizedCardValue1") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into card value1")?; - let value2: api::TokenizedCardValue2 = value2 + let value2: domain::TokenizedCardValue2 = value2 .parse_struct("TokenizedCardValue2") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into card value2")?; @@ -109,7 +105,6 @@ impl Vaultable for api::Card { .attach_printable("Invalid card number format from the mock locker")?, card_exp_month: value1.exp_month.into(), card_exp_year: value1.exp_year.into(), - card_holder_name: value1.name_on_card.map(masking::Secret::new), card_cvc: value2.card_security_code.unwrap_or_default().into(), card_issuer: None, card_network: None, @@ -128,12 +123,12 @@ impl Vaultable for api::Card { } } -impl Vaultable for api_models::payments::BankTransferData { +impl Vaultable for domain::BankTransferData { fn get_value1( &self, _customer_id: Option, ) -> CustomResult { - let value1 = api_models::payment_methods::TokenizedBankTransferValue1 { + let value1 = domain::TokenizedBankTransferValue1 { data: self.to_owned(), }; @@ -147,7 +142,7 @@ impl Vaultable for api_models::payments::BankTransferData { &self, customer_id: Option, ) -> CustomResult { - let value2 = api_models::payment_methods::TokenizedBankTransferValue2 { customer_id }; + let value2 = domain::TokenizedBankTransferValue2 { customer_id }; value2 .encode_to_string_of_json() @@ -159,12 +154,12 @@ impl Vaultable for api_models::payments::BankTransferData { value1: String, value2: String, ) -> CustomResult<(Self, SupplementaryVaultData), errors::VaultError> { - let value1: api_models::payment_methods::TokenizedBankTransferValue1 = value1 + let value1: domain::TokenizedBankTransferValue1 = value1 .parse_struct("TokenizedBankTransferValue1") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into bank transfer data")?; - let value2: api_models::payment_methods::TokenizedBankTransferValue2 = value2 + let value2: domain::TokenizedBankTransferValue2 = value2 .parse_struct("TokenizedBankTransferValue2") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into supplementary bank transfer data")?; @@ -180,12 +175,12 @@ impl Vaultable for api_models::payments::BankTransferData { } } -impl Vaultable for api::WalletData { +impl Vaultable for domain::WalletData { fn get_value1( &self, _customer_id: Option, ) -> CustomResult { - let value1 = api::TokenizedWalletValue1 { + let value1 = domain::TokenizedWalletValue1 { data: self.to_owned(), }; @@ -199,7 +194,7 @@ impl Vaultable for api::WalletData { &self, customer_id: Option, ) -> CustomResult { - let value2 = api::TokenizedWalletValue2 { customer_id }; + let value2 = domain::TokenizedWalletValue2 { customer_id }; value2 .encode_to_string_of_json() @@ -211,12 +206,12 @@ impl Vaultable for api::WalletData { value1: String, value2: String, ) -> CustomResult<(Self, SupplementaryVaultData), errors::VaultError> { - let value1: api::TokenizedWalletValue1 = value1 + let value1: domain::TokenizedWalletValue1 = value1 .parse_struct("TokenizedWalletValue1") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into wallet data value1")?; - let value2: api::TokenizedWalletValue2 = value2 + let value2: domain::TokenizedWalletValue2 = value2 .parse_struct("TokenizedWalletValue2") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into wallet data value2")?; @@ -232,12 +227,12 @@ impl Vaultable for api::WalletData { } } -impl Vaultable for api_models::payments::BankRedirectData { +impl Vaultable for domain::BankRedirectData { fn get_value1( &self, _customer_id: Option, ) -> CustomResult { - let value1 = api_models::payment_methods::TokenizedBankRedirectValue1 { + let value1 = domain::TokenizedBankRedirectValue1 { data: self.to_owned(), }; @@ -251,7 +246,7 @@ impl Vaultable for api_models::payments::BankRedirectData { &self, customer_id: Option, ) -> CustomResult { - let value2 = api_models::payment_methods::TokenizedBankRedirectValue2 { customer_id }; + let value2 = domain::TokenizedBankRedirectValue2 { customer_id }; value2 .encode_to_string_of_json() @@ -263,12 +258,12 @@ impl Vaultable for api_models::payments::BankRedirectData { value1: String, value2: String, ) -> CustomResult<(Self, SupplementaryVaultData), errors::VaultError> { - let value1: api_models::payment_methods::TokenizedBankRedirectValue1 = value1 + let value1: domain::TokenizedBankRedirectValue1 = value1 .parse_struct("TokenizedBankRedirectValue1") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into bank redirect data")?; - let value2: api_models::payment_methods::TokenizedBankRedirectValue2 = value2 + let value2: domain::TokenizedBankRedirectValue2 = value2 .parse_struct("TokenizedBankRedirectValue2") .change_context(errors::VaultError::ResponseDeserializationFailed) .attach_printable("Could not deserialize into supplementary bank redirect data")?; @@ -293,7 +288,7 @@ pub enum VaultPaymentMethod { BankRedirect(String), } -impl Vaultable for api::PaymentMethodData { +impl Vaultable for domain::PaymentMethodData { fn get_value1( &self, customer_id: Option, @@ -356,11 +351,11 @@ impl Vaultable for api::PaymentMethodData { match (value1, value2) { (VaultPaymentMethod::Card(mvalue1), VaultPaymentMethod::Card(mvalue2)) => { - let (card, supp_data) = api::Card::from_values(mvalue1, mvalue2)?; + let (card, supp_data) = domain::Card::from_values(mvalue1, mvalue2)?; Ok((Self::Card(card), supp_data)) } (VaultPaymentMethod::Wallet(mvalue1), VaultPaymentMethod::Wallet(mvalue2)) => { - let (wallet, supp_data) = api::WalletData::from_values(mvalue1, mvalue2)?; + let (wallet, supp_data) = domain::WalletData::from_values(mvalue1, mvalue2)?; Ok((Self::Wallet(wallet), supp_data)) } ( @@ -368,7 +363,7 @@ impl Vaultable for api::PaymentMethodData { VaultPaymentMethod::BankTransfer(mvalue2), ) => { let (bank_transfer, supp_data) = - api_models::payments::BankTransferData::from_values(mvalue1, mvalue2)?; + domain::BankTransferData::from_values(mvalue1, mvalue2)?; Ok((Self::BankTransfer(Box::new(bank_transfer)), supp_data)) } ( @@ -376,7 +371,7 @@ impl Vaultable for api::PaymentMethodData { VaultPaymentMethod::BankRedirect(mvalue2), ) => { let (bank_redirect, supp_data) = - api_models::payments::BankRedirectData::from_values(mvalue1, mvalue2)?; + domain::BankRedirectData::from_values(mvalue1, mvalue2)?; Ok((Self::BankRedirect(bank_redirect), supp_data)) } @@ -821,11 +816,11 @@ impl Vault { state: &routes::SessionState, lookup_key: &str, merchant_key_store: &domain::MerchantKeyStore, - ) -> RouterResult<(Option, SupplementaryVaultData)> { + ) -> RouterResult<(Option, SupplementaryVaultData)> { let de_tokenize = get_tokenized_data(state, lookup_key, true, merchant_key_store.key.get_inner()).await?; let (payment_method, customer_id) = - api::PaymentMethodData::from_values(de_tokenize.value1, de_tokenize.value2) + domain::PaymentMethodData::from_values(de_tokenize.value1, de_tokenize.value2) .change_context(errors::ApiErrorResponse::InternalServerError) .attach_printable("Error parsing Payment Method from Values")?; @@ -836,7 +831,7 @@ impl Vault { pub async fn store_payment_method_data_in_locker( state: &routes::SessionState, token_id: Option, - payment_method: &api::PaymentMethodData, + payment_method: &domain::PaymentMethodData, customer_id: Option, pm: enums::PaymentMethod, merchant_key_store: &domain::MerchantKeyStore, diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs index cc324fa529..00cc4839b4 100644 --- a/crates/router/src/core/payments.rs +++ b/crates/router/src/core/payments.rs @@ -1575,24 +1575,18 @@ where payment_processing_details, ) => { let apple_pay_data = match payment_data.payment_method_data.clone() { - Some(payment_method_data) => { - let domain_data = domain::PaymentMethodData::from(payment_method_data); - match domain_data { - domain::PaymentMethodData::Wallet(domain::WalletData::ApplePay( - wallet_data, - )) => Some( - ApplePayData::token_json(domain::WalletData::ApplePay(wallet_data)) - .change_context(errors::ApiErrorResponse::InternalServerError)? - .decrypt( - &payment_processing_details.payment_processing_certificate, - &payment_processing_details.payment_processing_certificate_key, - ) - .await - .change_context(errors::ApiErrorResponse::InternalServerError)?, - ), - _ => None, - } - } + Some(domain::PaymentMethodData::Wallet(domain::WalletData::ApplePay( + wallet_data, + ))) => Some( + ApplePayData::token_json(domain::WalletData::ApplePay(wallet_data)) + .change_context(errors::ApiErrorResponse::InternalServerError)? + .decrypt( + &payment_processing_details.payment_processing_certificate, + &payment_processing_details.payment_processing_certificate_key, + ) + .await + .change_context(errors::ApiErrorResponse::InternalServerError)?, + ), _ => None, }; @@ -2068,9 +2062,9 @@ where } //TODO: For ACH transfers, if preprocessing_step is not required for connectors encountered in future, add the check let router_data_and_should_continue_payment = match payment_data.payment_method_data.clone() { - Some(api_models::payments::PaymentMethodData::BankTransfer(data)) => match data.deref() { - api_models::payments::BankTransferData::AchBankTransfer { .. } - | api_models::payments::BankTransferData::MultibancoBankTransfer { .. } + Some(domain::PaymentMethodData::BankTransfer(data)) => match data.deref() { + domain::BankTransferData::AchBankTransfer { .. } + | domain::BankTransferData::MultibancoBankTransfer { .. } if connector.connector_name == router_types::Connector::Stripe => { if payment_data.payment_attempt.preprocessing_step_id.is_none() { @@ -2084,7 +2078,7 @@ where } _ => (router_data, should_continue_payment), }, - Some(api_models::payments::PaymentMethodData::Wallet(_)) => { + Some(domain::PaymentMethodData::Wallet(_)) => { if is_preprocessing_required_for_wallets(connector.connector_name.to_string()) { ( router_data.preprocessing_steps(state, connector).await?, @@ -2094,7 +2088,7 @@ where (router_data, should_continue_payment) } } - Some(api_models::payments::PaymentMethodData::Card(_)) => { + Some(domain::PaymentMethodData::Card(_)) => { if connector.connector_name == router_types::Connector::Payme && !matches!(format!("{operation:?}").as_str(), "CompleteAuthorize") { @@ -2143,7 +2137,7 @@ where (router_data, should_continue_payment) } } - Some(api_models::payments::PaymentMethodData::GiftCard(_)) => { + Some(domain::PaymentMethodData::GiftCard(_)) => { if connector.connector_name == router_types::Connector::Adyen { router_data = router_data.preprocessing_steps(state, connector).await?; @@ -2154,7 +2148,7 @@ where (router_data, should_continue_payment) } } - Some(api_models::payments::PaymentMethodData::BankDebit(_)) => { + Some(domain::PaymentMethodData::BankDebit(_)) => { if connector.connector_name == router_types::Connector::Gocardless { router_data = router_data.preprocessing_steps(state, connector).await?; let is_error_in_response = router_data.response.is_err(); @@ -2217,9 +2211,9 @@ where .await?; match payment_data.payment_method_data.clone() { - Some(api_models::payments::PaymentMethodData::OpenBanking( - api_models::payments::OpenBankingData::OpenBankingPIS { .. }, - )) => { + Some(domain::PaymentMethodData::OpenBanking(domain::OpenBankingData::OpenBankingPIS { + .. + })) => { if connector.connector_name == router_types::Connector::Plaid { router_data = router_data.postprocessing_steps(state, connector).await?; let token = if let Ok(ref res) = router_data.response { @@ -2706,7 +2700,7 @@ where pub token_data: Option, pub confirm: Option, pub force_sync: Option, - pub payment_method_data: Option, + pub payment_method_data: Option, pub payment_method_info: Option, pub refunds: Vec, pub disputes: Vec, diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index d3ca7d0428..1fe84121d5 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -4,7 +4,7 @@ use std::{borrow::Cow, str::FromStr}; use api_models::customers::CustomerRequestWithEmail; use api_models::{ mandates::RecurringDetails, - payments::{AddressDetailsWithPhone, CardToken, GetPaymentMethodType, RequestSurchargeDetails}, + payments::{AddressDetailsWithPhone, RequestSurchargeDetails}, }; use base64::Engine; use common_enums::ConnectorType; @@ -25,6 +25,7 @@ use futures::future::Either; use hyperswitch_domain_models::payments::payment_intent::CustomerData; use hyperswitch_domain_models::{ mandates::MandateData, + payment_method_data::GetPaymentMethodType, payments::{payment_attempt::PaymentAttempt, PaymentIntent}, router_data::KlarnaSdkResponse, }; @@ -1776,8 +1777,8 @@ pub async fn retrieve_payment_method_with_temporary_token( token: &str, payment_intent: &PaymentIntent, merchant_key_store: &domain::MerchantKeyStore, - card_token_data: Option<&CardToken>, -) -> RouterResult> { + card_token_data: Option<&domain::CardToken>, +) -> RouterResult> { let (pm, supplementary_data) = vault::Vault::get_payment_method_data_from_locker(state, token, merchant_key_store) .await @@ -1795,31 +1796,18 @@ pub async fn retrieve_payment_method_with_temporary_token( )?; Ok::<_, error_stack::Report>(match pm { - Some(api::PaymentMethodData::Card(card)) => { + Some(domain::PaymentMethodData::Card(card)) => { let mut updated_card = card.clone(); let mut is_card_updated = false; // The card_holder_name from locker retrieved card is considered if it is a non-empty string or else card_holder_name is picked // from payment_method_data.card_token object - let name_on_card = if let Some(name) = card.card_holder_name.clone() { - if name.clone().expose().is_empty() { - card_token_data - .and_then(|token_data| { - is_card_updated = true; - token_data.card_holder_name.clone() - }) - .or(Some(name)) - } else { - card.card_holder_name.clone() - } - } else { - card_token_data.and_then(|token_data| { - is_card_updated = true; - token_data.card_holder_name.clone() - }) - }; + let name_on_card = card_token_data.and_then(|token_data| { + is_card_updated = true; + token_data.card_holder_name.clone() + }); - updated_card.card_holder_name = name_on_card; + updated_card.nick_name = name_on_card; if let Some(token_data) = card_token_data { if let Some(cvc) = token_data.card_cvc.clone() { @@ -1829,7 +1817,7 @@ pub async fn retrieve_payment_method_with_temporary_token( } if is_card_updated { - let updated_pm = api::PaymentMethodData::Card(updated_card); + let updated_pm = domain::PaymentMethodData::Card(updated_card); vault::Vault::store_payment_method_data_in_locker( state, Some(token.to_owned()), @@ -1843,21 +1831,21 @@ pub async fn retrieve_payment_method_with_temporary_token( Some((updated_pm, enums::PaymentMethod::Card)) } else { Some(( - api::PaymentMethodData::Card(card), + domain::PaymentMethodData::Card(card), enums::PaymentMethod::Card, )) } } - Some(the_pm @ api::PaymentMethodData::Wallet(_)) => { + Some(the_pm @ domain::PaymentMethodData::Wallet(_)) => { Some((the_pm, enums::PaymentMethod::Wallet)) } - Some(the_pm @ api::PaymentMethodData::BankTransfer(_)) => { + Some(the_pm @ domain::PaymentMethodData::BankTransfer(_)) => { Some((the_pm, enums::PaymentMethod::BankTransfer)) } - Some(the_pm @ api::PaymentMethodData::BankRedirect(_)) => { + Some(the_pm @ domain::PaymentMethodData::BankRedirect(_)) => { Some((the_pm, enums::PaymentMethod::BankRedirect)) } @@ -1873,10 +1861,10 @@ pub async fn retrieve_card_with_permanent_token( locker_id: &str, _payment_method_id: &str, payment_intent: &PaymentIntent, - card_token_data: Option<&CardToken>, + card_token_data: Option<&domain::CardToken>, _merchant_key_store: &domain::MerchantKeyStore, _storage_scheme: enums::MerchantStorageScheme, -) -> RouterResult { +) -> RouterResult { let customer_id = payment_intent .customer_id .as_ref() @@ -1930,7 +1918,7 @@ pub async fn retrieve_card_with_permanent_token( bank_code: None, }; - Ok(api::PaymentMethodData::Card(api_card)) + Ok(domain::PaymentMethodData::Card(api_card.into())) } pub async fn retrieve_payment_method_from_db_with_token_data( @@ -2028,19 +2016,19 @@ pub async fn make_pm_data<'a, F: Clone, R>( business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, R>, - Option, + Option, Option, )> { - let request = &payment_data.payment_method_data.clone(); + let request = payment_data.payment_method_data.clone(); let mut card_token_data = payment_data .payment_method_data .clone() .and_then(|pmd| match pmd { - api_models::payments::PaymentMethodData::CardToken(token_data) => Some(token_data), + domain::PaymentMethodData::CardToken(token_data) => Some(token_data), _ => None, }) - .or(Some(CardToken::default())); + .or(Some(domain::CardToken::default())); if let Some(cvc) = payment_data.card_cvc.clone() { if let Some(token_data) = card_token_data.as_mut() { @@ -2068,7 +2056,7 @@ pub async fn make_pm_data<'a, F: Clone, R>( } // TODO: Handle case where payment method and token both are present in request properly. - let (payment_method, pm_id) = match (request, payment_data.token_data.as_ref()) { + let (payment_method, pm_id) = match (&request, payment_data.token_data.as_ref()) { (_, Some(hyperswitch_token)) => { let pm_data = payment_methods::retrieve_payment_method_with_token( state, @@ -2099,7 +2087,7 @@ pub async fn make_pm_data<'a, F: Clone, R>( (Some(_), _) => { let (payment_method_data, payment_token) = payment_methods::retrieve_payment_method( - request, + &request, state, &payment_data.payment_intent, &payment_data.payment_attempt, @@ -2120,7 +2108,7 @@ pub async fn make_pm_data<'a, F: Clone, R>( pub async fn store_in_vault_and_generate_ppmt( state: &SessionState, - payment_method_data: &api_models::payments::PaymentMethodData, + payment_method_data: &domain::PaymentMethodData, payment_intent: &PaymentIntent, payment_attempt: &PaymentAttempt, payment_method: enums::PaymentMethod, @@ -2165,7 +2153,7 @@ pub async fn store_payment_method_data_in_vault( payment_attempt: &PaymentAttempt, payment_intent: &PaymentIntent, payment_method: enums::PaymentMethod, - payment_method_data: &api::PaymentMethodData, + payment_method_data: &domain::PaymentMethodData, merchant_key_store: &domain::MerchantKeyStore, business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult> { @@ -3908,12 +3896,13 @@ mod test { #[instrument(skip_all)] pub async fn get_additional_payment_data( - pm_data: &api_models::payments::PaymentMethodData, + pm_data: &domain::PaymentMethodData, db: &dyn StorageInterface, profile_id: &str, -) -> api_models::payments::AdditionalPaymentData { +) -> Option { match pm_data { - api_models::payments::PaymentMethodData::Card(card_data) => { + domain::PaymentMethodData::Card(card_data) => { + //todo! let card_isin = Some(card_data.card_number.get_card_isin()); let enable_extended_bin =db .find_config_by_key_unwrap_or( @@ -3934,7 +3923,7 @@ pub async fn get_additional_payment_data( && card_data.card_issuing_country.is_some() && card_data.bank_code.is_some() { - api_models::payments::AdditionalPaymentData::Card(Box::new( + Some(api_models::payments::AdditionalPaymentData::Card(Box::new( api_models::payments::AdditionalCardInfo { card_issuer: card_data.card_issuer.to_owned(), card_network: card_data.card_network.clone(), @@ -3943,7 +3932,7 @@ pub async fn get_additional_payment_data( bank_code: card_data.bank_code.to_owned(), card_exp_month: Some(card_data.card_exp_month.clone()), card_exp_year: Some(card_data.card_exp_year.clone()), - card_holder_name: card_data.card_holder_name.clone(), + card_holder_name: card_data.nick_name.clone(), //todo! last4: last4.clone(), card_isin: card_isin.clone(), card_extended_bin: card_extended_bin.clone(), @@ -3951,7 +3940,7 @@ pub async fn get_additional_payment_data( payment_checks: None, authentication_data: None, }, - )) + ))) } else { let card_info = card_isin .clone() @@ -3976,14 +3965,14 @@ pub async fn get_additional_payment_data( card_extended_bin: card_extended_bin.clone(), card_exp_month: Some(card_data.card_exp_month.clone()), card_exp_year: Some(card_data.card_exp_year.clone()), - card_holder_name: card_data.card_holder_name.clone(), + card_holder_name: card_data.nick_name.clone(), //todo! // These are filled after calling the processor / connector payment_checks: None, authentication_data: None, }, )) }); - card_info.unwrap_or_else(|| { + Some(card_info.unwrap_or_else(|| { api_models::payments::AdditionalPaymentData::Card(Box::new( api_models::payments::AdditionalCardInfo { card_issuer: None, @@ -3996,77 +3985,82 @@ pub async fn get_additional_payment_data( card_extended_bin, card_exp_month: Some(card_data.card_exp_month.clone()), card_exp_year: Some(card_data.card_exp_year.clone()), - card_holder_name: card_data.card_holder_name.clone(), + card_holder_name: card_data.nick_name.clone(), //todo! // These are filled after calling the processor / connector payment_checks: None, authentication_data: None, }, )) + })) + } + } + domain::PaymentMethodData::BankRedirect(bank_redirect_data) => match bank_redirect_data { + domain::BankRedirectData::Eps { bank_name, .. } => { + Some(api_models::payments::AdditionalPaymentData::BankRedirect { + bank_name: bank_name.to_owned(), }) } - } - api_models::payments::PaymentMethodData::BankRedirect(bank_redirect_data) => { - match bank_redirect_data { - api_models::payments::BankRedirectData::Eps { bank_name, .. } => { - api_models::payments::AdditionalPaymentData::BankRedirect { - bank_name: bank_name.to_owned(), - } - } - api_models::payments::BankRedirectData::Ideal { bank_name, .. } => { - api_models::payments::AdditionalPaymentData::BankRedirect { - bank_name: bank_name.to_owned(), - } - } - _ => api_models::payments::AdditionalPaymentData::BankRedirect { bank_name: None }, + domain::BankRedirectData::Ideal { bank_name, .. } => { + Some(api_models::payments::AdditionalPaymentData::BankRedirect { + bank_name: bank_name.to_owned(), + }) } - } - api_models::payments::PaymentMethodData::Wallet(wallet) => match wallet { - api_models::payments::WalletData::ApplePay(apple_pay_wallet_data) => { - api_models::payments::AdditionalPaymentData::Wallet { - apple_pay: Some(apple_pay_wallet_data.payment_method.to_owned()), - } + _ => { + Some(api_models::payments::AdditionalPaymentData::BankRedirect { bank_name: None }) } - _ => api_models::payments::AdditionalPaymentData::Wallet { apple_pay: None }, }, - api_models::payments::PaymentMethodData::PayLater(_) => { - api_models::payments::AdditionalPaymentData::PayLater { klarna_sdk: None } + domain::PaymentMethodData::Wallet(wallet) => match wallet { + domain::WalletData::ApplePay(apple_pay_wallet_data) => { + Some(api_models::payments::AdditionalPaymentData::Wallet { + apple_pay: Some(api_models::payments::ApplepayPaymentMethod { + display_name: apple_pay_wallet_data.payment_method.display_name.clone(), + network: apple_pay_wallet_data.payment_method.network.clone(), + pm_type: apple_pay_wallet_data.payment_method.pm_type.clone(), + }), + }) + } + _ => Some(api_models::payments::AdditionalPaymentData::Wallet { apple_pay: None }), + }, + domain::PaymentMethodData::PayLater(_) => { + Some(api_models::payments::AdditionalPaymentData::PayLater { klarna_sdk: None }) } - api_models::payments::PaymentMethodData::BankTransfer(_) => { - api_models::payments::AdditionalPaymentData::BankTransfer {} + domain::PaymentMethodData::BankTransfer(_) => { + Some(api_models::payments::AdditionalPaymentData::BankTransfer {}) } - api_models::payments::PaymentMethodData::Crypto(_) => { - api_models::payments::AdditionalPaymentData::Crypto {} + domain::PaymentMethodData::Crypto(_) => { + Some(api_models::payments::AdditionalPaymentData::Crypto {}) } - api_models::payments::PaymentMethodData::BankDebit(_) => { - api_models::payments::AdditionalPaymentData::BankDebit {} + domain::PaymentMethodData::BankDebit(_) => { + Some(api_models::payments::AdditionalPaymentData::BankDebit {}) } - api_models::payments::PaymentMethodData::MandatePayment => { - api_models::payments::AdditionalPaymentData::MandatePayment {} + domain::PaymentMethodData::MandatePayment => { + Some(api_models::payments::AdditionalPaymentData::MandatePayment {}) } - api_models::payments::PaymentMethodData::Reward => { - api_models::payments::AdditionalPaymentData::Reward {} + domain::PaymentMethodData::Reward => { + Some(api_models::payments::AdditionalPaymentData::Reward {}) } - api_models::payments::PaymentMethodData::RealTimePayment(_) => { - api_models::payments::AdditionalPaymentData::RealTimePayment {} + domain::PaymentMethodData::RealTimePayment(_) => { + Some(api_models::payments::AdditionalPaymentData::RealTimePayment {}) } - api_models::payments::PaymentMethodData::Upi(_) => { - api_models::payments::AdditionalPaymentData::Upi {} + domain::PaymentMethodData::Upi(_) => { + Some(api_models::payments::AdditionalPaymentData::Upi {}) } - api_models::payments::PaymentMethodData::CardRedirect(_) => { - api_models::payments::AdditionalPaymentData::CardRedirect {} + domain::PaymentMethodData::CardRedirect(_) => { + Some(api_models::payments::AdditionalPaymentData::CardRedirect {}) } - api_models::payments::PaymentMethodData::Voucher(_) => { - api_models::payments::AdditionalPaymentData::Voucher {} + domain::PaymentMethodData::Voucher(_) => { + Some(api_models::payments::AdditionalPaymentData::Voucher {}) } - api_models::payments::PaymentMethodData::GiftCard(_) => { - api_models::payments::AdditionalPaymentData::GiftCard {} + domain::PaymentMethodData::GiftCard(_) => { + Some(api_models::payments::AdditionalPaymentData::GiftCard {}) } - api_models::payments::PaymentMethodData::CardToken(_) => { - api_models::payments::AdditionalPaymentData::CardToken {} + domain::PaymentMethodData::CardToken(_) => { + Some(api_models::payments::AdditionalPaymentData::CardToken {}) } - api_models::payments::PaymentMethodData::OpenBanking(_) => { - api_models::payments::AdditionalPaymentData::OpenBanking {} + domain::PaymentMethodData::OpenBanking(_) => { + Some(api_models::payments::AdditionalPaymentData::OpenBanking {}) } + domain::PaymentMethodData::NetworkToken(_) => None, } } @@ -4554,14 +4548,14 @@ impl ApplePayData { } pub fn get_key_params_for_surcharge_details( - payment_method_data: &api_models::payments::PaymentMethodData, + payment_method_data: &domain::PaymentMethodData, ) -> Option<( common_enums::PaymentMethod, common_enums::PaymentMethodType, Option, )> { match payment_method_data { - api_models::payments::PaymentMethodData::Card(card) => { + domain::PaymentMethodData::Card(card) => { // surcharge generated will always be same for credit as well as debit // since surcharge conditions cannot be defined on card_type Some(( @@ -4570,69 +4564,70 @@ pub fn get_key_params_for_surcharge_details( card.card_network.clone(), )) } - api_models::payments::PaymentMethodData::CardRedirect(card_redirect_data) => Some(( + domain::PaymentMethodData::CardRedirect(card_redirect_data) => Some(( common_enums::PaymentMethod::CardRedirect, card_redirect_data.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::Wallet(wallet) => Some(( + domain::PaymentMethodData::Wallet(wallet) => Some(( common_enums::PaymentMethod::Wallet, wallet.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::PayLater(pay_later) => Some(( + domain::PaymentMethodData::PayLater(pay_later) => Some(( common_enums::PaymentMethod::PayLater, pay_later.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::BankRedirect(bank_redirect) => Some(( + domain::PaymentMethodData::BankRedirect(bank_redirect) => Some(( common_enums::PaymentMethod::BankRedirect, bank_redirect.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::BankDebit(bank_debit) => Some(( + domain::PaymentMethodData::BankDebit(bank_debit) => Some(( common_enums::PaymentMethod::BankDebit, bank_debit.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::BankTransfer(bank_transfer) => Some(( + domain::PaymentMethodData::BankTransfer(bank_transfer) => Some(( common_enums::PaymentMethod::BankTransfer, bank_transfer.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::Crypto(crypto) => Some(( + domain::PaymentMethodData::Crypto(crypto) => Some(( common_enums::PaymentMethod::Crypto, crypto.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::MandatePayment => None, - api_models::payments::PaymentMethodData::Reward => None, - api_models::payments::PaymentMethodData::RealTimePayment(real_time_payment) => Some(( + domain::PaymentMethodData::MandatePayment => None, + domain::PaymentMethodData::Reward => None, + domain::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(( + domain::PaymentMethodData::Upi(upi_data) => Some(( common_enums::PaymentMethod::Upi, upi_data.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::Voucher(voucher) => Some(( + domain::PaymentMethodData::Voucher(voucher) => Some(( common_enums::PaymentMethod::Voucher, voucher.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::GiftCard(gift_card) => Some(( + domain::PaymentMethodData::GiftCard(gift_card) => Some(( common_enums::PaymentMethod::GiftCard, gift_card.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::OpenBanking(ob_data) => Some(( + domain::PaymentMethodData::OpenBanking(ob_data) => Some(( common_enums::PaymentMethod::OpenBanking, ob_data.get_payment_method_type(), None, )), - api_models::payments::PaymentMethodData::CardToken(_) => None, + domain::PaymentMethodData::CardToken(_) => None, + domain::PaymentMethodData::NetworkToken(_) => None, } } @@ -4853,7 +4848,7 @@ pub async fn get_payment_method_details_from_payment_token( payment_intent: &PaymentIntent, key_store: &domain::MerchantKeyStore, storage_scheme: enums::MerchantStorageScheme, -) -> RouterResult> { +) -> RouterResult> { let hyperswitch_token = if let Some(token) = payment_attempt.payment_token.clone() { let redis_conn = state .store @@ -5028,7 +5023,7 @@ pub async fn get_payment_external_authentication_flow_during_confirm( connector_supports_separate_authn.is_some() ); let card_number = payment_data.payment_method_data.as_ref().and_then(|pmd| { - if let api_models::payments::PaymentMethodData::Card(card) = pmd { + if let domain::PaymentMethodData::Card(card) = pmd { Some(card.card_number.clone()) } else { None diff --git a/crates/router/src/core/payments/operations.rs b/crates/router/src/core/payments/operations.rs index cd932fd54a..4f1d582231 100644 --- a/crates/router/src/core/payments/operations.rs +++ b/crates/router/src/core/payments/operations.rs @@ -134,7 +134,7 @@ pub trait Domain: Send + Sync { business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, R>, - Option, + Option, Option, )>; @@ -194,7 +194,7 @@ pub trait Domain: Send + Sync { _state: &SessionState, _payment_id: &str, _business_profile: &domain::BusinessProfile, - _payment_method_data: &Option, + _payment_method_data: &Option, ) -> CustomResult<(), errors::ApiErrorResponse> { Ok(()) } @@ -306,7 +306,7 @@ where _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRetrieveRequest>, - Option, + Option, Option, )> { Ok((Box::new(self), None, None)) @@ -369,7 +369,7 @@ where _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsCaptureRequest>, - Option, + Option, Option, )> { Ok((Box::new(self), None, None)) @@ -444,7 +444,7 @@ where _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsCancelRequest>, - Option, + Option, Option, )> { Ok((Box::new(self), None, None)) @@ -508,7 +508,7 @@ where _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRejectRequest>, - Option, + Option, Option, )> { Ok((Box::new(self), None, None)) diff --git a/crates/router/src/core/payments/operations/payment_complete_authorize.rs b/crates/router/src/core/payments/operations/payment_complete_authorize.rs index 598c2216fb..8d4e6f7a5f 100644 --- a/crates/router/src/core/payments/operations/payment_complete_authorize.rs +++ b/crates/router/src/core/payments/operations/payment_complete_authorize.rs @@ -316,7 +316,7 @@ impl GetTracker, api::PaymentsRequest> for Co payment_method_data: request .payment_method_data .as_ref() - .and_then(|pmd| pmd.payment_method_data.clone()), + .and_then(|pmd| pmd.payment_method_data.clone().map(Into::into)), payment_method_info, force_sync: None, refunds: vec![], @@ -401,7 +401,7 @@ impl Domain for CompleteAuthorize { business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRequest>, - Option, + Option, Option, )> { let (op, payment_method_data, pm_id) = helpers::make_pm_data( diff --git a/crates/router/src/core/payments/operations/payment_confirm.rs b/crates/router/src/core/payments/operations/payment_confirm.rs index 2853304721..f56009c8e2 100644 --- a/crates/router/src/core/payments/operations/payment_confirm.rs +++ b/crates/router/src/core/payments/operations/payment_confirm.rs @@ -4,7 +4,7 @@ use api_models::{ admin::ExtendedCardInfoConfig, enums::FrmSuggestion, payment_methods::PaymentMethodsData, - payments::{AdditionalPaymentData, ExtendedCardInfo}, + payments::{AdditionalPaymentData, ExtendedCardInfo, GetAddressFromPaymentMethodData}, }; use async_trait::async_trait; use common_utils::{ @@ -469,9 +469,9 @@ impl GetTracker, api::PaymentsRequest> for Pa let additional_pm_data_fut = tokio::spawn( async move { Ok(n_request_payment_method_data - .async_map(|payment_method_data| async move { + .async_and_then(|payment_method_data| async move { helpers::get_additional_payment_data( - &payment_method_data, + &payment_method_data.into(), store.as_ref(), profile_id.as_ref(), ) @@ -640,6 +640,24 @@ impl GetTracker, api::PaymentsRequest> for Pa .as_ref() .map(|payment_method_billing| payment_method_billing.address_id.clone()); + let address = PaymentAddress::new( + shipping_address.as_ref().map(From::from), + billing_address.as_ref().map(From::from), + payment_method_billing.as_ref().map(From::from), + business_profile.use_billing_as_payment_method_billing, + ); + + let payment_method_data_billing = request + .payment_method_data + .as_ref() + .and_then(|pmd| pmd.payment_method_data.as_ref()) + .and_then(|payment_method_data_billing| { + payment_method_data_billing.get_billing_address() + }); + + let unified_address = + address.unify_with_payment_method_data_billing(payment_method_data_billing); + // If processor_payment_token is passed in request then populating the same in PaymentData let mandate_id = request .recurring_details @@ -677,15 +695,10 @@ impl GetTracker, api::PaymentsRequest> for Pa setup_mandate, customer_acceptance: customer_acceptance.map(From::from), token, - address: PaymentAddress::new( - shipping_address.as_ref().map(From::from), - billing_address.as_ref().map(From::from), - payment_method_billing.as_ref().map(From::from), - business_profile.use_billing_as_payment_method_billing, - ), + address: unified_address, token_data, confirm: request.confirm, - payment_method_data: payment_method_data_after_card_bin_call, + payment_method_data: payment_method_data_after_card_bin_call.map(Into::into), payment_method_info, force_sync: None, refunds: vec![], @@ -762,7 +775,7 @@ impl Domain for PaymentConfirm { business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRequest>, - Option, + Option, Option, )> { let (op, payment_method_data, pm_id) = helpers::make_pm_data( @@ -946,9 +959,9 @@ impl Domain for PaymentConfirm { state: &SessionState, payment_id: &str, business_profile: &domain::BusinessProfile, - payment_method_data: &Option, + payment_method_data: &Option, ) -> CustomResult<(), errors::ApiErrorResponse> { - if let (Some(true), Some(api::PaymentMethodData::Card(card)), Some(merchant_config)) = ( + if let (Some(true), Some(domain::PaymentMethodData::Card(card)), Some(merchant_config)) = ( business_profile.is_extended_card_info_enabled, payment_method_data, business_profile.extended_card_info_config.clone(), @@ -1102,6 +1115,7 @@ impl UpdateTracker, api::PaymentsRequest> for Paymen .as_ref() .get_required_value("profile_id") .change_context(errors::ApiErrorResponse::InternalServerError)?; + let payment_experience = payment_data.payment_attempt.payment_experience; let additional_pm_data = payment_data .payment_method_data diff --git a/crates/router/src/core/payments/operations/payment_create.rs b/crates/router/src/core/payments/operations/payment_create.rs index 72266e647e..97bc0a80c4 100644 --- a/crates/router/src/core/payments/operations/payment_create.rs +++ b/crates/router/src/core/payments/operations/payment_create.rs @@ -2,6 +2,7 @@ use std::marker::PhantomData; use api_models::{ enums::FrmSuggestion, mandates::RecurringDetails, payment_methods::PaymentMethodsData, + payments::GetAddressFromPaymentMethodData, }; use async_trait::async_trait; use common_utils::{ @@ -482,6 +483,24 @@ impl GetTracker, api::PaymentsRequest> for Pa let amount = payment_attempt.get_total_amount().into(); + let address = PaymentAddress::new( + shipping_address.as_ref().map(From::from), + billing_address.as_ref().map(From::from), + payment_method_billing_address.as_ref().map(From::from), + business_profile.use_billing_as_payment_method_billing, + ); + + let payment_method_data_billing = request + .payment_method_data + .as_ref() + .and_then(|pmd| pmd.payment_method_data.as_ref()) + .and_then(|payment_method_data_billing| { + payment_method_data_billing.get_billing_address() + }); + + let unified_address = + address.unify_with_payment_method_data_billing(payment_method_data_billing); + let payment_data = PaymentData { flow: PhantomData, payment_intent, @@ -494,15 +513,10 @@ impl GetTracker, api::PaymentsRequest> for Pa setup_mandate, customer_acceptance, token, - address: PaymentAddress::new( - shipping_address.as_ref().map(From::from), - billing_address.as_ref().map(From::from), - payment_method_billing_address.as_ref().map(From::from), - business_profile.use_billing_as_payment_method_billing, - ), + address: unified_address, token_data: None, confirm: request.confirm, - payment_method_data: payment_method_data_after_card_bin_call, + payment_method_data: payment_method_data_after_card_bin_call.map(Into::into), payment_method_info, refunds: vec![], disputes: vec![], @@ -579,7 +593,7 @@ impl Domain for PaymentCreate { business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRequest>, - Option, + Option, Option, )> { helpers::make_pm_data( @@ -891,11 +905,11 @@ impl PaymentCreate { .payment_method_data .as_ref() .and_then(|payment_method_data_request| { - payment_method_data_request.payment_method_data.as_ref() + payment_method_data_request.payment_method_data.clone() }) - .async_map(|payment_method_data| async { + .async_and_then(|payment_method_data| async { helpers::get_additional_payment_data( - payment_method_data, + &payment_method_data.into(), &*state.store, &profile_id, ) @@ -907,7 +921,7 @@ impl PaymentCreate { // If recurring payment is made using payment_method_id, then fetch payment_method_data from retrieved payment_method object additional_pm_data = payment_method_info .as_ref() - .async_map(|pm_info| async { + .async_and_then(|pm_info| async { crypto_operation::( &state.into(), type_name!(PaymentMethod), @@ -937,10 +951,9 @@ impl PaymentCreate { }) }) .await - .flatten() .map(|card| { api_models::payments::AdditionalPaymentData::Card(Box::new(card.into())) - }) + }); }; let additional_pm_data_value = additional_pm_data diff --git a/crates/router/src/core/payments/operations/payment_session.rs b/crates/router/src/core/payments/operations/payment_session.rs index cae11d7afd..8d6597efdd 100644 --- a/crates/router/src/core/payments/operations/payment_session.rs +++ b/crates/router/src/core/payments/operations/payment_session.rs @@ -332,7 +332,7 @@ where _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'b, F, api::PaymentsSessionRequest>, - Option, + Option, Option, )> { //No payment method data for this operation diff --git a/crates/router/src/core/payments/operations/payment_start.rs b/crates/router/src/core/payments/operations/payment_start.rs index c500336efd..ae9397aa8e 100644 --- a/crates/router/src/core/payments/operations/payment_start.rs +++ b/crates/router/src/core/payments/operations/payment_start.rs @@ -304,7 +304,7 @@ where business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsStartRequest>, - Option, + Option, Option, )> { if payment_data diff --git a/crates/router/src/core/payments/operations/payment_status.rs b/crates/router/src/core/payments/operations/payment_status.rs index 84abf71d07..587bdc8ef0 100644 --- a/crates/router/src/core/payments/operations/payment_status.rs +++ b/crates/router/src/core/payments/operations/payment_status.rs @@ -92,7 +92,7 @@ impl Domain for PaymentStatus { _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRequest>, - Option, + Option, Option, )> { Ok((Box::new(self), None, None)) diff --git a/crates/router/src/core/payments/operations/payment_update.rs b/crates/router/src/core/payments/operations/payment_update.rs index 104c43f79f..b2ad13ee0d 100644 --- a/crates/router/src/core/payments/operations/payment_update.rs +++ b/crates/router/src/core/payments/operations/payment_update.rs @@ -451,7 +451,7 @@ impl GetTracker, api::PaymentsRequest> for Pa payment_method_data: request .payment_method_data .as_ref() - .and_then(|pmd| pmd.payment_method_data.clone()), + .and_then(|pmd| pmd.payment_method_data.clone().map(Into::into)), payment_method_info, force_sync: None, refunds: vec![], @@ -528,7 +528,7 @@ impl Domain for PaymentUpdate { business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, api::PaymentsRequest>, - Option, + Option, Option, )> { helpers::make_pm_data( diff --git a/crates/router/src/core/payments/operations/payments_incremental_authorization.rs b/crates/router/src/core/payments/operations/payments_incremental_authorization.rs index f027b7e0a9..31883042ec 100644 --- a/crates/router/src/core/payments/operations/payments_incremental_authorization.rs +++ b/crates/router/src/core/payments/operations/payments_incremental_authorization.rs @@ -322,7 +322,7 @@ impl Domain _business_profile: Option<&domain::BusinessProfile>, ) -> RouterResult<( BoxedOperation<'a, F, PaymentsIncrementalAuthorizationRequest>, - Option, + Option, Option, )> { Ok((Box::new(self), None, None)) diff --git a/crates/router/src/core/payments/routing.rs b/crates/router/src/core/payments/routing.rs index 455fa4cea5..a989e30d8e 100644 --- a/crates/router/src/core/payments/routing.rs +++ b/crates/router/src/core/payments/routing.rs @@ -195,7 +195,7 @@ where .payment_method_data .as_ref() .and_then(|pm_data| match pm_data { - api::PaymentMethodData::Card(card) => card.card_network.clone(), + domain::PaymentMethodData::Card(card) => card.card_network.clone(), _ => None, }), @@ -207,7 +207,7 @@ where .payment_method_data .as_ref() .and_then(|pm_data| match pm_data { - api::PaymentMethodData::Card(card) => { + domain::PaymentMethodData::Card(card) => { Some(card.card_number.peek().chars().take(6).collect()) } _ => None, diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs index 404eb4bae7..298106cfc7 100644 --- a/crates/router/src/core/payments/transformers.rs +++ b/crates/router/src/core/payments/transformers.rs @@ -1,8 +1,8 @@ use std::{fmt::Debug, marker::PhantomData, str::FromStr}; use api_models::payments::{ - Address, CustomerDetailsResponse, FrmMessage, GetAddressFromPaymentMethodData, - PaymentChargeRequest, PaymentChargeResponse, RequestSurchargeDetails, + Address, CustomerDetailsResponse, FrmMessage, PaymentChargeRequest, PaymentChargeResponse, + RequestSurchargeDetails, }; #[cfg(feature = "payouts")] use api_models::payouts::PayoutAttemptResponse; @@ -137,11 +137,6 @@ where Some(merchant_connector_account), ); - let payment_method_data_billing = payment_data - .payment_method_data - .as_ref() - .and_then(|payment_method_data| payment_method_data.get_billing_address()); - router_data = types::RouterData { flow: PhantomData, merchant_id: merchant_account.get_id().clone(), @@ -154,9 +149,7 @@ where connector_auth_type: auth_type, description: payment_data.payment_intent.description.clone(), return_url: payment_data.payment_intent.return_url.clone(), - address: payment_data - .address - .unify_with_payment_method_data_billing(payment_method_data_billing), + address: payment_data.address.clone(), auth_type: payment_data .payment_attempt .authentication_type @@ -584,7 +577,7 @@ where services::ApplicationResponse::Form(Box::new(services::RedirectionFormData { redirect_form: form, - payment_method_data: payment_data.payment_method_data, + payment_method_data: payment_data.payment_method_data.map(Into::into), amount, currency: currency.to_string(), })) @@ -1350,7 +1343,7 @@ impl TryFrom> for types::PaymentsAuthoriz // payment_method_data is not required during recurring mandate payment, in such case keep default PaymentMethodData as MandatePayment let payment_method_data = payment_data.payment_method_data.or_else(|| { if payment_data.mandate_id.is_some() { - Some(api_models::payments::PaymentMethodData::MandatePayment) + Some(domain::PaymentMethodData::MandatePayment) } else { None } @@ -1392,9 +1385,7 @@ impl TryFrom> for types::PaymentsAuthoriz .clone(); Ok(Self { - payment_method_data: From::from( - payment_method_data.get_required_value("payment_method_data")?, - ), + payment_method_data: (payment_method_data.get_required_value("payment_method_data")?), setup_future_usage: payment_data.payment_intent.setup_future_usage, mandate_id: payment_data.mandate_id.clone(), off_session: payment_data.mandate_id.as_ref().map(|_| true), @@ -1748,11 +1739,9 @@ impl TryFrom> for types::SetupMandateRequ confirm: true, amount: Some(amount.get_amount_as_i64()), //need to change once we move to connector module minor_amount: Some(amount), - payment_method_data: From::from( - payment_data - .payment_method_data - .get_required_value("payment_method_data")?, - ), + payment_method_data: (payment_data + .payment_method_data + .get_required_value("payment_method_data")?), statement_descriptor_suffix: payment_data.payment_intent.statement_descriptor_suffix, setup_future_usage: payment_data.payment_intent.setup_future_usage, off_session: payment_data.mandate_id.as_ref().map(|_| true), diff --git a/crates/router/src/core/pm_auth.rs b/crates/router/src/core/pm_auth.rs index fae690732e..64c1918c5e 100644 --- a/crates/router/src/core/pm_auth.rs +++ b/crates/router/src/core/pm_auth.rs @@ -3,7 +3,6 @@ use std::{collections::HashMap, str::FromStr}; use api_models::{ enums, payment_methods::{self, BankAccountAccessCreds}, - payments::{AddressDetails, BankDebitBilling, BankDebitData, PaymentMethodData}, }; use common_enums::{enums::MerchantStorageScheme, PaymentMethodType}; use hex; @@ -49,7 +48,6 @@ use crate::{ storage, transformers::ForeignTryFrom, }, - utils::ext_traits::OptionExt, }; pub async fn create_link_token( @@ -723,8 +721,8 @@ pub async fn retrieve_payment_method_from_auth_service( key_store: &domain::MerchantKeyStore, auth_token: &payment_methods::BankAccountTokenData, payment_intent: &PaymentIntent, - customer: &Option, -) -> RouterResult> { + _customer: &Option, +) -> RouterResult> { let db = state.store.as_ref(); let connector = PaymentAuthConnectorData::get_connector_by_name( @@ -814,84 +812,25 @@ pub async fn retrieve_payment_method_from_auth_service( .ok(); } - let address = oss_helpers::get_address_by_id( - state, - payment_intent.billing_address_id.clone(), - key_store, - &payment_intent.payment_id, - merchant_account.get_id(), - merchant_account.storage_scheme, - ) - .await?; - - let name = address - .as_ref() - .and_then(|addr| addr.first_name.clone().map(|name| name.into_inner())) - .ok_or(ApiErrorResponse::GenericNotFoundError { - message: "billing_first_name not found".to_string(), - }) - .attach_printable("billing_first_name not found")?; - - let address_details = address.clone().map(|addr| { - let line1 = addr.line1.map(|line1| line1.into_inner()); - let line2 = addr.line2.map(|line2| line2.into_inner()); - let line3 = addr.line3.map(|line3| line3.into_inner()); - let zip = addr.zip.map(|zip| zip.into_inner()); - let state = addr.state.map(|state| state.into_inner()); - let first_name = addr.first_name.map(|first_name| first_name.into_inner()); - let last_name = addr.last_name.map(|last_name| last_name.into_inner()); - - AddressDetails { - city: addr.city, - country: addr.country, - line1, - line2, - line3, - zip, - state, - first_name, - last_name, - } - }); - - let email = customer - .as_ref() - .and_then(|customer| customer.email.clone()) - .map(common_utils::pii::Email::from) - .get_required_value("email")?; - - let billing_details = BankDebitBilling { - name: Some(name), - email: Some(email), - address: address_details, - }; - let payment_method_data = match &bank_account.account_details { pm_auth_types::PaymentMethodTypeDetails::Ach(ach) => { - PaymentMethodData::BankDebit(BankDebitData::AchBankDebit { - billing_details: Some(billing_details), + domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit { account_number: ach.account_number.clone(), routing_number: ach.routing_number.clone(), - card_holder_name: None, - bank_account_holder_name: None, bank_name: None, bank_type, bank_holder_type: None, }) } pm_auth_types::PaymentMethodTypeDetails::Bacs(bacs) => { - PaymentMethodData::BankDebit(BankDebitData::BacsBankDebit { - billing_details: Some(billing_details), + domain::PaymentMethodData::BankDebit(domain::BankDebitData::BacsBankDebit { account_number: bacs.account_number.clone(), sort_code: bacs.sort_code.clone(), - bank_account_holder_name: None, }) } pm_auth_types::PaymentMethodTypeDetails::Sepa(sepa) => { - PaymentMethodData::BankDebit(BankDebitData::SepaBankDebit { - billing_details: Some(billing_details), + domain::PaymentMethodData::BankDebit(domain::BankDebitData::SepaBankDebit { iban: sepa.iban.clone(), - bank_account_holder_name: None, }) } }; diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs index 3049a49c60..c715594e8d 100644 --- a/crates/router/src/services/api.rs +++ b/crates/router/src/services/api.rs @@ -33,6 +33,7 @@ pub use hyperswitch_domain_models::{ GenericLinks, PaymentLinkAction, PaymentLinkFormData, PaymentLinkStatusData, RedirectionFormData, }, + payment_method_data::PaymentMethodData, router_response_types::RedirectForm, }; pub use hyperswitch_interfaces::{ @@ -1251,7 +1252,7 @@ impl Authenticate for api_models::payments::PaymentsRejectRequest {} pub fn build_redirection_form( form: &RedirectForm, - payment_method_data: Option, + payment_method_data: Option, amount: String, currency: String, config: Settings, @@ -1326,17 +1327,16 @@ pub fn build_redirection_form( RedirectForm::BlueSnap { payment_fields_token, } => { - let card_details = - if let Some(api::PaymentMethodData::Card(ccard)) = payment_method_data { - format!( - "var saveCardDirectly={{cvv: \"{}\",amount: {},currency: \"{}\"}};", - ccard.card_cvc.peek(), - amount, - currency - ) - } else { - "".to_string() - }; + let card_details = if let Some(PaymentMethodData::Card(ccard)) = payment_method_data { + format!( + "var saveCardDirectly={{cvv: \"{}\",amount: {},currency: \"{}\"}};", + ccard.card_cvc.peek(), + amount, + currency + ) + } else { + "".to_string() + }; let bluesnap_sdk_url = config.connectors.bluesnap.secondary_base_url; maud::html! { (maud::DOCTYPE) diff --git a/crates/router/src/types/domain/payments.rs b/crates/router/src/types/domain/payments.rs index 1d3275985f..1cf36bc442 100644 --- a/crates/router/src/types/domain/payments.rs +++ b/crates/router/src/types/domain/payments.rs @@ -6,6 +6,8 @@ pub use hyperswitch_domain_models::payment_method_data::{ GooglePayThirdPartySdkData, GooglePayWalletData, GpayTokenizationData, IndomaretVoucherData, KakaoPayRedirection, MbWayRedirection, MifinityData, OpenBankingData, PayLaterData, PaymentMethodData, RealTimePaymentData, SamsungPayWalletData, SepaAndBacsBillingDetails, - SwishQrData, TouchNGoRedirection, UpiCollectData, UpiData, UpiIntentData, VoucherData, - WalletData, WeChatPayQr, + SwishQrData, TokenizedBankRedirectValue1, TokenizedBankRedirectValue2, + TokenizedBankTransferValue1, TokenizedBankTransferValue2, TokenizedCardValue1, + TokenizedCardValue2, TokenizedWalletValue1, TokenizedWalletValue2, TouchNGoRedirection, + UpiCollectData, UpiData, UpiIntentData, VoucherData, WalletData, WeChatPayQr, }; diff --git a/crates/router/src/types/storage/payment_method.rs b/crates/router/src/types/storage/payment_method.rs index 05e3e566c0..31b039ab45 100644 --- a/crates/router/src/types/storage/payment_method.rs +++ b/crates/router/src/types/storage/payment_method.rs @@ -10,7 +10,7 @@ pub use diesel_models::payment_method::{ TokenizeCoreWorkflow, }; -use crate::types::api::{self, payments}; +use crate::types::{api, domain}; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] #[serde(rename_all = "snake_case")] @@ -29,7 +29,7 @@ pub struct CardTokenData { #[derive(Debug, Clone, serde::Serialize, Default, serde::Deserialize)] pub struct PaymentMethodDataWithId { pub payment_method: Option, - pub payment_method_data: Option, + pub payment_method_data: Option, pub payment_method_id: Option, }