feat(nuvei): Googlepay , applepay and partial authorization integration for nuvei (#8985)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Nithin N
2025-08-22 17:15:19 +05:30
committed by GitHub
parent c90625a4ea
commit 049e6b572d
5 changed files with 558 additions and 190 deletions

View File

@ -1,5 +1,5 @@
pub mod transformers;
use std::{fmt::Debug, sync::LazyLock};
use std::sync::LazyLock;
use api_models::{payments::PaymentIdType, webhooks::IncomingWebhookEvent};
use common_enums::{enums, CallConnectorAction, PaymentAction};
@ -9,6 +9,7 @@ use common_utils::{
ext_traits::{ByteSliceExt, BytesExt, ValueExt},
id_type,
request::{Method, Request, RequestBuilder, RequestContent},
types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector},
};
use error_stack::ResultExt;
use hyperswitch_domain_models::{
@ -57,8 +58,17 @@ use crate::{
utils::{self, is_mandate_supported, PaymentMethodDataType, RouterData as _},
};
#[derive(Debug, Clone)]
pub struct Nuvei;
#[derive(Clone)]
pub struct Nuvei {
pub amount_convertor: &'static (dyn AmountConvertor<Output = StringMajorUnit> + Sync),
}
impl Nuvei {
pub fn new() -> &'static Self {
&Self {
amount_convertor: &StringMajorUnitForConnector,
}
}
}
impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Nuvei
where
@ -592,6 +602,7 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
_connectors: &Connectors,
) -> CustomResult<RequestContent, errors::ConnectorError> {
let connector_req = nuvei::NuveiPaymentsRequest::try_from((req, req.get_session_token()?))?;
Ok(RequestContent::Json(Box::new(connector_req)))
}
@ -629,7 +640,6 @@ impl ConnectorIntegration<Authorize, PaymentsAuthorizeData, PaymentsResponseData
.switch()?;
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);
RouterData::try_from(ResponseRouterData {
response,
data: data.clone(),

View File

@ -322,7 +322,9 @@ impl ConnectorData {
enums::Connector::Novalnet => {
Ok(ConnectorEnum::Old(Box::new(connector::Novalnet::new())))
}
enums::Connector::Nuvei => Ok(ConnectorEnum::Old(Box::new(&connector::Nuvei))),
enums::Connector::Nuvei => {
Ok(ConnectorEnum::Old(Box::new(connector::Nuvei::new())))
}
enums::Connector::Opennode => {
Ok(ConnectorEnum::Old(Box::new(connector::Opennode::new())))
}

View File

@ -239,7 +239,9 @@ impl FeatureMatrixConnectorData {
enums::Connector::Novalnet => {
Ok(ConnectorEnum::Old(Box::new(connector::Novalnet::new())))
}
enums::Connector::Nuvei => Ok(ConnectorEnum::Old(Box::new(&connector::Nuvei))),
enums::Connector::Nuvei => {
Ok(ConnectorEnum::Old(Box::new(connector::Nuvei::new())))
}
enums::Connector::Opennode => {
Ok(ConnectorEnum::Old(Box::new(connector::Opennode::new())))
}

View File

@ -16,7 +16,7 @@ impl utils::Connector for NuveiTest {
fn get_data(&self) -> types::api::ConnectorData {
use router::connector::Nuvei;
utils::construct_connector_data_old(
Box::new(&Nuvei),
Box::new(Nuvei::new()),
types::Connector::Nuvei,
types::api::GetToken::Connector,
None,