diff --git a/crates/router/src/connector/nuvei/transformers.rs b/crates/router/src/connector/nuvei/transformers.rs index 1653ecdc84..4fc70bba81 100644 --- a/crates/router/src/connector/nuvei/transformers.rs +++ b/crates/router/src/connector/nuvei/transformers.rs @@ -177,6 +177,10 @@ pub enum AlternativePaymentMethodType { Ideal, #[serde(rename = "apmgw_EPS")] Eps, + #[serde(rename = "apmgw_Afterpay")] + AfterPay, + #[serde(rename = "apmgw_Klarna")] + Klarna, } #[serde_with::skip_serializing_none] @@ -558,6 +562,34 @@ impl } } +fn get_pay_later_info( + payment_method_type: AlternativePaymentMethodType, + item: &types::RouterData, +) -> Result> { + let address = item + .get_billing()? + .address + .as_ref() + .ok_or_else(utils::missing_field_err("billing.address"))?; + let payment_method = payment_method_type; + Ok(NuveiPaymentsRequest { + payment_option: PaymentOption { + alternative_payment_method: Some(AlternativePaymentMethod { + payment_method, + ..Default::default() + }), + billing_address: Some(BillingAddress { + email: item.request.get_email()?, + first_name: Some(address.get_first_name()?.to_owned()), + last_name: Some(address.get_last_name()?.to_owned()), + country: address.get_country()?.to_owned(), + }), + ..Default::default() + }, + ..Default::default() + }) +} + impl TryFrom<( &types::RouterData, @@ -617,6 +649,21 @@ impl } .into()), }, + api::PaymentMethodData::PayLater(pay_later_data) => match pay_later_data { + payments::PayLaterData::KlarnaRedirect { .. } => { + get_pay_later_info(AlternativePaymentMethodType::Klarna, item) + } + payments::PayLaterData::AfterpayClearpayRedirect { .. } => { + get_pay_later_info(AlternativePaymentMethodType::AfterPay, item) + } + _ => Err(errors::ConnectorError::NotSupported { + message: "Buy Now Pay Later".to_string(), + connector: "Nuvei", + payment_experience: "RedirectToUrl".to_string(), + } + .into()), + }, + _ => Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()), }?; let request = Self::try_from(NuveiPaymentRequestData {