From 42166979ba7093de82a69fd7f933910ebbbb715a Mon Sep 17 00:00:00 2001 From: sweta-sharma <77436883+Sweta-Kumari-Sharma@users.noreply.github.com> Date: Tue, 25 Feb 2025 15:18:03 +0530 Subject: [PATCH] fix(connector): Ideal and multiple other failing PMs fixed in Ayden (#7139) --- .../src/connector/adyen/transformers.rs | 384 ++++++------------ .../cypress/e2e/configs/Payment/Adyen.js | 79 ---- .../cypress/support/redirectionHandler.js | 77 +--- 3 files changed, 150 insertions(+), 390 deletions(-) diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs index c9bfdbf3d4a..8aba3573f68 100644 --- a/crates/router/src/connector/adyen/transformers.rs +++ b/crates/router/src/connector/adyen/transformers.rs @@ -148,7 +148,7 @@ pub struct LineItem { pub struct AdyenPaymentRequest<'a> { amount: Amount, merchant_account: Secret, - payment_method: AdyenPaymentMethod<'a>, + payment_method: PaymentMethod<'a>, mpi_data: Option, reference: String, return_url: String, @@ -527,22 +527,37 @@ pub struct Amount { #[derive(Debug, Clone, Serialize)] #[serde(untagged)] +pub enum PaymentMethod<'a> { + AdyenPaymentMethod(Box>), + AdyenMandatePaymentMethod(Box), +} + +#[derive(Debug, Clone, Serialize)] +#[serde(tag = "type")] #[serde(rename_all = "lowercase")] pub enum AdyenPaymentMethod<'a> { - AdyenAffirm(Box), + #[serde(rename = "affirm")] + AdyenAffirm, + #[serde(rename = "scheme")] AdyenCard(Box), - AdyenKlarna(Box), - AdyenPaypal(Box), + #[serde(rename = "klarna")] + AdyenKlarna, + #[serde(rename = "paypal")] + AdyenPaypal, + #[serde(rename = "networkToken")] + AdyenPaze(Box), #[serde(rename = "afterpaytouch")] - AfterPay(Box), - AlmaPayLater(Box), - AliPay(Box), - AliPayHk(Box), + AfterPay, + #[serde(rename = "alma")] + AlmaPayLater, + AliPay, + #[serde(rename = "alipay_hk")] + AliPayHk, ApplePay(Box), - #[serde(rename = "atome")] Atome, - BancontactCard(Box), - Bizum(Box), + #[serde(rename = "scheme")] + BancontactCard(Box), + Bizum, Blik(Box), #[serde(rename = "boletobancario")] BoletoBancario, @@ -556,21 +571,24 @@ pub enum AdyenPaymentMethod<'a> { Gpay(Box), #[serde(rename = "gopay_wallet")] GoPay(Box), - Ideal(Box>), + Ideal, #[serde(rename = "kakaopay")] Kakaopay(Box), - Mandate(Box), Mbway(Box), - MobilePay(Box), + MobilePay, #[serde(rename = "momo_wallet")] Momo(Box), #[serde(rename = "momo_atm")] MomoAtm, #[serde(rename = "touchngo")] TouchNGo(Box), + #[serde(rename = "onlineBanking_CZ")] OnlineBankingCzechRepublic(Box), - OnlineBankingFinland(Box), + #[serde(rename = "ebanking_FI")] + OnlineBankingFinland, + #[serde(rename = "onlineBanking_PL")] OnlineBankingPoland(Box), + #[serde(rename = "onlineBanking_SK")] OnlineBankingSlovakia(Box), #[serde(rename = "molpay_ebanking_fpx_MY")] OnlineBankingFpx(Box), @@ -592,9 +610,11 @@ pub enum AdyenPaymentMethod<'a> { Walley, #[serde(rename = "wechatpayWeb")] WeChatPayWeb, + #[serde(rename = "ach")] AchDirectDebit(Box), #[serde(rename = "sepadirectdebit")] SepaDirectDebit(Box), + #[serde(rename = "directdebit_GB")] BacsDirectDebit(Box), SamsungPay(Box), #[serde(rename = "doku_bca_va")] @@ -617,7 +637,9 @@ pub enum AdyenPaymentMethod<'a> { Indomaret(Box), #[serde(rename = "doku_alfamart")] Alfamart(Box), + #[serde(rename = "givex")] PaymentMethodBalance(Box), + #[serde(rename = "giftcard")] AdyenGiftCard(Box), #[serde(rename = "swish")] Swish, @@ -637,15 +659,9 @@ pub enum AdyenPaymentMethod<'a> { Seicomart(Box), #[serde(rename = "econtext_stores")] PayEasy(Box), - Pix(Box), + Pix, + #[serde(rename = "networkToken")] NetworkToken(Box), - AdyenPaze(Box), -} - -#[derive(Debug, Clone, Serialize)] -pub struct PmdForPaymentType { - #[serde(rename = "type")] - payment_type: PaymentType, } #[derive(Debug, Clone, Eq, PartialEq, serde::Serialize, serde::Deserialize)] @@ -660,8 +676,6 @@ pub struct JCSVoucherData { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct BalancePmData { - #[serde(rename = "type")] - payment_type: GiftCardBrand, number: Secret, cvc: Secret, } @@ -669,8 +683,6 @@ pub struct BalancePmData { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct GiftCardData { - #[serde(rename = "type")] - payment_type: PaymentType, brand: GiftCardBrand, number: Secret, cvc: Secret, @@ -679,8 +691,6 @@ pub struct GiftCardData { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct AchDirectDebitData { - #[serde(rename = "type")] - payment_type: PaymentType, bank_account_number: Secret, bank_location_id: Secret, owner_name: Secret, @@ -698,45 +708,25 @@ pub struct SepaDirectDebitData { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct BacsDirectDebitData { - #[serde(rename = "type")] - payment_type: PaymentType, bank_account_number: Secret, bank_location_id: Secret, holder_name: Secret, } -#[derive(Debug, Clone, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct BancontactCardData { - #[serde(rename = "type")] - payment_type: PaymentType, - brand: String, - number: CardNumber, - expiry_month: Secret, - expiry_year: Secret, - holder_name: Secret, -} - #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct MbwayData { - #[serde(rename = "type")] - payment_type: PaymentType, telephone_number: Secret, } #[derive(Debug, Clone, Serialize)] pub struct SamsungPayPmData { - #[serde(rename = "type")] - payment_type: PaymentType, #[serde(rename = "samsungPayToken")] samsung_pay_token: Secret, } #[derive(Debug, Clone, Serialize)] pub struct OnlineBankingCzechRepublicData { - #[serde(rename = "type")] - payment_type: PaymentType, issuer: OnlineBankingCzechRepublicBanks, } @@ -774,8 +764,6 @@ impl TryFrom<&common_enums::BankNames> for OnlineBankingCzechRepublicBanks { #[derive(Debug, Clone, Serialize)] pub struct OnlineBankingPolandData { - #[serde(rename = "type")] - payment_type: PaymentType, issuer: OnlineBankingPolandBanks, } @@ -854,8 +842,6 @@ impl TryFrom<&common_enums::BankNames> for OnlineBankingPolandBanks { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct OnlineBankingSlovakiaData { - #[serde(rename = "type")] - payment_type: PaymentType, issuer: OnlineBankingSlovakiaBanks, } @@ -1108,8 +1094,6 @@ impl TryFrom<&common_enums::BankNames> for OpenBankingUKIssuer { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct BlikRedirectionData { - #[serde(rename = "type")] - payment_type: PaymentType, blik_code: Secret, } @@ -1117,8 +1101,6 @@ pub struct BlikRedirectionData { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct BankRedirectionWithIssuer<'a> { - #[serde(rename = "type")] - payment_type: PaymentType, issuer: Option<&'a str>, } @@ -1134,8 +1116,6 @@ pub struct AdyenMandate { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AdyenCard { - #[serde(rename = "type")] - payment_type: PaymentType, number: CardNumber, expiry_month: Secret, expiry_year: Secret, @@ -1149,8 +1129,6 @@ pub struct AdyenCard { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AdyenPazeData { - #[serde(rename = "type")] - payment_type: PaymentType, number: NetworkTokenNumber, expiry_month: Secret, expiry_year: Secret, @@ -1239,16 +1217,12 @@ pub struct TouchNGoData {} #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AdyenGPay { - #[serde(rename = "type")] - payment_type: PaymentType, #[serde(rename = "googlePayToken")] google_pay_token: Secret, } #[derive(Debug, Clone, Serialize, Deserialize)] pub struct AdyenApplePay { - #[serde(rename = "type")] - payment_type: PaymentType, #[serde(rename = "applePayToken")] apple_pay_token: Secret, } @@ -1257,8 +1231,6 @@ pub struct AdyenApplePay { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct AdyenNetworkTokenData { - #[serde(rename = "type")] - payment_type: PaymentType, number: NetworkTokenNumber, expiry_month: Secret, expiry_year: Secret, @@ -1362,6 +1334,7 @@ pub enum PaymentType { Scheme, #[serde(rename = "networkToken")] NetworkToken, + #[serde(rename = "trustly")] Trustly, #[serde(rename = "touchngo")] TouchNGo, @@ -1555,34 +1528,6 @@ impl TryFrom<&common_enums::BankNames> for AdyenTestBankNames<'_> { } } -pub struct AdyenBankNames<'a>(&'a str); - -impl TryFrom<&common_enums::BankNames> for AdyenBankNames<'_> { - type Error = Error; - fn try_from(bank: &common_enums::BankNames) -> Result { - Ok(match bank { - common_enums::BankNames::AbnAmro => Self("0031"), - common_enums::BankNames::AsnBank => Self("0761"), - common_enums::BankNames::Bunq => Self("0802"), - common_enums::BankNames::Ing => Self("0721"), - common_enums::BankNames::Knab => Self("0801"), - common_enums::BankNames::N26 => Self("0807"), - common_enums::BankNames::NationaleNederlanden => Self("0808"), - common_enums::BankNames::Rabobank => Self("0021"), - common_enums::BankNames::Regiobank => Self("0771"), - common_enums::BankNames::Revolut => Self("0805"), - common_enums::BankNames::SnsBank => Self("0751"), - common_enums::BankNames::TriodosBank => Self("0511"), - common_enums::BankNames::VanLanschot => Self("0161"), - common_enums::BankNames::Yoursafe => Self("0806"), - _ => Err(errors::ConnectorError::NotSupported { - message: String::from("BankRedirect"), - connector: "Adyen", - })?, - }) - } -} - impl TryFrom<&types::ConnectorAuthType> for AdyenAuthType { type Error = Error; fn try_from(auth_type: &types::ConnectorAuthType) -> Result { @@ -1676,7 +1621,6 @@ impl TryFrom<&types::PaymentsPreProcessingRouterData> for AdyenBalanceRequest<'_ match gift_card_data.as_ref() { domain::GiftCardData::Givex(gift_card_data) => { let balance_pm = BalancePmData { - payment_type: GiftCardBrand::Givex, number: gift_card_data.number.clone(), cvc: gift_card_data.cvc.clone(), }; @@ -1943,7 +1887,6 @@ impl TryFrom<(&domain::BankDebitData, &types::PaymentsAuthorizeRouterData)> .. } => Ok(AdyenPaymentMethod::AchDirectDebit(Box::new( AchDirectDebitData { - payment_type: PaymentType::AchDirectDebit, bank_account_number: account_number.clone(), bank_location_id: routing_number.clone(), owner_name: item.get_billing_full_name()?, @@ -1961,12 +1904,12 @@ impl TryFrom<(&domain::BankDebitData, &types::PaymentsAuthorizeRouterData)> .. } => Ok(AdyenPaymentMethod::BacsDirectDebit(Box::new( BacsDirectDebitData { - payment_type: PaymentType::BacsDirectDebit, bank_account_number: account_number.clone(), bank_location_id: sort_code.clone(), holder_name: item.get_billing_full_name()?, }, ))), + domain::BankDebitData::BecsBankDebit { .. } => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Adyen"), @@ -2031,7 +1974,6 @@ impl TryFrom<&domain::GiftCardData> for AdyenPaymentMethod<'_> { domain::GiftCardData::PaySafeCard {} => Ok(AdyenPaymentMethod::PaySafeCard), domain::GiftCardData::Givex(givex_data) => { let gift_card_pm = GiftCardData { - payment_type: PaymentType::Giftcard, brand: GiftCardBrand::Givex, number: givex_data.number.clone(), cvc: givex_data.cvc.clone(), @@ -2064,7 +2006,6 @@ impl TryFrom<(&domain::Card, Option>)> for AdyenPaymentMethod<'_> (card, card_holder_name): (&domain::Card, Option>), ) -> Result { let adyen_card = AdyenCard { - payment_type: PaymentType::Scheme, number: card.card_number.clone(), expiry_month: card.card_exp_month.clone(), expiry_year: card.get_expiry_year_4_digit(), @@ -2143,37 +2084,20 @@ impl TryFrom<(&domain::WalletData, &types::PaymentsAuthorizeRouterData)> match wallet_data { domain::WalletData::GooglePay(data) => { let gpay_data = AdyenGPay { - payment_type: PaymentType::Googlepay, google_pay_token: Secret::new(data.tokenization_data.token.to_owned()), }; Ok(AdyenPaymentMethod::Gpay(Box::new(gpay_data))) } domain::WalletData::ApplePay(data) => { let apple_pay_data = AdyenApplePay { - payment_type: PaymentType::Applepay, apple_pay_token: Secret::new(data.payment_data.to_string()), }; Ok(AdyenPaymentMethod::ApplePay(Box::new(apple_pay_data))) } - domain::WalletData::PaypalRedirect(_) => { - let wallet = PmdForPaymentType { - payment_type: PaymentType::Paypal, - }; - Ok(AdyenPaymentMethod::AdyenPaypal(Box::new(wallet))) - } - domain::WalletData::AliPayRedirect(_) => { - let alipay_data = PmdForPaymentType { - payment_type: PaymentType::Alipay, - }; - Ok(AdyenPaymentMethod::AliPay(Box::new(alipay_data))) - } - domain::WalletData::AliPayHkRedirect(_) => { - let alipay_hk_data = PmdForPaymentType { - payment_type: PaymentType::AlipayHk, - }; - Ok(AdyenPaymentMethod::AliPayHk(Box::new(alipay_hk_data))) - } + domain::WalletData::PaypalRedirect(_) => Ok(AdyenPaymentMethod::AdyenPaypal), + domain::WalletData::AliPayRedirect(_) => Ok(AdyenPaymentMethod::AliPay), + domain::WalletData::AliPayHkRedirect(_) => Ok(AdyenPaymentMethod::AliPayHk), domain::WalletData::GoPayRedirect(_) => { let go_pay_data = GoPayData {}; Ok(AdyenPaymentMethod::GoPay(Box::new(go_pay_data))) @@ -2197,21 +2121,14 @@ impl TryFrom<(&domain::WalletData, &types::PaymentsAuthorizeRouterData)> domain::WalletData::MbWayRedirect(_) => { let phone_details = item.get_billing_phone()?; let mbway_data = MbwayData { - payment_type: PaymentType::Mbway, telephone_number: phone_details.get_number_with_country_code()?, }; Ok(AdyenPaymentMethod::Mbway(Box::new(mbway_data))) } - domain::WalletData::MobilePayRedirect(_) => { - let data = PmdForPaymentType { - payment_type: PaymentType::MobilePay, - }; - Ok(AdyenPaymentMethod::MobilePay(Box::new(data))) - } + domain::WalletData::MobilePayRedirect(_) => Ok(AdyenPaymentMethod::MobilePay), domain::WalletData::WeChatPayRedirect(_) => Ok(AdyenPaymentMethod::WeChatPayWeb), domain::WalletData::SamsungPay(samsung_data) => { let data = SamsungPayPmData { - payment_type: PaymentType::Samsungpay, samsung_pay_token: samsung_data.payment_credential.token_data.data.to_owned(), }; Ok(AdyenPaymentMethod::SamsungPay(Box::new(data))) @@ -2219,7 +2136,6 @@ impl TryFrom<(&domain::WalletData, &types::PaymentsAuthorizeRouterData)> domain::WalletData::Paze(_) => match item.payment_method_token.clone() { Some(types::PaymentMethodToken::PazeDecrypt(paze_decrypted_data)) => { let data = AdyenPazeData { - payment_type: PaymentType::NetworkToken, number: paze_decrypted_data.token.payment_token, expiry_month: paze_decrypted_data.token.token_expiration_month, expiry_year: paze_decrypted_data.token.token_expiration_year, @@ -2308,14 +2224,11 @@ impl ) = value; match pay_later_data { domain::payments::PayLaterData::KlarnaRedirect { .. } => { - let klarna = PmdForPaymentType { - payment_type: PaymentType::Klarna, - }; check_required_field(shopper_email, "email")?; check_required_field(shopper_reference, "customer_id")?; check_required_field(country_code, "billing.country")?; - Ok(AdyenPaymentMethod::AdyenKlarna(Box::new(klarna))) + Ok(AdyenPaymentMethod::AdyenKlarna) } domain::payments::PayLaterData::AffirmRedirect { .. } => { check_required_field(shopper_email, "email")?; @@ -2323,11 +2236,7 @@ impl check_required_field(telephone_number, "billing.phone")?; check_required_field(billing_address, "billing")?; - Ok(AdyenPaymentMethod::AdyenAffirm(Box::new( - PmdForPaymentType { - payment_type: PaymentType::Affirm, - }, - ))) + Ok(AdyenPaymentMethod::AdyenAffirm) } domain::payments::PayLaterData::AfterpayClearpayRedirect { .. } => { check_required_field(shopper_email, "email")?; @@ -2341,9 +2250,7 @@ impl | api_enums::CountryAlpha2::FR | api_enums::CountryAlpha2::ES | api_enums::CountryAlpha2::GB => Ok(AdyenPaymentMethod::ClearPay), - _ => Ok(AdyenPaymentMethod::AfterPay(Box::new(PmdForPaymentType { - payment_type: PaymentType::Afterpaytouch, - }))), + _ => Ok(AdyenPaymentMethod::AfterPay), } } else { Err(errors::ConnectorError::MissingRequiredField { @@ -2371,11 +2278,7 @@ impl check_required_field(shopper_email, "email")?; check_required_field(billing_address, "billing")?; check_required_field(delivery_address, "shipping")?; - Ok(AdyenPaymentMethod::AlmaPayLater(Box::new( - PmdForPaymentType { - payment_type: PaymentType::Alma, - }, - ))) + Ok(AdyenPaymentMethod::AlmaPayLater) } domain::payments::PayLaterData::AtomeRedirect { .. } => { check_required_field(shopper_email, "email")?; @@ -2397,15 +2300,13 @@ impl impl TryFrom<( &domain::BankRedirectData, - Option, &types::PaymentsAuthorizeRouterData, )> for AdyenPaymentMethod<'_> { type Error = Error; fn try_from( - (bank_redirect_data, test_mode, item): ( + (bank_redirect_data, item): ( &domain::BankRedirectData, - Option, &types::PaymentsAuthorizeRouterData, ), ) -> Result { @@ -2415,39 +2316,33 @@ impl card_exp_month, card_exp_year, .. - } => Ok(AdyenPaymentMethod::BancontactCard(Box::new( - BancontactCardData { - payment_type: PaymentType::Scheme, - brand: "bcmc".to_string(), - number: card_number - .as_ref() - .ok_or(errors::ConnectorError::MissingRequiredField { - field_name: "bancontact_card.card_number", - })? - .clone(), - expiry_month: card_exp_month - .as_ref() - .ok_or(errors::ConnectorError::MissingRequiredField { - field_name: "bancontact_card.card_exp_month", - })? - .clone(), - expiry_year: card_exp_year - .as_ref() - .ok_or(errors::ConnectorError::MissingRequiredField { - field_name: "bancontact_card.card_exp_year", - })? - .clone(), - holder_name: item.get_billing_full_name()?, - }, - ))), - domain::BankRedirectData::Bizum { .. } => { - Ok(AdyenPaymentMethod::Bizum(Box::new(PmdForPaymentType { - payment_type: PaymentType::Bizum, - }))) - } + } => Ok(AdyenPaymentMethod::BancontactCard(Box::new(AdyenCard { + brand: Some(CardBrand::Bcmc), + number: card_number + .as_ref() + .ok_or(errors::ConnectorError::MissingRequiredField { + field_name: "bancontact_card.card_number", + })? + .clone(), + expiry_month: card_exp_month + .as_ref() + .ok_or(errors::ConnectorError::MissingRequiredField { + field_name: "bancontact_card.card_exp_month", + })? + .clone(), + expiry_year: card_exp_year + .as_ref() + .ok_or(errors::ConnectorError::MissingRequiredField { + field_name: "bancontact_card.card_exp_year", + })? + .clone(), + holder_name: Some(item.get_billing_full_name()?), + cvc: None, + network_payment_reference: None, + }))), + domain::BankRedirectData::Bizum { .. } => Ok(AdyenPaymentMethod::Bizum), domain::BankRedirectData::Blik { blik_code } => { Ok(AdyenPaymentMethod::Blik(Box::new(BlikRedirectionData { - payment_type: PaymentType::Blik, blik_code: Secret::new(blik_code.clone().ok_or( errors::ConnectorError::MissingRequiredField { field_name: "blik_code", @@ -2457,7 +2352,6 @@ impl } domain::BankRedirectData::Eps { bank_name, .. } => Ok(AdyenPaymentMethod::Eps( Box::new(BankRedirectionWithIssuer { - payment_type: PaymentType::Eps, issuer: Some( AdyenTestBankNames::try_from(&bank_name.ok_or( errors::ConnectorError::MissingRequiredField { @@ -2468,55 +2362,24 @@ impl ), }), )), - domain::BankRedirectData::Ideal { bank_name, .. } => { - let issuer = if test_mode.unwrap_or(true) { - Some( - AdyenTestBankNames::try_from(&bank_name.ok_or( - errors::ConnectorError::MissingRequiredField { - field_name: "ideal.bank_name", - }, - )?)? - .0, - ) - } else { - Some( - AdyenBankNames::try_from(&bank_name.ok_or( - errors::ConnectorError::MissingRequiredField { - field_name: "ideal.bank_name", - }, - )?)? - .0, - ) - }; - Ok(AdyenPaymentMethod::Ideal(Box::new( - BankRedirectionWithIssuer { - payment_type: PaymentType::Ideal, - issuer, - }, - ))) - } + domain::BankRedirectData::Ideal { .. } => Ok(AdyenPaymentMethod::Ideal), domain::BankRedirectData::OnlineBankingCzechRepublic { issuer } => { Ok(AdyenPaymentMethod::OnlineBankingCzechRepublic(Box::new( OnlineBankingCzechRepublicData { - payment_type: PaymentType::OnlineBankingCzechRepublic, issuer: OnlineBankingCzechRepublicBanks::try_from(issuer)?, }, ))) } - domain::BankRedirectData::OnlineBankingFinland { .. } => Ok( - AdyenPaymentMethod::OnlineBankingFinland(Box::new(PmdForPaymentType { - payment_type: PaymentType::OnlineBankingFinland, - })), - ), + domain::BankRedirectData::OnlineBankingFinland { .. } => { + Ok(AdyenPaymentMethod::OnlineBankingFinland) + } domain::BankRedirectData::OnlineBankingPoland { issuer } => Ok( AdyenPaymentMethod::OnlineBankingPoland(Box::new(OnlineBankingPolandData { - payment_type: PaymentType::OnlineBankingPoland, issuer: OnlineBankingPolandBanks::try_from(issuer)?, })), ), domain::BankRedirectData::OnlineBankingSlovakia { issuer } => Ok( AdyenPaymentMethod::OnlineBankingSlovakia(Box::new(OnlineBankingSlovakiaData { - payment_type: PaymentType::OnlineBankingSlovakia, issuer: OnlineBankingSlovakiaBanks::try_from(issuer)?, })), ), @@ -2589,11 +2452,7 @@ impl domain::BankTransferData::MandiriVaBankTransfer {} => Ok( AdyenPaymentMethod::MandiriVa(Box::new(DokuBankData::try_from(item)?)), ), - domain::BankTransferData::Pix { .. } => { - Ok(AdyenPaymentMethod::Pix(Box::new(PmdForPaymentType { - payment_type: PaymentType::Pix, - }))) - } + domain::BankTransferData::Pix { .. } => Ok(AdyenPaymentMethod::Pix), domain::BankTransferData::AchBankTransfer { .. } | domain::BankTransferData::SepaBankTransfer { .. } | domain::BankTransferData::BacsBankTransfer { .. } @@ -2673,9 +2532,9 @@ impl .ok_or_else(missing_field_err("mandate_id"))?, ), }; - Ok::, Self::Error>(AdyenPaymentMethod::Mandate(Box::new( - adyen_mandate, - ))) + Ok::, Self::Error>(PaymentMethod::AdyenMandatePaymentMethod( + Box::new(adyen_mandate), + )) } payments::MandateReferenceId::NetworkMandateId(network_mandate_id) => { match item.router_data.request.payment_method_data { @@ -2695,7 +2554,6 @@ impl let card_holder_name = item.router_data.get_optional_billing_full_name(); let adyen_card = AdyenCard { - payment_type: PaymentType::Scheme, number: card_details_for_network_transaction_id.card_number.clone(), expiry_month: card_details_for_network_transaction_id .card_exp_month @@ -2708,7 +2566,9 @@ impl brand: Some(brand), network_payment_reference: Some(Secret::new(network_mandate_id)), }; - Ok(AdyenPaymentMethod::AdyenCard(Box::new(adyen_card))) + Ok(PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::AdyenCard(Box::new(adyen_card)), + ))) } domain::PaymentMethodData::CardRedirect(_) | domain::PaymentMethodData::Wallet(_) @@ -2742,7 +2602,6 @@ impl let brand = CardBrand::try_from(&card_issuer)?; let card_holder_name = item.router_data.get_optional_billing_full_name(); let adyen_network_token = AdyenNetworkTokenData { - payment_type: PaymentType::NetworkToken, number: token_data.get_network_token(), expiry_month: token_data.get_network_token_expiry_month(), expiry_year: token_data.get_expiry_year_4_digit(), @@ -2752,8 +2611,8 @@ impl network_mandate_id.network_transaction_id, )), }; - Ok(AdyenPaymentMethod::NetworkToken(Box::new( - adyen_network_token, + Ok(PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::NetworkToken(Box::new(adyen_network_token)), ))) } @@ -2853,7 +2712,10 @@ impl let additional_data = get_additional_data(item.router_data); let return_url = item.router_data.request.get_router_return_url()?; let card_holder_name = item.router_data.get_optional_billing_full_name(); - let payment_method = AdyenPaymentMethod::try_from((card_data, card_holder_name))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((card_data, card_holder_name))?, + )); + let shopper_email = item.router_data.get_optional_billing_email(); let shopper_name = get_shopper_name(item.router_data.get_optional_billing()); let (store, splits) = match item.router_data.request.split_payments.as_ref() { @@ -2919,7 +2781,10 @@ impl let browser_info = get_browser_info(item.router_data)?; let additional_data = get_additional_data(item.router_data); let return_url = item.router_data.request.get_router_return_url()?; - let payment_method = AdyenPaymentMethod::try_from((bank_debit_data, item.router_data))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((bank_debit_data, item.router_data))?, + )); + let country_code = get_country_code(item.router_data.get_optional_billing()); let (store, splits) = match item.router_data.request.split_payments.as_ref() { Some(common_types::payments::SplitPaymentsRequest::AdyenSplitPayment( @@ -2982,7 +2847,9 @@ impl let recurring_processing_model = get_recurring_processing_model(item.router_data)?.0; let browser_info = get_browser_info(item.router_data)?; let additional_data = get_additional_data(item.router_data); - let payment_method = AdyenPaymentMethod::try_from((voucher_data, item.router_data))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((voucher_data, item.router_data))?, + )); let return_url = item.router_data.request.get_router_return_url()?; let social_security_number = get_social_security_number(voucher_data); let billing_address = @@ -3047,7 +2914,10 @@ impl let amount = get_amount_data(item); let auth_type = AdyenAuthType::try_from(&item.router_data.connector_auth_type)?; let shopper_interaction = AdyenShopperInteraction::from(item.router_data); - let payment_method = AdyenPaymentMethod::try_from((bank_transfer_data, item.router_data))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((bank_transfer_data, item.router_data))?, + )); + let return_url = item.router_data.request.get_router_return_url()?; let (store, splits) = match item.router_data.request.split_payments.as_ref() { Some(common_types::payments::SplitPaymentsRequest::AdyenSplitPayment( @@ -3108,7 +2978,9 @@ impl let auth_type = AdyenAuthType::try_from(&item.router_data.connector_auth_type)?; let shopper_interaction = AdyenShopperInteraction::from(item.router_data); let return_url = item.router_data.request.get_router_return_url()?; - let payment_method = AdyenPaymentMethod::try_from(gift_card_data)?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from(gift_card_data)?, + )); let (store, splits) = match item.router_data.request.split_payments.as_ref() { Some(common_types::payments::SplitPaymentsRequest::AdyenSplitPayment( adyen_split_payment, @@ -3172,11 +3044,9 @@ impl let browser_info = get_browser_info(item.router_data)?; let additional_data = get_additional_data(item.router_data); let return_url = item.router_data.request.get_router_return_url()?; - let payment_method = AdyenPaymentMethod::try_from(( - bank_redirect_data, - item.router_data.test_mode, - item.router_data, - ))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((bank_redirect_data, item.router_data))?, + )); let (shopper_locale, country) = get_redirect_extra_details(item.router_data)?; let line_items = Some(get_line_items(item)); let billing_address = @@ -3274,7 +3144,9 @@ impl let auth_type = AdyenAuthType::try_from(&item.router_data.connector_auth_type)?; let browser_info = get_browser_info(item.router_data)?; let additional_data = get_additional_data(item.router_data); - let payment_method = AdyenPaymentMethod::try_from((wallet_data, item.router_data))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((wallet_data, item.router_data))?, + )); let shopper_interaction = AdyenShopperInteraction::from(item.router_data); let channel = get_channel_type(item.router_data.request.payment_method_type); let (recurring_processing_model, store_payment_method, shopper_reference) = @@ -3374,16 +3246,17 @@ impl get_address_info(item.router_data.get_optional_shipping()).and_then(Result::ok); let line_items = Some(get_line_items(item)); let telephone_number = get_telephone_number(item.router_data); - let payment_method = AdyenPaymentMethod::try_from(( - paylater_data, - &country_code, - &shopper_email, - &shopper_reference, - &shopper_name, - &telephone_number, - &billing_address, - &delivery_address, - ))?; + let payment_method = + PaymentMethod::AdyenPaymentMethod(Box::new(AdyenPaymentMethod::try_from(( + paylater_data, + &country_code, + &shopper_email, + &shopper_reference, + &shopper_name, + &telephone_number, + &billing_address, + &delivery_address, + ))?)); let (store, splits) = match item.router_data.request.split_payments.as_ref() { Some(common_types::payments::SplitPaymentsRequest::AdyenSplitPayment( adyen_split_payment, @@ -3440,7 +3313,10 @@ impl let (item, card_redirect_data) = value; let amount = get_amount_data(item); let auth_type = AdyenAuthType::try_from(&item.router_data.connector_auth_type)?; - let payment_method = AdyenPaymentMethod::try_from(card_redirect_data)?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from(card_redirect_data)?, + )); + let shopper_interaction = AdyenShopperInteraction::from(item.router_data); let return_url = item.router_data.request.get_router_return_url()?; let shopper_name = get_shopper_name(item.router_data.get_optional_billing()); @@ -5594,7 +5470,6 @@ impl TryFrom<(&domain::NetworkTokenData, Option>)> for AdyenPayme (token_data, card_holder_name): (&domain::NetworkTokenData, Option>), ) -> Result { let adyen_network_token = AdyenNetworkTokenData { - payment_type: PaymentType::NetworkToken, number: token_data.get_network_token(), expiry_month: token_data.get_network_token_expiry_month(), expiry_year: token_data.get_expiry_year_4_digit(), @@ -5638,7 +5513,10 @@ impl let additional_data = get_additional_data(item.router_data); let return_url = item.router_data.request.get_router_return_url()?; let card_holder_name = item.router_data.get_optional_billing_full_name(); - let payment_method = AdyenPaymentMethod::try_from((token_data, card_holder_name))?; + let payment_method = PaymentMethod::AdyenPaymentMethod(Box::new( + AdyenPaymentMethod::try_from((token_data, card_holder_name))?, + )); + let shopper_email = item.router_data.request.email.clone(); let shopper_name = get_shopper_name(item.router_data.get_optional_billing()); let mpi_data = AdyenMpiData { diff --git a/cypress-tests/cypress/e2e/configs/Payment/Adyen.js b/cypress-tests/cypress/e2e/configs/Payment/Adyen.js index b317366dbf2..493086314b2 100644 --- a/cypress-tests/cypress/e2e/configs/Payment/Adyen.js +++ b/cypress-tests/cypress/e2e/configs/Payment/Adyen.js @@ -820,85 +820,6 @@ export const connectorDetails = { }, }, }, - Giropay: { - Request: { - payment_method: "bank_redirect", - payment_method_type: "giropay", - payment_method_data: { - bank_redirect: { - giropay: { - bank_name: "", - bank_account_bic: "", - bank_account_iban: "", - }, - }, - }, - billing: { - address: { - line1: "1467", - line2: "Harrison Street", - line3: "Harrison Street", - city: "San Fransico", - state: "California", - zip: "94122", - country: "DE", - first_name: "joseph", - last_name: "Doe", - }, - phone: { - number: "9123456789", - country_code: "+91", - }, - }, - }, - Response: { - status: 200, - body: { - status: "processing", - error_code: "905_1", - error_message: - "Could not find an acquirer account for the provided txvariant (giropay), currency (EUR), and action (AUTH).", - }, - }, - }, - Sofort: { - Request: { - payment_method: "bank_redirect", - payment_method_type: "sofort", - payment_method_data: { - bank_redirect: { - sofort: { - preferred_language: "en", - }, - }, - }, - billing: { - address: { - line1: "1467", - line2: "Harrison Street", - line3: "Harrison Street", - city: "San Fransico", - state: "California", - zip: "94122", - country: "DE", - first_name: "joseph", - last_name: "Doe", - }, - phone: { - number: "9123456789", - country_code: "+91", - }, - }, - }, - Response: { - status: 200, - body: { - status: "failed", - error_code: "14_006", - error_message: "Required object 'paymentMethod' is not provided.", - }, - }, - }, Eps: { Request: { payment_method: "bank_redirect", diff --git a/cypress-tests/cypress/support/redirectionHandler.js b/cypress-tests/cypress/support/redirectionHandler.js index d840aab9e48..fe30b5b64b1 100644 --- a/cypress-tests/cypress/support/redirectionHandler.js +++ b/cypress-tests/cypress/support/redirectionHandler.js @@ -137,64 +137,25 @@ function bankRedirectRedirection( cy.get('[value="authorised"]').click(); break; case "ideal": - cy.get(":nth-child(4) > td > p").should( - "contain.text", - "Your Payment was Authorised/Refused/Cancelled (It may take up to five minutes to show on the Payment List)" - ); - cy.get(".btnLink").click(); - cy.url().should("include", "status=succeeded"); - cy.wait(5000); - break; - case "giropay": - cy.get( - ".rds-cookies-overlay__allow-all-cookies-btn > .rds-button" - ).click(); - cy.wait(5000); - cy.get(".normal-3").should( - "contain.text", - "Bank suchen ‑ mit giropay zahlen." - ); - cy.get("#bankSearch").type("giropay TestBank{enter}"); - cy.get(".normal-2 > div").click(); - cy.get('[data-testid="customerIban"]').type( - "DE48499999601234567890" - ); - cy.get('[data-testid="customerIdentification"]').type( - "9123456789" - ); - cy.get(":nth-child(3) > .rds-button").click(); - cy.get('[data-testid="onlineBankingPin"]').type("1234"); - cy.get(".rds-button--primary").click(); - cy.get(":nth-child(5) > .rds-radio-input-group__label").click(); - cy.get(".rds-button--primary").click(); - cy.get('[data-testid="photoTan"]').type("123456"); - cy.get(".rds-button--primary").click(); - cy.wait(5000); - cy.url().should("include", "status=succeeded"); - cy.wait(5000); - break; - case "sofort": - cy.get(".modal-overlay.modal-shown.in", { - timeout: constants.TIMEOUT, - }).then(($modal) => { - // If modal is found, handle it - if ($modal.length > 0) { - cy.get("button.cookie-modal-deny-all.button-tertiary") - .should("be.visible") - .should("contain", "Reject All") - .click({ multiple: true }); - cy.get("div#TopBanks.top-banks-multistep") - .should("contain", "Demo Bank") - .as("btn") - .click(); - cy.get("@btn").click(); - } else { - cy.get("input.phone").type("9123456789"); - cy.get("#button.onContinue") - .should("contain", "Continue") - .click(); - } - }); + cy.wait(2000); + cy.get("button[data-testid=payment-action-button]").click(); + cy.wait(2000); + cy.get("button[id=bank-item-TESTNL2A]").click(); + cy.wait(2000); + cy.location("host").then(() => { + cy.url().then((currentUrl) => { + console.log("currenturl ", currentUrl); + cy.origin(new URL(currentUrl).origin, () => { + cy.url().then((redirectedUrl) => { + console.log("redirectedUrl ", redirectedUrl); + + cy.get('button.shared-styles_button__cNu+v').contains('Success').click(); + cy.url().should('include', '/loading/SUCCESS'); + + }); + }); + }) + }) break; default: throw new Error(