diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index 74eadbbb2a..71e9081f35 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -644,8 +644,12 @@ pub enum PayLaterData { #[schema(value_type = String)] billing_name: Secret, }, + /// For PayBright Redirect as PayLater Option PayBrightRedirect {}, + /// For WalleyRedirect as PayLater Option WalleyRedirect {}, + /// For Alma Redirection as PayLater Option + AlmaRedirect {}, } #[derive(serde::Deserialize, serde::Serialize, Debug, Clone, ToSchema, Eq, PartialEq)] @@ -966,6 +970,8 @@ pub enum WalletData { ApplePayRedirect(Box), /// Wallet data for apple pay third party sdk flow ApplePayThirdPartySdk(Box), + /// Wallet data for DANA redirect flow + DanaRedirect {}, /// The wallet data for Google pay GooglePay(GooglePayWalletData), /// Wallet data for google pay redirect flow diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index ae812202ef..bece1bc3a3 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -557,6 +557,7 @@ pub enum PaymentMethodType { AfterpayClearpay, AliPay, AliPayHk, + Alma, ApplePay, Bacs, BancontactCard, @@ -567,6 +568,7 @@ pub enum PaymentMethodType { ClassicReward, Credit, CryptoCurrency, + Dana, Debit, Eps, Evoucher, diff --git a/crates/common_enums/src/transformers.rs b/crates/common_enums/src/transformers.rs index 86a9ba0cdf..9f366cd990 100644 --- a/crates/common_enums/src/transformers.rs +++ b/crates/common_enums/src/transformers.rs @@ -1540,6 +1540,7 @@ impl From for PaymentMethod { PaymentMethodType::AfterpayClearpay => Self::PayLater, PaymentMethodType::AliPay => Self::Wallet, PaymentMethodType::AliPayHk => Self::Wallet, + PaymentMethodType::Alma => Self::PayLater, PaymentMethodType::ApplePay => Self::Wallet, PaymentMethodType::Bacs => Self::BankDebit, PaymentMethodType::BancontactCard => Self::BankRedirect, @@ -1549,6 +1550,7 @@ impl From for PaymentMethod { PaymentMethodType::ClassicReward => Self::Reward, PaymentMethodType::Credit => Self::Card, PaymentMethodType::CryptoCurrency => Self::Crypto, + PaymentMethodType::Dana => Self::Wallet, PaymentMethodType::Debit => Self::Card, PaymentMethodType::Eps => Self::BankRedirect, PaymentMethodType::Evoucher => Self::Reward, diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs index 624e543814..02300cc0e9 100644 --- a/crates/router/src/connector/adyen/transformers.rs +++ b/crates/router/src/connector/adyen/transformers.rs @@ -275,6 +275,7 @@ pub enum AdyenPaymentMethod<'a> { AdyenKlarna(Box), AdyenPaypal(Box), AfterPay(Box), + AlmaPayLater(Box), AliPay(Box), AliPayHk(Box), ApplePay(Box), @@ -282,6 +283,7 @@ pub enum AdyenPaymentMethod<'a> { Bizum(Box), Blik(Box), ClearPay(Box), + Dana(Box), Eps(Box>), #[serde(rename = "gcash")] Gcash(Box), @@ -674,6 +676,12 @@ pub struct AdyenApplePay { apple_pay_token: Secret, } +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct DanaWalletData { + #[serde(rename = "type")] + payment_type: PaymentType, +} + #[derive(Debug, Clone, Serialize, Deserialize)] pub struct TwintWalletData { #[serde(rename = "type")] @@ -725,10 +733,12 @@ pub enum PaymentType { Alipay, #[serde(rename = "alipay_hk")] AlipayHk, + Alma, Applepay, Bizum, Blik, ClearPay, + Dana, Eps, Gcash, Giropay, @@ -1267,6 +1277,12 @@ impl<'a> TryFrom<&api::WalletData> for AdyenPaymentMethod<'a> { }; Ok(AdyenPaymentMethod::Vipps(Box::new(data))) } + api_models::payments::WalletData::DanaRedirect { .. } => { + let data = DanaWalletData { + payment_type: PaymentType::Dana, + }; + Ok(AdyenPaymentMethod::Dana(Box::new(data))) + } _ => Err(errors::ConnectorError::NotImplemented("Payment method".to_string()).into()), } } @@ -1323,6 +1339,11 @@ impl<'a> TryFrom<(&api::PayLaterData, Option)> payment_type: PaymentType::Walley, }))) } + api_models::payments::PayLaterData::AlmaRedirect { .. } => Ok( + AdyenPaymentMethod::AlmaPayLater(Box::new(AdyenPayLaterData { + payment_type: PaymentType::Alma, + })), + ), _ => Err(errors::ConnectorError::NotImplemented("Payment method".to_string()).into()), } } diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index e2deed52b5..6cd2182854 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -171,6 +171,7 @@ impl ForeignFrom for api_enums::PaymentMethod { | api_enums::PaymentMethodType::Paypal | api_enums::PaymentMethodType::AliPay | api_enums::PaymentMethodType::AliPayHk + | api_enums::PaymentMethodType::Dana | api_enums::PaymentMethodType::MbWay | api_enums::PaymentMethodType::MobilePay | api_enums::PaymentMethodType::SamsungPay @@ -182,6 +183,7 @@ impl ForeignFrom for api_enums::PaymentMethod { | api_enums::PaymentMethodType::Momo | api_enums::PaymentMethodType::KakaoPay => Self::Wallet, api_enums::PaymentMethodType::Affirm + | api_enums::PaymentMethodType::Alma | api_enums::PaymentMethodType::AfterpayClearpay | api_enums::PaymentMethodType::Klarna | api_enums::PaymentMethodType::PayBright diff --git a/crates/router/tests/connectors/adyen_uk_ui.rs b/crates/router/tests/connectors/adyen_uk_ui.rs index 7ac037121d..5ac9626c82 100644 --- a/crates/router/tests/connectors/adyen_uk_ui.rs +++ b/crates/router/tests/connectors/adyen_uk_ui.rs @@ -532,6 +532,33 @@ async fn should_make_adyen_walley_payment(web_driver: WebDriver) -> Result<(), W Ok(()) } +async fn should_make_adyen_dana_payment(driver: WebDriver) -> Result<(), WebDriverError> { + let conn = AdyenSeleniumTest {}; + conn.make_redirection_payment( + driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/175"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::SendKeys( + By::Css("input[type='number']"), + "12345678901", + )), // Mobile Number can be any random 11 digit number + Event::Trigger(Trigger::Click(By::Css("button"))), + Event::Trigger(Trigger::SendKeys(By::Css("input[type='number']"), "111111")), // PIN can be any random 11 digit number + Event::Trigger(Trigger::Click(By::ClassName("btn-next"))), + Event::Trigger(Trigger::Sleep(3)), + Event::Trigger(Trigger::Click(By::ClassName("btn-next"))), + Event::Assert(Assert::IsPresent("Google")), + Event::Assert(Assert::ContainsAny( + Selector::QueryParamStr, + vec!["status=succeeded"], + )), + ], + ) + .await?; + Ok(()) +} + #[test] #[serial] #[ignore] @@ -693,4 +720,10 @@ fn should_make_adyen_walley_payment_test() { tester!(should_make_adyen_walley_payment); } +#[test] +#[serial] +fn should_make_adyen_dana_payment_test() { + tester!(should_make_adyen_dana_payment); +} + // https://hs-payments-test.netlify.app/paypal-redirect?amount=70.00&country=US¤cy=USD&mandate_data[customer_acceptance][acceptance_type]=offline&mandate_data[customer_acceptance][accepted_at]=1963-05-03T04:07:52.723Z&mandate_data[customer_acceptance][online][ip_address]=127.0.0.1&mandate_data[customer_acceptance][online][user_agent]=amet%20irure%20esse&mandate_data[mandate_type][multi_use][amount]=700&mandate_data[mandate_type][multi_use][currency]=USD&apikey=dev_uFpxA0r6jjbVaxHSY3X0BZLL3erDUzvg3i51abwB1Bknu3fdiPxw475DQgnByn1z diff --git a/openapi/openapi_spec.json b/openapi/openapi_spec.json index 40009e4c9d..9466dabe69 100644 --- a/openapi/openapi_spec.json +++ b/openapi/openapi_spec.json @@ -6151,7 +6151,8 @@ ], "properties": { "pay_bright_redirect": { - "type": "object" + "type": "object", + "description": "For PayBright Redirect as PayLater Option" } } }, @@ -6162,7 +6163,20 @@ ], "properties": { "walley_redirect": { - "type": "object" + "type": "object", + "description": "For WalleyRedirect as PayLater Option" + } + } + }, + { + "type": "object", + "required": [ + "alma_redirect" + ], + "properties": { + "alma_redirect": { + "type": "object", + "description": "For Alma Redirection as PayLater Option" } } } @@ -6806,6 +6820,7 @@ "afterpay_clearpay", "ali_pay", "ali_pay_hk", + "alma", "apple_pay", "bacs", "bancontact_card", @@ -6815,6 +6830,7 @@ "classic", "credit", "crypto_currency", + "dana", "debit", "eps", "evoucher", @@ -9007,6 +9023,18 @@ } } }, + { + "type": "object", + "required": [ + "dana_redirect" + ], + "properties": { + "dana_redirect": { + "type": "object", + "description": "Wallet data for DANA redirect flow" + } + } + }, { "type": "object", "required": [