From da5c34a335043cb225ed0e4ee06cd75a83c92c4d Mon Sep 17 00:00:00 2001 From: spritianeja03 <146620839+spritianeja03@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:48:05 +0530 Subject: [PATCH] refactor(connector): Move connectors Datatrans, Paybox, Placetopay, Bluesnap from router crate to hyperswitch_connector crate (#6730) Co-authored-by: Spriti Aneja Co-authored-by: deepanshu-iiitu --- Cargo.lock | 2 + crates/common_utils/src/consts.rs | 4 + crates/hyperswitch_connectors/Cargo.toml | 2 + .../hyperswitch_connectors/src/connectors.rs | 17 +- .../src/connectors}/bluesnap.rs | 483 +++++++++--------- .../src/connectors}/bluesnap/transformers.rs | 358 +++++++------ .../src/connectors}/datatrans.rs | 311 ++++++----- .../src/connectors}/datatrans/transformers.rs | 157 +++--- .../src/connectors/gocardless/transformers.rs | 22 +- .../src/connectors}/paybox.rs | 360 +++++++------ .../src/connectors}/paybox/transformers.rs | 152 +++--- .../src/connectors}/placetopay.rs | 320 ++++++------ .../connectors}/placetopay/transformers.rs | 116 ++--- .../src/default_implementations.rs | 124 +++++ .../src/default_implementations_v2.rs | 88 ++++ crates/hyperswitch_connectors/src/types.rs | 6 +- crates/hyperswitch_connectors/src/utils.rs | 432 ++++++++++------ crates/router/src/connector.rs | 42 +- crates/router/src/consts.rs | 4 - .../connector_integration_v2_impls.rs | 92 ---- crates/router/src/core/payments/flows.rs | 124 ----- 21 files changed, 1630 insertions(+), 1586 deletions(-) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/bluesnap.rs (78%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/bluesnap/transformers.rs (75%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/datatrans.rs (69%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/datatrans/transformers.rs (75%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/paybox.rs (65%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/paybox/transformers.rs (90%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/placetopay.rs (67%) rename crates/{router/src/connector => hyperswitch_connectors/src/connectors}/placetopay/transformers.rs (81%) diff --git a/Cargo.lock b/Cargo.lock index c8d5fc4cec..1347599445 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3982,6 +3982,7 @@ dependencies = [ "cards", "common_enums", "common_utils", + "encoding_rs", "error-stack", "hex", "http 0.2.12", @@ -4001,6 +4002,7 @@ dependencies = [ "roxmltree", "serde", "serde_json", + "serde_qs", "serde_urlencoded", "serde_with", "strum 0.26.3", diff --git a/crates/common_utils/src/consts.rs b/crates/common_utils/src/consts.rs index e430d59e54..39e5483700 100644 --- a/crates/common_utils/src/consts.rs +++ b/crates/common_utils/src/consts.rs @@ -142,3 +142,7 @@ pub const PUBLISHABLE_KEY_LENGTH: u16 = 39; /// The number of bytes allocated for the hashed connector transaction ID. /// Total number of characters equals CONNECTOR_TRANSACTION_ID_HASH_BYTES times 2. pub const CONNECTOR_TRANSACTION_ID_HASH_BYTES: usize = 25; + +/// Apple Pay validation url +pub const APPLEPAY_VALIDATION_URL: &str = + "https://apple-pay-gateway-cert.apple.com/paymentservices/startSession"; diff --git a/crates/hyperswitch_connectors/Cargo.toml b/crates/hyperswitch_connectors/Cargo.toml index 664c78a5f4..6405ac8ae8 100644 --- a/crates/hyperswitch_connectors/Cargo.toml +++ b/crates/hyperswitch_connectors/Cargo.toml @@ -16,6 +16,7 @@ actix-web = "4.5.1" async-trait = "0.1.79" base64 = "0.22.0" bytes = "1.6.0" +encoding_rs = "0.8.33" error-stack = "0.4.1" hex = "0.4.3" http = "0.2.12" @@ -31,6 +32,7 @@ ring = "0.17.8" roxmltree = "0.19.0" serde = { version = "1.0.197", features = ["derive"] } serde_json = "1.0.115" +serde_qs = "0.12.0" serde_urlencoded = "0.7.1" serde_with = "3.7.0" strum = { version = "0.26", features = ["derive"] } diff --git a/crates/hyperswitch_connectors/src/connectors.rs b/crates/hyperswitch_connectors/src/connectors.rs index e7ea31ee0e..391d9446cb 100644 --- a/crates/hyperswitch_connectors/src/connectors.rs +++ b/crates/hyperswitch_connectors/src/connectors.rs @@ -4,10 +4,12 @@ pub mod bambora; pub mod bamboraapac; pub mod billwerk; pub mod bitpay; +pub mod bluesnap; pub mod boku; pub mod cashtocode; pub mod coinbase; pub mod cryptopay; +pub mod datatrans; pub mod deutschebank; pub mod digitalvirgo; pub mod dlocal; @@ -27,8 +29,10 @@ pub mod nexinets; pub mod nexixpay; pub mod nomupay; pub mod novalnet; +pub mod paybox; pub mod payeezy; pub mod payu; +pub mod placetopay; pub mod powertranz; pub mod prophetpay; pub mod rapyd; @@ -50,12 +54,13 @@ pub mod zsl; pub use self::{ airwallex::Airwallex, amazonpay::Amazonpay, bambora::Bambora, bamboraapac::Bamboraapac, - billwerk::Billwerk, bitpay::Bitpay, boku::Boku, cashtocode::Cashtocode, coinbase::Coinbase, - cryptopay::Cryptopay, deutschebank::Deutschebank, digitalvirgo::Digitalvirgo, dlocal::Dlocal, - elavon::Elavon, fiserv::Fiserv, fiservemea::Fiservemea, fiuu::Fiuu, forte::Forte, - globepay::Globepay, gocardless::Gocardless, helcim::Helcim, inespay::Inespay, - jpmorgan::Jpmorgan, mollie::Mollie, multisafepay::Multisafepay, nexinets::Nexinets, - nexixpay::Nexixpay, nomupay::Nomupay, novalnet::Novalnet, payeezy::Payeezy, payu::Payu, + billwerk::Billwerk, bitpay::Bitpay, bluesnap::Bluesnap, boku::Boku, cashtocode::Cashtocode, + coinbase::Coinbase, cryptopay::Cryptopay, datatrans::Datatrans, deutschebank::Deutschebank, + digitalvirgo::Digitalvirgo, dlocal::Dlocal, elavon::Elavon, fiserv::Fiserv, + fiservemea::Fiservemea, fiuu::Fiuu, forte::Forte, globepay::Globepay, gocardless::Gocardless, + helcim::Helcim, inespay::Inespay, jpmorgan::Jpmorgan, mollie::Mollie, + multisafepay::Multisafepay, nexinets::Nexinets, nexixpay::Nexixpay, nomupay::Nomupay, + novalnet::Novalnet, paybox::Paybox, payeezy::Payeezy, payu::Payu, placetopay::Placetopay, powertranz::Powertranz, prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay, redsys::Redsys, shift4::Shift4, square::Square, stax::Stax, taxjar::Taxjar, thunes::Thunes, tsys::Tsys, unified_authentication_service::UnifiedAuthenticationService, volt::Volt, diff --git a/crates/router/src/connector/bluesnap.rs b/crates/hyperswitch_connectors/src/connectors/bluesnap.rs similarity index 78% rename from crates/router/src/connector/bluesnap.rs rename to crates/hyperswitch_connectors/src/connectors/bluesnap.rs index dc508a3491..3267637b09 100644 --- a/crates/router/src/connector/bluesnap.rs +++ b/crates/hyperswitch_connectors/src/connectors/bluesnap.rs @@ -1,46 +1,70 @@ pub mod transformers; +use api_models::webhooks::IncomingWebhookEvent; use base64::Engine; +use common_enums::{enums, CallConnectorAction, PaymentAction}; use common_utils::{ + consts::BASE64_ENGINE, crypto, - ext_traits::{StringExt, ValueExt}, - request::RequestContent, + errors::CustomResult, + ext_traits::{BytesExt, StringExt, ValueExt}, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector}, }; -use diesel_models::enums; use error_stack::{report, ResultExt}; -use masking::PeekInterface; +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + CompleteAuthorize, + }, + router_request_types::{ + AccessTokenRequestData, CompleteAuthorizeData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, + PaymentsSyncData, RefundsData, ResponseId, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RedirectForm, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsSessionRouterData, PaymentsSyncRouterData, + RefundSyncRouterData, RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorRedirectResponse, + ConnectorValidation, + }, + configs::Connectors, + consts::{NO_ERROR_CODE, NO_ERROR_MESSAGE}, + disputes::DisputePayload, + errors, + events::connector_api_logs::ConnectorEvent, + types::{self, Response}, + webhooks::{IncomingWebhook, IncomingWebhookRequestDetails}, +}; +use masking::{Mask, PeekInterface}; +use router_env::logger; use transformers as bluesnap; -use super::utils::{ - self as connector_utils, get_error_code_error_message_based_on_priority, ConnectorErrorType, - ConnectorErrorTypeMapping, PaymentsAuthorizeRequestData, RefundsRequestData, RouterData, -}; use crate::{ - configs::settings, - consts, - core::{ - errors::{self, CustomResult}, - payments, + constants::headers, + types::ResponseRouterData, + utils::{ + construct_not_supported_error_report, convert_amount, + get_error_code_error_message_based_on_priority, get_header_key_value, get_http_header, + to_connector_meta_from_secret, to_currency_lower_unit, ConnectorErrorType, + ConnectorErrorTypeMapping, ForeignTryFrom, PaymentsAuthorizeRequestData, + RefundsRequestData, RouterData as _, }, - events::connector_api_logs::ConnectorEvent, - headers, logger, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorValidation, - }, - types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - transformers::ForeignTryFrom, - ErrorResponse, Response, - }, - utils::BytesExt, }; pub const BLUESNAP_TRANSACTION_NOT_FOUND: &str = "is not authorized to view merchant-transaction:"; +pub const REQUEST_TIMEOUT_PAYMENT_NOT_FOUND: &str = "Timed out ,payment not found"; + #[derive(Clone)] pub struct Bluesnap { amount_converter: &'static (dyn AmountConvertor + Sync), @@ -60,9 +84,9 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = self.get_auth_header(&req.connector_auth_type)?; header.push(( headers::CONTENT_TYPE.to_string(), @@ -84,18 +108,18 @@ impl ConnectorCommon for Bluesnap { fn common_get_content_type(&self) -> &'static str { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.bluesnap.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = bluesnap::BluesnapAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; let encoded_api_key = - consts::BASE64_ENGINE.encode(format!("{}:{}", auth.key1.peek(), auth.api_key.peek())); + BASE64_ENGINE.encode(format!("{}:{}", auth.key1.peek(), auth.api_key.peek())); Ok(vec![( headers::AUTHORIZATION.to_string(), format!("Basic {encoded_api_key}").into_masked(), @@ -134,10 +158,10 @@ impl ConnectorCommon for Bluesnap { code: option_error_code_message .clone() .map(|error_code_message| error_code_message.error_code) - .unwrap_or(consts::NO_ERROR_CODE.to_string()), + .unwrap_or(NO_ERROR_CODE.to_string()), message: option_error_code_message .map(|error_code_message| error_code_message.error_message) - .unwrap_or(consts::NO_ERROR_MESSAGE.to_string()), + .unwrap_or(NO_ERROR_MESSAGE.to_string()), reason: Some(reason), attempt_status: None, connector_transaction_id: None, @@ -158,7 +182,7 @@ impl ConnectorCommon for Bluesnap { ( format!( "{} in bluesnap dashboard", - consts::REQUEST_TIMEOUT_PAYMENT_NOT_FOUND + REQUEST_TIMEOUT_PAYMENT_NOT_FOUND ), Some(enums::AttemptStatus::Failure), // when bluesnap throws 403 for payment not found, we update the payment status to failure. ) @@ -167,7 +191,7 @@ impl ConnectorCommon for Bluesnap { }; ErrorResponse { status_code: res.status_code, - code: consts::NO_ERROR_CODE.to_string(), + code: NO_ERROR_CODE.to_string(), message: error_response, reason: Some(error_res), attempt_status, @@ -191,14 +215,14 @@ impl ConnectorValidation for Bluesnap { | enums::CaptureMethod::Manual | enums::CaptureMethod::SequentialAutomatic => Ok(()), enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_supported_error_report(capture_method, self.id()), + construct_not_supported_error_report(capture_method, self.id()), ), } } fn validate_psync_reference_id( &self, - data: &hyperswitch_domain_models::router_request_types::PaymentsSyncData, + data: &PaymentsSyncData, is_three_ds: bool, status: enums::AttemptStatus, connector_meta_data: Option, @@ -222,7 +246,7 @@ impl ConnectorValidation for Bluesnap { } // if merchant_id is present, psync can be made along with attempt_id let meta_data: CustomResult = - connector_utils::to_connector_meta_from_secret(connector_meta_data.clone()); + to_connector_meta_from_secret(connector_meta_data.clone()); meta_data.map(|_| ()) } @@ -232,33 +256,21 @@ impl api::Payment for Bluesnap {} impl api::PaymentToken for Bluesnap {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Bluesnap +impl ConnectorIntegration + for Bluesnap { // Not Implemented (R) } impl api::MandateSetup for Bluesnap {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Bluesnap +impl ConnectorIntegration + for Bluesnap { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Bluesnap".to_string()) .into(), @@ -268,14 +280,12 @@ impl impl api::PaymentVoid for Bluesnap {} -impl ConnectorIntegration - for Bluesnap -{ +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -285,8 +295,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}{}", @@ -297,8 +307,8 @@ impl ConnectorIntegration CustomResult { let connector_req = bluesnap::BluesnapVoidRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -306,11 +316,11 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Put) + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Put) .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) @@ -323,17 +333,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bluesnap::BluesnapPaymentsResponse = res .response .parse_struct("BluesnapPaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -352,20 +362,15 @@ impl ConnectorIntegration - for Bluesnap -{ -} +impl ConnectorIntegration for Bluesnap {} impl api::PaymentSync for Bluesnap {} -impl ConnectorIntegration - for Bluesnap -{ +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -375,13 +380,13 @@ impl ConnectorIntegration CustomResult { let connector_transaction_id = req.request.connector_transaction_id.clone(); match connector_transaction_id { // if connector_transaction_id is present, we always sync with connector_transaction_id - types::ResponseId::ConnectorTransactionId(trans_id) => { + ResponseId::ConnectorTransactionId(trans_id) => { get_psync_url_with_connector_transaction_id( trans_id, self.base_url(connectors).to_string(), @@ -390,7 +395,7 @@ impl ConnectorIntegration { // if connector_transaction_id is not present, we sync with merchant_transaction_id let meta_data: bluesnap::BluesnapConnectorMetaData = - connector_utils::to_connector_meta_from_secret(req.connector_meta_data.clone()) + to_connector_meta_from_secret(req.connector_meta_data.clone()) .change_context(errors::ConnectorError::ResponseHandlingFailed)?; get_url_with_merchant_transaction_id( self.base_url(connectors).to_string(), @@ -403,12 +408,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) @@ -426,17 +431,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bluesnap::BluesnapPaymentsResponse = res .response .parse_struct("BluesnapPaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -446,14 +451,12 @@ impl ConnectorIntegration - for Bluesnap -{ +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -463,8 +466,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}{}", @@ -475,10 +478,10 @@ impl ConnectorIntegration CustomResult { - let amount_to_capture = connector_utils::convert_amount( + let amount_to_capture = convert_amount( self.amount_converter, req.request.minor_amount_to_capture, req.request.currency, @@ -491,11 +494,11 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Put) + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Put) .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsCaptureType::get_headers( @@ -510,17 +513,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bluesnap::BluesnapPaymentsResponse = res .response .parse_struct("Bluesnap BluesnapPaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -540,14 +543,12 @@ impl ConnectorIntegration - for Bluesnap -{ +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::PaymentsSessionRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSessionRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -557,8 +558,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}{}", @@ -569,8 +570,8 @@ impl ConnectorIntegration CustomResult { let connector_req = bluesnap::BluesnapCreateWalletToken::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -578,12 +579,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSessionRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsSessionType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsSessionType::get_headers( @@ -598,10 +599,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bluesnap::BluesnapWalletTokenResponse = res .response .parse_struct("BluesnapWalletTokenResponse") @@ -611,11 +612,10 @@ impl ConnectorIntegration - for Bluesnap -{ +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -652,8 +650,8 @@ impl ConnectorIntegration CustomResult { if req.is_three_ds() && req.request.is_card() { Ok(format!( @@ -672,10 +670,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -697,12 +695,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsAuthorizeType::get_url( self, req, connectors, )?) @@ -719,13 +717,13 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { match (data.is_three_ds() && data.request.is_card(), res.headers) { (true, Some(headers)) => { - let location = connector_utils::get_http_header("Location", &headers) + let location = get_http_header("Location", &headers) .change_context(errors::ConnectorError::ResponseHandlingFailed)?; // If location headers are not present connector will return 4XX so this error will never be propagated let payment_fields_token = location .split('/') @@ -739,11 +737,11 @@ impl ConnectorIntegration for Bluesnap +impl ConnectorIntegration + for Bluesnap { fn get_headers( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_content_type(&self) -> &'static str { @@ -802,8 +796,8 @@ impl } fn get_url( &self, - _req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, + _req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}services/2/transactions", @@ -812,10 +806,10 @@ impl } fn get_request_body( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCompleteAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -827,12 +821,12 @@ impl } fn build_request( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsCompleteAuthorizeType::get_url( self, req, connectors, )?) @@ -848,17 +842,17 @@ impl } fn handle_response( &self, - data: &types::PaymentsCompleteAuthorizeRouterData, + data: &PaymentsCompleteAuthorizeRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bluesnap::BluesnapPaymentsResponse = res .response .parse_struct("BluesnapPaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -879,14 +873,12 @@ impl api::Refund for Bluesnap {} impl api::RefundExecute for Bluesnap {} impl api::RefundSync for Bluesnap {} -impl ConnectorIntegration - for Bluesnap -{ +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -896,8 +888,8 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}{}{}", @@ -909,10 +901,10 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { - let refund_amount = connector_utils::convert_amount( + let refund_amount = convert_amount( self.amount_converter, req.request.minor_refund_amount, req.request.currency, @@ -924,11 +916,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundExecuteType::get_headers( @@ -943,17 +935,17 @@ impl ConnectorIntegration, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: bluesnap::RefundResponse = res .response .parse_struct("bluesnap RefundResponse") .change_context(errors::ConnectorError::RequestEncodingFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -970,12 +962,12 @@ impl ConnectorIntegration for Bluesnap { +impl ConnectorIntegration for Bluesnap { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -985,14 +977,14 @@ impl ConnectorIntegration CustomResult { if req.request.payment_amount == req.request.refund_amount { let meta_data: CustomResult< bluesnap::BluesnapConnectorMetaData, errors::ConnectorError, - > = connector_utils::to_connector_meta_from_secret(req.connector_meta_data.clone()); + > = to_connector_meta_from_secret(req.connector_meta_data.clone()); match meta_data { // if merchant_id is present, rsync can be made using merchant_transaction_id @@ -1014,12 +1006,12 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundSyncType::get_headers(self, req, connectors)?) @@ -1029,17 +1021,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bluesnap::BluesnapPaymentsResponse = res .response .parse_struct("bluesnap BluesnapPaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -1057,39 +1049,37 @@ impl ConnectorIntegration, + _request: &IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::HmacSha256)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &IncomingWebhookRequestDetails<'_>, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { - let security_header = - connector_utils::get_header_key_value("bls-signature", request.headers)?; + let security_header = get_header_key_value("bls-signature", request.headers)?; hex::decode(security_header) .change_context(errors::ConnectorError::WebhookSignatureNotFound) } fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { - let timestamp = - connector_utils::get_header_key_value("bls-ipn-timestamp", request.headers)?; + let timestamp = get_header_key_value("bls-ipn-timestamp", request.headers)?; Ok(format!("{}{}", timestamp, String::from_utf8_lossy(request.body)).into_bytes()) } fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &IncomingWebhookRequestDetails<'_>, ) -> CustomResult { let webhook_body: bluesnap::BluesnapWebhookBody = serde_urlencoded::from_bytes(request.body) @@ -1131,23 +1121,23 @@ impl api::IncomingWebhook for Bluesnap { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let details: bluesnap::BluesnapWebhookObjectEventType = serde_urlencoded::from_bytes(request.body) .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?; - api::IncomingWebhookEvent::try_from(details) + IncomingWebhookEvent::try_from(details) } fn get_dispute_details( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let dispute_details: bluesnap::BluesnapDisputeWebhookBody = serde_urlencoded::from_bytes(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; - Ok(api::disputes::DisputePayload { - amount: connector_utils::to_currency_lower_unit( + Ok(DisputePayload { + amount: to_currency_lower_unit( dispute_details.invoice_charge_amount.abs().to_string(), dispute_details.currency, )?, @@ -1165,7 +1155,7 @@ impl api::IncomingWebhook for Bluesnap { fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let resource: bluesnap::BluesnapWebhookObjectResource = serde_urlencoded::from_bytes(request.body) @@ -1175,19 +1165,18 @@ impl api::IncomingWebhook for Bluesnap { } } -impl services::ConnectorRedirectResponse for Bluesnap { +impl ConnectorRedirectResponse for Bluesnap { fn get_flow_type( &self, _query_params: &str, json_payload: Option, - action: services::PaymentAction, - ) -> CustomResult { + action: PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + PaymentAction::PSync | PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(CallConnectorAction::Trigger) } - services::PaymentAction::CompleteAuthorize => { + PaymentAction::CompleteAuthorize => { let redirection_response: bluesnap::BluesnapRedirectionResponse = json_payload .ok_or(errors::ConnectorError::MissingConnectorRedirectionPayload { field_name: "json_payload", @@ -1201,8 +1190,8 @@ impl services::ConnectorRedirectResponse for Bluesnap { .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; match redirection_result.status.as_str() { - "Success" => Ok(payments::CallConnectorAction::Trigger), - _ => Ok(payments::CallConnectorAction::StatusUpdate { + "Success" => Ok(CallConnectorAction::Trigger), + _ => Ok(CallConnectorAction::StatusUpdate { status: enums::AttemptStatus::AuthenticationFailed, error_code: redirection_result.code, error_message: redirection_result @@ -1370,7 +1359,7 @@ fn get_psync_url_with_connector_transaction_id( } fn get_rsync_url_with_connector_refund_id( - req: &types::RefundSyncRouterData, + req: &RefundSyncRouterData, base_url: String, ) -> CustomResult { Ok(format!( diff --git a/crates/router/src/connector/bluesnap/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs similarity index 75% rename from crates/router/src/connector/bluesnap/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs index d3fc0779e2..2e4503c346 100644 --- a/crates/router/src/connector/bluesnap/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/bluesnap/transformers.rs @@ -1,32 +1,44 @@ use std::collections::HashMap; -use api_models::{enums as api_enums, payments}; +use api_models::{ + payments::{ + AmountInfo, ApplePayPaymentRequest, ApplePaySessionResponse, + ApplepayCombinedSessionTokenData, ApplepaySessionTokenData, ApplepaySessionTokenMetadata, + ApplepaySessionTokenResponse, NextActionCall, NoThirdPartySdkSessionResponse, + SdkNextAction, SessionToken, + }, + webhooks::IncomingWebhookEvent, +}; use base64::Engine; +use common_enums::{enums, CountryAlpha2}; use common_utils::{ + consts::{APPLEPAY_VALIDATION_URL, BASE64_ENGINE}, errors::CustomResult, - ext_traits::{ByteSliceExt, StringExt, ValueExt}, + ext_traits::{ByteSliceExt, Encode, OptionExt, StringExt, ValueExt}, pii::Email, types::StringMajorUnit, }; use error_stack::ResultExt; -use masking::{ExposeInterface, PeekInterface}; +use hyperswitch_domain_models::{ + address::AddressDetails, + payment_method_data::{self, PaymentMethodData, WalletData}, + router_data::{ConnectorAuthType, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::ResponseId, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types, +}; +use hyperswitch_interfaces::errors; +use masking::{ExposeInterface, PeekInterface, Secret}; use serde::{Deserialize, Serialize}; use serde_json::Value; use crate::{ - connector::utils::{ - self, AddressDetailsData, ApplePay, CardData, PaymentsAuthorizeRequestData, - PaymentsCompleteAuthorizeRequestData, RouterData, + types::{PaymentsSessionResponseRouterData, RefundsResponseRouterData, ResponseRouterData}, + utils::{ + self, AddressDetailsData, ApplePay, CardData as _, ForeignTryFrom, + PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData, RouterData as _, }, - consts, - core::errors, - pii::Secret, - types::{ - self, api, domain, - storage::enums, - transformers::{ForeignFrom, ForeignTryFrom}, - }, - utils::{Encode, OptionExt}, }; const DISPLAY_METADATA: &str = "Y"; @@ -150,7 +162,7 @@ pub struct EncodedPaymentToken { #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct BillingDetails { - country_code: Option, + country_code: Option, address_lines: Option>>, family_name: Option>, given_name: Option>, @@ -210,28 +222,28 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> item: &BluesnapRouterData<&types::PaymentsAuthorizeRouterData>, ) -> Result { match item.router_data.request.payment_method_data { - domain::PaymentMethodData::Card(ref ccard) => Ok(Self { + PaymentMethodData::Card(ref ccard) => Ok(Self { cc_number: ccard.card_number.clone(), exp_date: ccard.get_expiry_date_as_mmyyyy("/"), }), - domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( "Selected payment method via Token flow through bluesnap".to_string(), ) @@ -256,7 +268,7 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues .metadata .as_ref() .map(|metadata| BluesnapMetadata { - meta_data: Vec::::foreign_from(metadata.to_owned()), + meta_data: convert_metadata_to_request_metadata(metadata.to_owned()), }); let (payment_method, card_holder_info) = match item @@ -265,7 +277,7 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues .payment_method_data .clone() { - domain::PaymentMethodData::Card(ref ccard) => Ok(( + PaymentMethodData::Card(ref ccard) => Ok(( PaymentMethodDetails::CreditCard(Card { card_number: ccard.card_number.clone(), expiration_month: ccard.card_exp_month.clone(), @@ -277,8 +289,8 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues item.router_data.request.get_email()?, )?, )), - domain::PaymentMethodData::Wallet(wallet_data) => match wallet_data { - domain::WalletData::GooglePay(payment_method_data) => { + PaymentMethodData::Wallet(wallet_data) => match wallet_data { + WalletData::GooglePay(payment_method_data) => { let gpay_object = BluesnapGooglePayObject { payment_method_data: utils::GooglePayWalletData::from(payment_method_data), } @@ -287,14 +299,12 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues Ok(( PaymentMethodDetails::Wallet(BluesnapWallet { wallet_type: BluesnapWalletTypes::GooglePay, - encoded_payment_token: Secret::new( - consts::BASE64_ENGINE.encode(gpay_object), - ), + encoded_payment_token: Secret::new(BASE64_ENGINE.encode(gpay_object)), }), None, )) } - domain::WalletData::ApplePay(payment_method_data) => { + WalletData::ApplePay(payment_method_data) => { let apple_pay_payment_data = payment_method_data.get_applepay_decoded_payment_data()?; let apple_pay_payment_data: ApplePayEncodedPaymentData = apple_pay_payment_data @@ -346,7 +356,7 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues PaymentMethodDetails::Wallet(BluesnapWallet { wallet_type: BluesnapWalletTypes::ApplePay, encoded_payment_token: Secret::new( - consts::BASE64_ENGINE.encode(apple_pay_object), + BASE64_ENGINE.encode(apple_pay_object), ), }), get_card_holder_info( @@ -355,52 +365,52 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues )?, )) } - domain::WalletData::AliPayQr(_) - | domain::WalletData::AliPayRedirect(_) - | domain::WalletData::AliPayHkRedirect(_) - | domain::WalletData::MomoRedirect(_) - | domain::WalletData::KakaoPayRedirect(_) - | domain::WalletData::GoPayRedirect(_) - | domain::WalletData::GcashRedirect(_) - | domain::WalletData::ApplePayRedirect(_) - | domain::WalletData::ApplePayThirdPartySdk(_) - | domain::WalletData::DanaRedirect {} - | domain::WalletData::GooglePayRedirect(_) - | domain::WalletData::GooglePayThirdPartySdk(_) - | domain::WalletData::MbWayRedirect(_) - | domain::WalletData::MobilePayRedirect(_) - | domain::WalletData::PaypalRedirect(_) - | domain::WalletData::PaypalSdk(_) - | domain::WalletData::Paze(_) - | domain::WalletData::SamsungPay(_) - | domain::WalletData::TwintRedirect {} - | domain::WalletData::VippsRedirect {} - | domain::WalletData::TouchNGoRedirect(_) - | domain::WalletData::WeChatPayRedirect(_) - | domain::WalletData::CashappQr(_) - | domain::WalletData::SwishQr(_) - | domain::WalletData::WeChatPayQr(_) - | domain::WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( + WalletData::AliPayQr(_) + | WalletData::AliPayRedirect(_) + | WalletData::AliPayHkRedirect(_) + | WalletData::MomoRedirect(_) + | WalletData::KakaoPayRedirect(_) + | WalletData::GoPayRedirect(_) + | WalletData::GcashRedirect(_) + | WalletData::ApplePayRedirect(_) + | WalletData::ApplePayThirdPartySdk(_) + | WalletData::DanaRedirect {} + | WalletData::GooglePayRedirect(_) + | WalletData::GooglePayThirdPartySdk(_) + | WalletData::MbWayRedirect(_) + | WalletData::MobilePayRedirect(_) + | WalletData::PaypalRedirect(_) + | WalletData::PaypalSdk(_) + | WalletData::Paze(_) + | WalletData::SamsungPay(_) + | WalletData::TwintRedirect {} + | WalletData::VippsRedirect {} + | WalletData::TouchNGoRedirect(_) + | WalletData::WeChatPayRedirect(_) + | WalletData::CashappQr(_) + | WalletData::SwishQr(_) + | WalletData::WeChatPayQr(_) + | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("bluesnap"), )), }, - domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("bluesnap"), )) @@ -421,8 +431,8 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsAuthorizeRouterData>> for Blues } } -impl From for ApplepayPaymentMethod { - fn from(item: domain::ApplepayPaymentMethod) -> Self { +impl From for ApplepayPaymentMethod { + fn from(item: payment_method_data::ApplepayPaymentMethod) -> Self { Self { display_name: item.display_name, network: item.network, @@ -437,27 +447,23 @@ impl TryFrom<&types::PaymentsSessionRouterData> for BluesnapCreateWalletToken { let apple_pay_metadata = item.get_connector_meta()?.expose(); let applepay_metadata = apple_pay_metadata .clone() - .parse_value::( - "ApplepayCombinedSessionTokenData", - ) + .parse_value::("ApplepayCombinedSessionTokenData") .map(|combined_metadata| { - payments::ApplepaySessionTokenMetadata::ApplePayCombined( - combined_metadata.apple_pay_combined, - ) + ApplepaySessionTokenMetadata::ApplePayCombined(combined_metadata.apple_pay_combined) }) .or_else(|_| { apple_pay_metadata - .parse_value::("ApplepaySessionTokenData") + .parse_value::("ApplepaySessionTokenData") .map(|old_metadata| { - payments::ApplepaySessionTokenMetadata::ApplePay(old_metadata.apple_pay) + ApplepaySessionTokenMetadata::ApplePay(old_metadata.apple_pay) }) }) .change_context(errors::ConnectorError::ParsingFailed)?; let session_token_data = match applepay_metadata { - payments::ApplepaySessionTokenMetadata::ApplePay(apple_pay_data) => { + ApplepaySessionTokenMetadata::ApplePay(apple_pay_data) => { Ok(apple_pay_data.session_token_data) } - payments::ApplepaySessionTokenMetadata::ApplePayCombined(_apple_pay_combined_data) => { + ApplepaySessionTokenMetadata::ApplePayCombined(_apple_pay_combined_data) => { Err(errors::ConnectorError::FlowNotSupported { flow: "apple pay combined".to_string(), connector: "bluesnap".to_string(), @@ -472,7 +478,7 @@ impl TryFrom<&types::PaymentsSessionRouterData> for BluesnapCreateWalletToken { Ok(Self { wallet_type: "APPLE_PAY".to_string(), - validation_url: consts::APPLEPAY_VALIDATION_URL.to_string().into(), + validation_url: APPLEPAY_VALIDATION_URL.to_string().into(), domain_name, display_name: Some(session_token_data.display_name), }) @@ -481,92 +487,86 @@ impl TryFrom<&types::PaymentsSessionRouterData> for BluesnapCreateWalletToken { impl ForeignTryFrom<( - types::PaymentsSessionResponseRouterData, + PaymentsSessionResponseRouterData, StringMajorUnit, )> for types::PaymentsSessionRouterData { type Error = error_stack::Report; fn foreign_try_from( (item, apple_pay_amount): ( - types::PaymentsSessionResponseRouterData, + PaymentsSessionResponseRouterData, StringMajorUnit, ), ) -> Result { let response = &item.response; - let wallet_token = consts::BASE64_ENGINE + let wallet_token = BASE64_ENGINE .decode(response.wallet_token.clone().expose()) .change_context(errors::ConnectorError::ResponseHandlingFailed)?; - let session_response: payments::NoThirdPartySdkSessionResponse = wallet_token + let session_response: NoThirdPartySdkSessionResponse = wallet_token .parse_struct("NoThirdPartySdkSessionResponse") .change_context(errors::ConnectorError::ParsingFailed)?; let metadata = item.data.get_connector_meta()?.expose(); let applepay_metadata = metadata .clone() - .parse_value::( - "ApplepayCombinedSessionTokenData", - ) + .parse_value::("ApplepayCombinedSessionTokenData") .map(|combined_metadata| { - payments::ApplepaySessionTokenMetadata::ApplePayCombined( - combined_metadata.apple_pay_combined, - ) + ApplepaySessionTokenMetadata::ApplePayCombined(combined_metadata.apple_pay_combined) }) .or_else(|_| { metadata - .parse_value::("ApplepaySessionTokenData") + .parse_value::("ApplepaySessionTokenData") .map(|old_metadata| { - payments::ApplepaySessionTokenMetadata::ApplePay(old_metadata.apple_pay) + ApplepaySessionTokenMetadata::ApplePay(old_metadata.apple_pay) }) }) .change_context(errors::ConnectorError::ParsingFailed)?; let (payment_request_data, session_token_data) = match applepay_metadata { - payments::ApplepaySessionTokenMetadata::ApplePayCombined(_apple_pay_combined) => { + ApplepaySessionTokenMetadata::ApplePayCombined(_apple_pay_combined) => { Err(errors::ConnectorError::FlowNotSupported { flow: "apple pay combined".to_string(), connector: "bluesnap".to_string(), }) } - payments::ApplepaySessionTokenMetadata::ApplePay(apple_pay) => { + ApplepaySessionTokenMetadata::ApplePay(apple_pay) => { Ok((apple_pay.payment_request_data, apple_pay.session_token_data)) } }?; Ok(Self { - response: Ok(types::PaymentsResponseData::SessionResponse { - session_token: api::SessionToken::ApplePay(Box::new( - payments::ApplepaySessionTokenResponse { - session_token_data: Some( - payments::ApplePaySessionResponse::NoThirdPartySdk(session_response), - ), - payment_request_data: Some(payments::ApplePayPaymentRequest { - country_code: item.data.get_billing_country()?, - currency_code: item.data.request.currency, - total: payments::AmountInfo { - label: payment_request_data.label, - total_type: Some("final".to_string()), - amount: apple_pay_amount, - }, - merchant_capabilities: Some(payment_request_data.merchant_capabilities), - supported_networks: Some(payment_request_data.supported_networks), - merchant_identifier: Some(session_token_data.merchant_identifier), - required_billing_contact_fields: None, - required_shipping_contact_fields: None, - }), - connector: "bluesnap".to_string(), - delayed_session_token: false, - sdk_next_action: { - payments::SdkNextAction { - next_action: payments::NextActionCall::Confirm, - } + response: Ok(PaymentsResponseData::SessionResponse { + session_token: SessionToken::ApplePay(Box::new(ApplepaySessionTokenResponse { + session_token_data: Some(ApplePaySessionResponse::NoThirdPartySdk( + session_response, + )), + payment_request_data: Some(ApplePayPaymentRequest { + country_code: item.data.get_billing_country()?, + currency_code: item.data.request.currency, + total: AmountInfo { + label: payment_request_data.label, + total_type: Some("final".to_string()), + amount: apple_pay_amount, }, - connector_reference_id: None, - connector_sdk_public_key: None, - connector_merchant_id: None, + merchant_capabilities: Some(payment_request_data.merchant_capabilities), + supported_networks: Some(payment_request_data.supported_networks), + merchant_identifier: Some(session_token_data.merchant_identifier), + required_billing_contact_fields: None, + required_shipping_contact_fields: None, + }), + connector: "bluesnap".to_string(), + delayed_session_token: false, + sdk_next_action: { + SdkNextAction { + next_action: NextActionCall::Confirm, + } }, - )), + connector_reference_id: None, + connector_sdk_public_key: None, + connector_merchant_id: None, + })), }), ..item.data }) @@ -612,7 +612,7 @@ impl TryFrom<&BluesnapRouterData<&types::PaymentsCompleteAuthorizeRouterData>> .metadata .as_ref() .map(|metadata| BluesnapMetadata { - meta_data: Vec::::foreign_from(metadata.to_owned()), + meta_data: convert_metadata_to_request_metadata(metadata.to_owned()), }); let token = item @@ -745,10 +745,10 @@ pub struct BluesnapAuthType { pub(super) key1: Secret, } -impl TryFrom<&types::ConnectorAuthType> for BluesnapAuthType { +impl TryFrom<&ConnectorAuthType> for BluesnapAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { - if let types::ConnectorAuthType::BodyKey { api_key, key1 } = auth_type { + fn try_from(auth_type: &ConnectorAuthType) -> Result { + if let ConnectorAuthType::BodyKey { api_key, key1 } = auth_type { Ok(Self { api_key: api_key.to_owned(), key1: key1.to_owned(), @@ -855,26 +855,20 @@ pub struct ProcessingInfoResponse { pub network_transaction_id: Option>, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - BluesnapPaymentsResponse, - T, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { Ok(Self { status: enums::AttemptStatus::foreign_try_from(( item.response.card_transaction_type, item.response.processing_info.processing_status, ))?, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( item.response.transaction_id.clone(), ), redirection_data: Box::new(None), @@ -922,15 +916,15 @@ pub struct RefundResponse { refund_status: BluesnapRefundStatus, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.transaction_id.clone(), refund_status: enums::RefundStatus::from( item.response.processing_info.processing_status, @@ -941,15 +935,15 @@ impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.refund_transaction_id.to_string(), refund_status: enums::RefundStatus::from(item.response.refund_status), }), @@ -1003,7 +997,7 @@ pub enum BluesnapWebhookEvents { Unknown, } -impl TryFrom for api::IncomingWebhookEvent { +impl TryFrom for IncomingWebhookEvent { type Error = error_stack::Report; fn try_from(details: BluesnapWebhookObjectEventType) -> Result { match details.transaction_type { @@ -1035,7 +1029,7 @@ impl TryFrom for api::IncomingWebhookEvent { #[serde(rename_all = "camelCase")] pub struct BluesnapDisputeWebhookBody { pub invoice_charge_amount: f64, - pub currency: diesel_models::enums::Currency, + pub currency: enums::Currency, pub reversal_reason: Option, pub reversal_ref_num: String, pub cb_status: String, @@ -1125,7 +1119,7 @@ pub enum BluesnapErrors { } fn get_card_holder_info( - address: &hyperswitch_domain_models::address::AddressDetails, + address: &AddressDetails, email: Email, ) -> CustomResult, errors::ConnectorError> { let first_name = address.get_first_name()?; @@ -1145,18 +1139,16 @@ impl From for utils::ErrorCodeAndMessage { } } -impl ForeignFrom for Vec { - fn foreign_from(metadata: Value) -> Self { - let hashmap: HashMap, Option> = - serde_json::from_str(&metadata.to_string()).unwrap_or(HashMap::new()); - let mut vector: Self = Self::new(); - for (key, value) in hashmap { - vector.push(RequestMetadata { - meta_key: key, - meta_value: value.map(|field_value| field_value.to_string()), - is_visible: Some(DISPLAY_METADATA.to_string()), - }); - } - vector +fn convert_metadata_to_request_metadata(metadata: Value) -> Vec { + let hashmap: HashMap, Option> = + serde_json::from_str(&metadata.to_string()).unwrap_or(HashMap::new()); + let mut vector = Vec::::new(); + for (key, value) in hashmap { + vector.push(RequestMetadata { + meta_key: key, + meta_value: value.map(|field_value| field_value.to_string()), + is_visible: Some(DISPLAY_METADATA.to_string()), + }); } + vector } diff --git a/crates/router/src/connector/datatrans.rs b/crates/hyperswitch_connectors/src/connectors/datatrans.rs similarity index 69% rename from crates/router/src/connector/datatrans.rs rename to crates/hyperswitch_connectors/src/connectors/datatrans.rs index 24202b2196..081fedc6a3 100644 --- a/crates/router/src/connector/datatrans.rs +++ b/crates/hyperswitch_connectors/src/connectors/datatrans.rs @@ -1,29 +1,49 @@ pub mod transformers; -use api_models::enums::{CaptureMethod, PaymentMethodType}; -use base64::Engine; -use common_utils::types::{AmountConvertor, MinorUnit, MinorUnitForConnector}; -use error_stack::{report, ResultExt}; -use masking::PeekInterface; -use self::transformers as datatrans; -use super::{utils as connector_utils, utils::RefundsRequestData}; -use crate::{ - configs::settings, - consts, - core::errors::{self, CustomResult}, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorValidation, +use api_models::webhooks::{IncomingWebhookEvent, ObjectReferenceId}; +use base64::Engine; +use common_enums::{CaptureMethod, PaymentMethodType}; +use common_utils::{ + consts::BASE64_ENGINE, + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, + types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, +}; +use error_stack::{report, ResultExt}; +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, }, + router_request_types::{ + AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData, + PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData, + RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, RequestContent, Response, + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData, }, - utils::BytesExt, +}; +use hyperswitch_interfaces::{ + api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation}, + configs::Connectors, + errors, + events::connector_api_logs::ConnectorEvent, + types::{self, Response}, + webhooks::{IncomingWebhook, IncomingWebhookRequestDetails}, +}; +use masking::{Mask, PeekInterface}; +use transformers as datatrans; + +use crate::{ + constants::headers, + types::ResponseRouterData, + utils::{convert_amount, RefundsRequestData}, }; impl api::Payment for Datatrans {} @@ -52,12 +72,8 @@ impl Datatrans { } } -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Datatrans +impl ConnectorIntegration + for Datatrans { // Not Implemented (R) } @@ -68,9 +84,9 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), self.get_content_type().to_string().into(), @@ -94,18 +110,18 @@ impl ConnectorCommon for Datatrans { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.datatrans.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = datatrans::DatatransAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; let auth_key = format!("{}:{}", auth.merchant_id.peek(), auth.passcode.peek()); - let auth_header = format!("Basic {}", consts::BASE64_ENGINE.encode(auth_key)); + let auth_header = format!("Basic {}", BASE64_ENGINE.encode(auth_key)); Ok(vec![( headers::AUTHORIZATION.to_string(), auth_header.into_masked(), @@ -158,34 +174,23 @@ impl ConnectorValidation for Datatrans { } } -impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { //TODO: implement sessions flow } -impl ConnectorIntegration +impl ConnectorIntegration for Datatrans {} + +impl ConnectorIntegration for Datatrans { } -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Datatrans -{ -} - -impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -195,8 +200,8 @@ impl ConnectorIntegration CustomResult { let base_url = self.base_url(connectors); Ok(format!("{base_url}v1/transactions/authorize")) @@ -204,10 +209,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -219,12 +224,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsAuthorizeType::get_url( self, req, connectors, )?) @@ -241,17 +246,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: datatrans::DatatransResponse = res .response .parse_struct("Datatrans PaymentsAuthorizeResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -267,14 +272,12 @@ impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -284,8 +287,8 @@ impl ConnectorIntegration CustomResult { let connector_payment_id = req .request @@ -298,12 +301,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) @@ -313,17 +316,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: datatrans::DatatransSyncResponse = res .response .parse_struct("datatrans DatatransSyncResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -339,14 +342,12 @@ impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -356,8 +357,8 @@ impl ConnectorIntegration CustomResult { let connector_payment_id = req.request.connector_transaction_id.clone(); let base_url = self.base_url(connectors); @@ -368,10 +369,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount_to_capture, req.request.currency, @@ -383,12 +384,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsCaptureType::get_headers( @@ -403,10 +404,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response = if res.response.is_empty() { datatrans::DataTransCaptureResponse::Empty } else { @@ -416,7 +417,7 @@ impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -449,8 +448,8 @@ impl ConnectorIntegration CustomResult { let transaction_id = req.request.connector_transaction_id.clone(); let base_url = self.base_url(connectors); @@ -459,11 +458,11 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) @@ -476,10 +475,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response = if res.response.is_empty() { datatrans::DataTransCancelResponse::Empty } else { @@ -489,7 +488,7 @@ impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -522,8 +519,8 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { let transaction_id = req.request.connector_transaction_id.clone(); let base_url = self.base_url(connectors); @@ -532,10 +529,10 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_refund_amount, req.request.currency, @@ -547,11 +544,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundExecuteType::get_headers( @@ -566,10 +563,10 @@ impl ConnectorIntegration, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: datatrans::DatatransRefundsResponse = res .response .parse_struct("datatrans DatatransRefundsResponse") @@ -577,7 +574,7 @@ impl ConnectorIntegration - for Datatrans -{ +impl ConnectorIntegration for Datatrans { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -610,8 +605,8 @@ impl ConnectorIntegration CustomResult { let connector_refund_id = req.request.get_connector_refund_id()?; let base_url = self.base_url(connectors); @@ -620,12 +615,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundSyncType::get_headers(self, req, connectors)?) @@ -638,17 +633,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: datatrans::DatatransSyncResponse = res .response .parse_struct("datatrans DatatransSyncResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -665,24 +660,24 @@ impl ConnectorIntegration, - ) -> CustomResult { + _request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_event_type( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + _request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_resource_object( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } diff --git a/crates/router/src/connector/datatrans/transformers.rs b/crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs similarity index 75% rename from crates/router/src/connector/datatrans/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs index 7d52e64b4b..2ec76cb293 100644 --- a/crates/router/src/connector/datatrans/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/datatrans/transformers.rs @@ -1,20 +1,24 @@ -use std::fmt::Debug; - +use common_enums::enums; use common_utils::types::MinorUnit; +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::{PaymentsAuthorizeData, ResponseId}, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types, +}; +use hyperswitch_interfaces::errors; use masking::Secret; use serde::{Deserialize, Serialize}; use crate::{ - connector::{ - utils as connector_utils, - utils::{CardData, PaymentsAuthorizeRequestData}, - }, - core::errors, types::{ - self, - api::{self, enums}, - domain, - transformers::ForeignFrom, + PaymentsCancelResponseRouterData, PaymentsCaptureResponseRouterData, + PaymentsSyncResponseRouterData, RefundsResponseRouterData, ResponseRouterData, + }, + utils::{ + get_unimplemented_payment_method_error_message, CardData as _, PaymentsAuthorizeRequestData, }, }; @@ -159,7 +163,7 @@ impl TryFrom<&DatatransRouterData<&types::PaymentsAuthorizeRouterData>> item: &DatatransRouterData<&types::PaymentsAuthorizeRouterData>, ) -> Result { match item.router_data.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(req_card) => Ok(Self { + PaymentMethodData::Card(req_card) => Ok(Self { amount: item.amount, currency: item.router_data.request.currency, card: PlainCardDetails { @@ -174,36 +178,36 @@ impl TryFrom<&DatatransRouterData<&types::PaymentsAuthorizeRouterData>> Some(enums::CaptureMethod::Automatic) ), }), - domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( - connector_utils::get_unimplemented_payment_method_error_message("Datatrans"), + get_unimplemented_payment_method_error_message("Datatrans"), ))? } } } } -impl TryFrom<&types::ConnectorAuthType> for DatatransAuthType { +impl TryFrom<&ConnectorAuthType> for DatatransAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { + fn try_from(auth_type: &ConnectorAuthType) -> Result { match auth_type { - types::ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self { + ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self { merchant_id: key1.clone(), passcode: api_key.clone(), }), @@ -212,20 +216,19 @@ impl TryFrom<&types::ConnectorAuthType> for DatatransAuthType { } } -impl ForeignFrom<(&DatatransResponse, bool)> for enums::AttemptStatus { - fn foreign_from((item, is_auto_capture): (&DatatransResponse, bool)) -> Self { - match item { - DatatransResponse::ErrorResponse(_) => Self::Failure, - DatatransResponse::TransactionResponse(_) => { - if is_auto_capture { - Self::Charged - } else { - Self::Authorized - } +fn get_status(item: &DatatransResponse, is_auto_capture: bool) -> enums::AttemptStatus { + match item { + DatatransResponse::ErrorResponse(_) => enums::AttemptStatus::Failure, + DatatransResponse::TransactionResponse(_) => { + if is_auto_capture { + enums::AttemptStatus::Charged + } else { + enums::AttemptStatus::Authorized } } } } + impl From for enums::AttemptStatus { fn from(item: SyncResponse) -> Self { match item.res_type { @@ -258,30 +261,16 @@ impl From for enums::RefundStatus { } impl - TryFrom< - types::ResponseRouterData< - F, - DatatransResponse, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - >, - > for types::RouterData + TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - DatatransResponse, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { - let status = enums::AttemptStatus::foreign_from(( - &item.response, - item.data.request.is_auto_capture()?, - )); + let status = get_status(&item.response, item.data.request.is_auto_capture()?); let response = match &item.response { - DatatransResponse::ErrorResponse(error) => Err(types::ErrorResponse { + DatatransResponse::ErrorResponse(error) => Err(ErrorResponse { code: error.code.clone(), message: error.message.clone(), reason: Some(error.message.clone()), @@ -290,8 +279,8 @@ impl status_code: item.http_code, }), DatatransResponse::TransactionResponse(response) => { - Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( response.transaction_id.clone(), ), redirection_data: Box::new(None), @@ -325,16 +314,16 @@ impl TryFrom<&DatatransRouterData<&types::RefundsRouterData>> for Datatran } } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { match item.response { DatatransRefundsResponse::Error(error) => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: error.code.clone(), message: error.message.clone(), reason: Some(error.message), @@ -345,7 +334,7 @@ impl TryFrom Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: response.transaction_id, refund_status: enums::RefundStatus::Success, }), @@ -355,15 +344,15 @@ impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let response = match item.response { - DatatransSyncResponse::Error(error) => Err(types::ErrorResponse { + DatatransSyncResponse::Error(error) => Err(ErrorResponse { code: error.code.clone(), message: error.message.clone(), reason: Some(error.message), @@ -371,7 +360,7 @@ impl TryFrom connector_transaction_id: None, status_code: item.http_code, }), - DatatransSyncResponse::Response(response) => Ok(types::RefundsResponseData { + DatatransSyncResponse::Response(response) => Ok(RefundsResponseData { connector_refund_id: response.transaction_id.to_string(), refund_status: enums::RefundStatus::from(response), }), @@ -383,16 +372,16 @@ impl TryFrom } } -impl TryFrom> +impl TryFrom> for types::PaymentsSyncRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsSyncResponseRouterData, + item: PaymentsSyncResponseRouterData, ) -> Result { match item.response { DatatransSyncResponse::Error(error) => { - let response = Err(types::ErrorResponse { + let response = Err(ErrorResponse { code: error.code.clone(), message: error.message.clone(), reason: Some(error.message), @@ -407,10 +396,10 @@ impl TryFrom> } DatatransSyncResponse::Response(response) => { let resource_id = - types::ResponseId::ConnectorTransactionId(response.transaction_id.to_string()); + ResponseId::ConnectorTransactionId(response.transaction_id.to_string()); Ok(Self { status: enums::AttemptStatus::from(response), - response: Ok(types::PaymentsResponseData::TransactionResponse { + response: Ok(PaymentsResponseData::TransactionResponse { resource_id, redirection_data: Box::new(None), mandate_reference: Box::new(None), @@ -442,13 +431,13 @@ impl TryFrom<&DatatransRouterData<&types::PaymentsCaptureRouterData>> } } -impl TryFrom> +impl TryFrom> for types::PaymentsCaptureRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsCaptureResponseRouterData, + item: PaymentsCaptureResponseRouterData, ) -> Result { let status = match item.response { DataTransCaptureResponse::Error(error) => { @@ -475,13 +464,13 @@ impl TryFrom> } } -impl TryFrom> +impl TryFrom> for types::PaymentsCancelRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsCancelResponseRouterData, + item: PaymentsCancelResponseRouterData, ) -> Result { let status = match item.response { // Datatrans http code 204 implies Successful Cancellation diff --git a/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs b/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs index 25327358e7..d64c2ed8ef 100644 --- a/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/gocardless/transformers.rs @@ -1,10 +1,10 @@ -use api_models::enums::{CountryAlpha2, UsStatesAbbreviation}; -use common_enums::{AttemptStatus, Currency, RefundStatus}; +use common_enums::{enums, CountryAlpha2, UsStatesAbbreviation}; use common_utils::{ id_type, pii::{self, IpAddress}, }; use hyperswitch_domain_models::{ + address::AddressDetails, payment_method_data::{BankDebitData, PaymentMethodData}, router_data::{ConnectorAuthType, PaymentMethodToken, RouterData}, router_flow_types::refunds::Execute, @@ -32,10 +32,10 @@ pub struct GocardlessRouterData { pub router_data: T, } -impl TryFrom<(&api::CurrencyUnit, Currency, i64, T)> for GocardlessRouterData { +impl TryFrom<(&api::CurrencyUnit, enums::Currency, i64, T)> for GocardlessRouterData { type Error = error_stack::Report; fn try_from( - (_currency_unit, _currency, amount, item): (&api::CurrencyUnit, Currency, i64, T), + (_currency_unit, _currency, amount, item): (&api::CurrencyUnit, enums::Currency, i64, T), ) -> Result { Ok(Self { amount, @@ -111,7 +111,7 @@ impl TryFrom<&types::ConnectorCustomerRouterData> for GocardlessCustomerRequest } fn get_region( - address_details: &hyperswitch_domain_models::address::AddressDetails, + address_details: &AddressDetails, ) -> Result>, error_stack::Report> { match address_details.country { Some(CountryAlpha2::US) => { @@ -532,7 +532,7 @@ impl network_txn_id: None, charge_id: None, }), - status: AttemptStatus::Charged, + status: enums::AttemptStatus::Charged, ..item.data }) } @@ -546,7 +546,7 @@ pub struct GocardlessPaymentsRequest { #[derive(Debug, Serialize)] pub struct GocardlessPayment { amount: i64, - currency: Currency, + currency: enums::Currency, description: Option, metadata: PaymentMetaData, links: PaymentLink, @@ -625,7 +625,7 @@ pub enum GocardlessPaymentStatus { Failed, } -impl From for AttemptStatus { +impl From for enums::AttemptStatus { fn from(item: GocardlessPaymentStatus) -> Self { match item { GocardlessPaymentStatus::PendingCustomerApproval @@ -676,7 +676,7 @@ impl connector_mandate_request_reference_id: None, }; Ok(Self { - status: AttemptStatus::from(item.response.payments.status), + status: enums::AttemptStatus::from(item.response.payments.status), response: Ok(PaymentsResponseData::TransactionResponse { resource_id: ResponseId::ConnectorTransactionId(item.response.payments.id), redirection_data: Box::new(None), @@ -707,7 +707,7 @@ impl >, ) -> Result { Ok(Self { - status: AttemptStatus::from(item.response.payments.status), + status: enums::AttemptStatus::from(item.response.payments.status), response: Ok(PaymentsResponseData::TransactionResponse { resource_id: ResponseId::ConnectorTransactionId(item.response.payments.id), redirection_data: Box::new(None), @@ -780,7 +780,7 @@ impl TryFrom> Ok(Self { response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), - refund_status: RefundStatus::Pending, + refund_status: enums::RefundStatus::Pending, }), ..item.data }) diff --git a/crates/router/src/connector/paybox.rs b/crates/hyperswitch_connectors/src/connectors/paybox.rs similarity index 65% rename from crates/router/src/connector/paybox.rs rename to crates/hyperswitch_connectors/src/connectors/paybox.rs index 99959ca87e..4f85f31c69 100644 --- a/crates/router/src/connector/paybox.rs +++ b/crates/hyperswitch_connectors/src/connectors/paybox.rs @@ -1,34 +1,53 @@ pub mod transformers; -use common_enums::enums; -use common_utils::types::{AmountConvertor, MinorUnit, MinorUnitForConnector}; +use api_models::webhooks::{IncomingWebhookEvent, ObjectReferenceId}; +use common_enums::{enums, CallConnectorAction, PaymentAction}; +use common_utils::{ + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, + types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, +}; use error_stack::{report, ResultExt}; -use masking::ExposeInterface; +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + CompleteAuthorize, + }, + router_request_types::{ + AccessTokenRequestData, CompleteAuthorizeData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, + PaymentsSyncData, RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsSyncRouterData, RefundSyncRouterData, + RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorRedirectResponse, + ConnectorValidation, + }, + configs::Connectors, + errors, + events::connector_api_logs::ConnectorEvent, + types::{self, Response}, + webhooks::{IncomingWebhook, IncomingWebhookRequestDetails}, +}; +use masking::{ExposeInterface, Mask}; use transformers as paybox; -use super::utils::{ - RouterData, {self as connector_utils}, -}; use crate::{ - configs::settings, - connector::{utils, utils::PaymentMethodDataType}, - core::{ - errors::{self, CustomResult}, - payments, - }, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorValidation, - }, - types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, RequestContent, Response, - }, - utils::BytesExt, + constants::headers, + types::ResponseRouterData, + utils::{self, convert_amount, is_mandate_supported, PaymentMethodDataType, RouterData as _}, }; #[derive(Clone)] @@ -57,24 +76,18 @@ impl api::RefundExecute for Paybox {} impl api::RefundSync for Paybox {} impl api::PaymentToken for Paybox {} impl api::PaymentsCompleteAuthorize for Paybox {} -impl ConnectorIntegration - for Paybox -{ +impl ConnectorIntegration for Paybox { fn build_request( &self, - _req: &types::PaymentsCancelRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &PaymentsCancelRouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err(errors::ConnectorError::NotImplemented("Cancel/Void flow".to_string()).into()) } } -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Paybox +impl ConnectorIntegration + for Paybox { } @@ -84,9 +97,9 @@ where { fn build_headers( &self, - _req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let header = vec![( headers::CONTENT_TYPE.to_string(), self.get_content_type().to_string().into(), @@ -104,14 +117,14 @@ impl ConnectorCommon for Paybox { "application/x-www-form-urlencoded" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.paybox.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = paybox::PayboxAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -163,39 +176,24 @@ impl ConnectorValidation for Paybox { fn validate_mandate_payment( &self, pm_type: Option, - pm_data: types::domain::payments::PaymentMethodData, + pm_data: PaymentMethodData, ) -> CustomResult<(), errors::ConnectorError> { let mandate_supported_pmd = std::collections::HashSet::from([PaymentMethodDataType::Card]); - connector_utils::is_mandate_supported(pm_data, pm_type, mandate_supported_pmd, self.id()) + is_mandate_supported(pm_data, pm_type, mandate_supported_pmd, self.id()) } } -impl ConnectorIntegration - for Paybox -{ -} +impl ConnectorIntegration for Paybox {} -impl ConnectorIntegration - for Paybox -{ -} +impl ConnectorIntegration for Paybox {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Paybox -{ -} -impl ConnectorIntegration - for Paybox -{ +impl ConnectorIntegration for Paybox {} +impl ConnectorIntegration for Paybox { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -205,8 +203,8 @@ impl ConnectorIntegration CustomResult { if req.is_three_ds() { Ok(format!( @@ -220,10 +218,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -236,12 +234,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsAuthorizeType::get_url( self, req, connectors, )?) @@ -255,15 +253,15 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: paybox::PayboxResponse = paybox::parse_paybox_response(res.response, data.is_three_ds())?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -279,14 +277,12 @@ impl ConnectorIntegration - for Paybox -{ +impl ConnectorIntegration for Paybox { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -295,28 +291,28 @@ impl ConnectorIntegration CustomResult { let connector_req = paybox::PayboxPSyncRequest::try_from(req)?; Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) } fn get_url( &self, - _req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, + _req: &PaymentsSyncRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn build_request( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() .set_body(types::PaymentsSyncType::get_request_body( @@ -328,15 +324,15 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: paybox::PayboxSyncResponse = paybox::parse_url_encoded_to_struct(res.response)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -352,14 +348,12 @@ impl ConnectorIntegration - for Paybox -{ +impl ConnectorIntegration for Paybox { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -369,18 +363,18 @@ impl ConnectorIntegration CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCaptureRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount_to_capture, req.request.currency, @@ -393,12 +387,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() .set_body(types::PaymentsCaptureType::get_request_body( @@ -410,16 +404,16 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: paybox::PayboxCaptureResponse = paybox::parse_url_encoded_to_struct(res.response)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -435,12 +429,12 @@ impl ConnectorIntegration for Paybox { +impl ConnectorIntegration for Paybox { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -450,18 +444,18 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + _req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { - let refund_amount = connector_utils::convert_amount( + let refund_amount = convert_amount( self.amount_converter, req.request.minor_refund_amount, req.request.currency, @@ -474,11 +468,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() .set_body(types::RefundExecuteType::get_request_body( @@ -490,15 +484,15 @@ impl ConnectorIntegration, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: paybox::TransactionResponse = paybox::parse_url_encoded_to_struct(res.response)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -514,12 +508,12 @@ impl ConnectorIntegration for Paybox { +impl ConnectorIntegration for Paybox { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -529,16 +523,16 @@ impl ConnectorIntegration CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::RefundSyncRouterData, - _connectors: &settings::Connectors, + req: &RefundSyncRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = paybox::PayboxRsyncRequest::try_from(req)?; Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) @@ -546,12 +540,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() .set_body(types::RefundSyncType::get_request_body( @@ -563,15 +557,15 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: paybox::PayboxSyncResponse = paybox::parse_url_encoded_to_struct(res.response)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -588,41 +582,37 @@ impl ConnectorIntegration, - ) -> CustomResult { + _request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_event_type( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + _request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_resource_object( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } } -impl - ConnectorIntegration< - api::CompleteAuthorize, - types::CompleteAuthorizeData, - types::PaymentsResponseData, - > for Paybox +impl ConnectorIntegration + for Paybox { fn get_headers( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_content_type(&self) -> &'static str { @@ -630,17 +620,17 @@ impl } fn get_url( &self, - _req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, + _req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCompleteAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -652,12 +642,12 @@ impl } fn build_request( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsCompleteAuthorizeType::get_url( self, req, connectors, )?) @@ -672,15 +662,15 @@ impl } fn handle_response( &self, - data: &types::PaymentsCompleteAuthorizeRouterData, + data: &PaymentsCompleteAuthorizeRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: paybox::TransactionResponse = paybox::parse_url_encoded_to_struct(res.response)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -695,18 +685,18 @@ impl self.build_error_response(res, event_builder) } } -impl services::ConnectorRedirectResponse for Paybox { +impl ConnectorRedirectResponse for Paybox { fn get_flow_type( &self, _query_params: &str, _json_payload: Option, - action: services::PaymentAction, - ) -> CustomResult { + action: PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::CompleteAuthorize - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + PaymentAction::PSync + | PaymentAction::CompleteAuthorize + | PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(CallConnectorAction::Trigger) } } } diff --git a/crates/router/src/connector/paybox/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs similarity index 90% rename from crates/router/src/connector/paybox/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs index 80e3e0ef07..effe6df28d 100644 --- a/crates/router/src/connector/paybox/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/paybox/transformers.rs @@ -1,25 +1,34 @@ use api_models::payments::AdditionalPaymentData; use bytes::Bytes; +use common_enums::enums; use common_utils::{ date_time::DateFormat, errors::CustomResult, ext_traits::ValueExt, types::MinorUnit, }; use error_stack::ResultExt; -use hyperswitch_connectors::utils::{AddressDetailsData, CardData}; use hyperswitch_domain_models::{ - router_data::ConnectorAuthType, router_response_types::RedirectForm, + payment_method_data::PaymentMethodData, + router_data::{ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::{CompleteAuthorizeData, PaymentsAuthorizeData, ResponseId}, + router_response_types::{ + MandateReference, PaymentsResponseData, RedirectForm, RefundsResponseData, + }, + types, +}; +use hyperswitch_interfaces::{ + consts::{NO_ERROR_CODE, NO_ERROR_MESSAGE}, + errors, }; -use hyperswitch_interfaces::consts; use masking::{ExposeInterface, PeekInterface, Secret}; use serde::{de::DeserializeOwned, Deserialize, Serialize}; use crate::{ - connector::utils::{ - self, PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData, RouterData, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{ + self, AddressDetailsData, CardData as _, PaymentsAuthorizeRequestData, + PaymentsCompleteAuthorizeRequestData, RouterData as _, }, - core::errors, - types::{self, api, domain, storage::enums, MandateReference}, }; - pub struct PayboxRouterData { pub amount: MinorUnit, pub router_data: T, @@ -189,7 +198,7 @@ impl TryFrom<&PayboxRouterData<&types::PaymentsCaptureRouterData>> for PayboxCap let auth_data: PayboxAuthType = PayboxAuthType::try_from(&item.router_data.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; - let currency = item.router_data.request.currency.iso_4217().to_string(); + let currency = enums::Currency::iso_4217(item.router_data.request.currency).to_string(); let paybox_meta_data: PayboxMeta = utils::to_connector_meta(item.router_data.request.connector_meta.clone())?; let format_time = common_utils::date_time::format_date( @@ -378,7 +387,7 @@ impl TryFrom<&PayboxRouterData<&types::PaymentsAuthorizeRouterData>> for PayboxP item: &PayboxRouterData<&types::PaymentsAuthorizeRouterData>, ) -> Result { match item.router_data.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(req_card) => { + PaymentMethodData::Card(req_card) => { let auth_data: PayboxAuthType = PayboxAuthType::try_from(&item.router_data.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; @@ -386,7 +395,8 @@ impl TryFrom<&PayboxRouterData<&types::PaymentsAuthorizeRouterData>> for PayboxP item.router_data.request.capture_method, item.router_data.request.is_mandate_payment(), )?; - let currency = item.router_data.request.currency.iso_4217().to_string(); + let currency = + enums::Currency::iso_4217(item.router_data.request.currency).to_string(); let expiration_date = req_card.get_card_expiry_month_year_2_digit_with_delimiter("".to_owned())?; let format_time = common_utils::date_time::format_date( @@ -453,7 +463,7 @@ impl TryFrom<&PayboxRouterData<&types::PaymentsAuthorizeRouterData>> for PayboxP })) } } - domain::PaymentMethodData::MandatePayment => { + PaymentMethodData::MandatePayment => { let mandate_data = extract_card_mandate_info( item.router_data .request @@ -667,23 +677,20 @@ pub struct PayboxCaptureResponse { pub response_message: String, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { let response = item.response.clone(); let status = get_status_of_request(response.response_code.clone()); match status { true => Ok(Self { status: enums::AttemptStatus::Charged, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - response.paybox_order_id, - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(response.paybox_order_id), redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: Some(serde_json::json!(PayboxMeta { @@ -698,7 +705,7 @@ impl ..item.data }), false => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: response.response_code.clone(), message: response.response_message.clone(), reason: Some(response.response_message), @@ -712,24 +719,12 @@ impl } } -impl - TryFrom< - types::ResponseRouterData< - F, - PayboxResponse, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - >, - > for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - PayboxResponse, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { match item.response.clone() { PayboxResponse::NonThreeDs(response) => { @@ -743,8 +738,8 @@ impl (_, true) | (false, false) => enums::AttemptStatus::Authorized, (true, false) => enums::AttemptStatus::Charged, }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( response.paybox_order_id, ), redirection_data: Box::new(None), @@ -768,7 +763,7 @@ impl ..item.data }), false => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: response.response_code.clone(), message: response.response_message.clone(), reason: Some(response.response_message), @@ -782,8 +777,8 @@ impl } PayboxResponse::ThreeDs(data) => Ok(Self { status: enums::AttemptStatus::AuthenticationPending, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::NoResponseId, + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::NoResponseId, redirection_data: Box::new(Some(RedirectForm::Html { html_data: data.peek().to_string(), })), @@ -797,10 +792,10 @@ impl ..item.data }), PayboxResponse::Error(_) => Ok(Self { - response: Err(types::ErrorResponse { - code: consts::NO_ERROR_CODE.to_string(), - message: consts::NO_ERROR_MESSAGE.to_string(), - reason: Some(consts::NO_ERROR_MESSAGE.to_string()), + response: Err(ErrorResponse { + code: NO_ERROR_CODE.to_string(), + message: NO_ERROR_MESSAGE.to_string(), + reason: Some(NO_ERROR_MESSAGE.to_string()), status_code: item.http_code, attempt_status: None, connector_transaction_id: None, @@ -811,12 +806,12 @@ impl } } -impl TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { let response = item.response.clone(); let status = get_status_of_request(response.response_code.clone()); @@ -825,10 +820,8 @@ impl TryFrom Ok(Self { status: enums::AttemptStatus::from(connector_payment_status), - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - response.paybox_order_id, - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(response.paybox_order_id), redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: Some(serde_json::json!(PayboxMeta { @@ -842,7 +835,7 @@ impl TryFrom Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: response.response_code.clone(), message: response.response_message.clone(), reason: Some(response.response_message), @@ -889,7 +882,7 @@ impl TryFrom<&PayboxRouterData<&types::RefundsRouterData>> for PayboxRefun let auth_data: PayboxAuthType = PayboxAuthType::try_from(&item.router_data.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; - let currency = item.router_data.request.currency.iso_4217().to_string(); + let currency = enums::Currency::iso_4217(item.router_data.request.currency).to_string(); let format_time = common_utils::date_time::format_date( common_utils::date_time::now(), DateFormat::DDMMYYYYHHmmss, @@ -913,24 +906,24 @@ impl TryFrom<&PayboxRouterData<&types::RefundsRouterData>> for PayboxRefun } } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let status = get_status_of_request(item.response.response_code.clone()); match status { true => Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.transaction_number, refund_status: enums::RefundStatus::from(item.response.status), }), ..item.data }), false => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: item.response.response_code.clone(), message: item.response.response_message.clone(), reason: Some(item.response.response_message), @@ -944,24 +937,24 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let status = get_status_of_request(item.response.response_code.clone()); match status { true => Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.transaction_number, refund_status: common_enums::RefundStatus::Pending, }), ..item.data }), false => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: item.response.response_code.clone(), message: item.response.response_message.clone(), reason: Some(item.response.response_message), @@ -983,22 +976,16 @@ pub struct PayboxErrorResponse { } impl - TryFrom< - types::ResponseRouterData< - F, - TransactionResponse, - types::CompleteAuthorizeData, - types::PaymentsResponseData, - >, - > for types::RouterData + TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, TransactionResponse, - types::CompleteAuthorizeData, - types::PaymentsResponseData, + CompleteAuthorizeData, + PaymentsResponseData, >, ) -> Result { let response = item.response.clone(); @@ -1012,10 +999,8 @@ impl (_, true) | (false, false) => enums::AttemptStatus::Authorized, (true, false) => enums::AttemptStatus::Charged, }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - response.paybox_order_id, - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(response.paybox_order_id), redirection_data: Box::new(None), mandate_reference: Box::new(response.carrier_id.as_ref().map(|pm| { MandateReference { @@ -1038,7 +1023,7 @@ impl ..item.data }), false => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: response.response_code.clone(), message: response.response_message.clone(), reason: Some(response.response_message), @@ -1078,7 +1063,7 @@ impl TryFrom<&PayboxRouterData<&types::PaymentsCompleteAuthorizeRouterData>> for .parse_value("RedirectionAuthResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; match item.router_data.request.payment_method_data.clone() { - Some(domain::PaymentMethodData::Card(req_card)) => { + Some(PaymentMethodData::Card(req_card)) => { let auth_data: PayboxAuthType = PayboxAuthType::try_from(&item.router_data.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; @@ -1086,7 +1071,8 @@ impl TryFrom<&PayboxRouterData<&types::PaymentsCompleteAuthorizeRouterData>> for item.router_data.request.capture_method, item.router_data.request.is_mandate_payment(), )?; - let currency = item.router_data.request.currency.iso_4217().to_string(); + let currency = + enums::Currency::iso_4217(item.router_data.request.currency).to_string(); let expiration_date = req_card.get_card_expiry_month_year_2_digit_with_delimiter("".to_owned())?; let format_time = common_utils::date_time::format_date( @@ -1201,7 +1187,7 @@ impl Some(enums::CaptureMethod::Manual) => Ok(MANDATE_AUTH_ONLY.to_string()), _ => Err(errors::ConnectorError::CaptureMethodNotSupported), }?; - let currency = item.router_data.request.currency.iso_4217().to_string(); + let currency = enums::Currency::iso_4217(item.router_data.request.currency).to_string(); let format_time = common_utils::date_time::format_date( common_utils::date_time::now(), DateFormat::DDMMYYYYHHmmss, diff --git a/crates/router/src/connector/placetopay.rs b/crates/hyperswitch_connectors/src/connectors/placetopay.rs similarity index 67% rename from crates/router/src/connector/placetopay.rs rename to crates/hyperswitch_connectors/src/connectors/placetopay.rs index c6cc244024..5f8426e75b 100644 --- a/crates/router/src/connector/placetopay.rs +++ b/crates/hyperswitch_connectors/src/connectors/placetopay.rs @@ -1,29 +1,46 @@ pub mod transformers; +use api_models::webhooks::{IncomingWebhookEvent, ObjectReferenceId}; +use common_enums::enums; use common_utils::{ - request::RequestContent, + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, }; use error_stack::{report, ResultExt}; +use hyperswitch_domain_models::{ + router_data::{AccessToken, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + }, + router_request_types::{ + AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData, + PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData, + RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation}, + configs::Connectors, + errors, + events::connector_api_logs::ConnectorEvent, + types::{self, Response}, + webhooks::{IncomingWebhook, IncomingWebhookRequestDetails}, +}; use transformers as placetopay; use crate::{ - configs::settings, - connector::utils as connector_utils, - core::errors::{self, CustomResult}, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self}, - ConnectorIntegration, ConnectorValidation, - }, - types::{ - self, - api::{self, enums, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, - }, - utils::BytesExt, + constants::headers, + types::ResponseRouterData, + utils::{construct_not_supported_error_report, convert_amount}, }; #[derive(Clone)] @@ -52,12 +69,8 @@ impl api::RefundExecute for Placetopay {} impl api::RefundSync for Placetopay {} impl api::PaymentToken for Placetopay {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Placetopay +impl ConnectorIntegration + for Placetopay { // Not Implemented (R) } @@ -68,9 +81,9 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), self.get_content_type().to_string().into(), @@ -94,7 +107,7 @@ impl ConnectorCommon for Placetopay { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.placetopay.base_url.as_ref() } @@ -133,39 +146,26 @@ impl ConnectorValidation for Placetopay { enums::CaptureMethod::Automatic | enums::CaptureMethod::SequentialAutomatic => Ok(()), enums::CaptureMethod::Manual | enums::CaptureMethod::ManualMultiple - | enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_supported_error_report(capture_method, self.id()), - ), + | enums::CaptureMethod::Scheduled => Err(construct_not_supported_error_report( + capture_method, + self.id(), + )), } } } -impl ConnectorIntegration - for Placetopay -{ -} +impl ConnectorIntegration for Placetopay {} -impl ConnectorIntegration - for Placetopay -{ -} +impl ConnectorIntegration for Placetopay {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Placetopay +impl ConnectorIntegration + for Placetopay { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Placetopay".to_string()) .into(), @@ -173,14 +173,12 @@ impl } } -impl ConnectorIntegration - for Placetopay -{ +impl ConnectorIntegration for Placetopay { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -190,18 +188,18 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/process", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -213,12 +211,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsAuthorizeType::get_url( self, req, connectors, )?) @@ -235,10 +233,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: placetopay::PlacetopayPaymentsResponse = res .response .parse_struct("Placetopay PlacetopayPaymentsResponse") @@ -247,7 +245,7 @@ impl ConnectorIntegration - for Placetopay -{ +impl ConnectorIntegration for Placetopay { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -280,16 +276,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/query", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsSyncRouterData, - _connectors: &settings::Connectors, + req: &PaymentsSyncRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_obj = placetopay::PlacetopayPsyncRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -297,12 +293,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) @@ -315,10 +311,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: placetopay::PlacetopayPaymentsResponse = res .response .parse_struct("placetopay PaymentsSyncResponse") @@ -327,7 +323,7 @@ impl ConnectorIntegration - for Placetopay -{ +impl ConnectorIntegration for Placetopay { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -360,16 +354,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/transaction", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCaptureRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_obj = placetopay::PlacetopayNextActionRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -377,12 +371,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsCaptureType::get_headers( @@ -397,10 +391,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: placetopay::PlacetopayPaymentsResponse = res .response .parse_struct("Placetopay PaymentsCaptureResponse") @@ -409,7 +403,7 @@ impl ConnectorIntegration - for Placetopay -{ +impl ConnectorIntegration for Placetopay { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -442,16 +434,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/transaction", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsCancelRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCancelRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_obj = placetopay::PlacetopayNextActionRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -459,12 +451,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) @@ -477,10 +469,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: placetopay::PlacetopayPaymentsResponse = res .response .parse_struct("Placetopay PaymentCancelResponse") @@ -489,7 +481,7 @@ impl ConnectorIntegration - for Placetopay -{ +impl ConnectorIntegration for Placetopay { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -522,16 +512,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + _req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}/transaction", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_obj = placetopay::PlacetopayRefundRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -539,11 +529,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundExecuteType::get_headers( @@ -558,10 +548,10 @@ impl ConnectorIntegration, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: placetopay::PlacetopayRefundResponse = res .response .parse_struct("placetopay PlacetopayRefundResponse") @@ -570,7 +560,7 @@ impl ConnectorIntegration - for Placetopay -{ +impl ConnectorIntegration for Placetopay { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -603,16 +591,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/query", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_obj = placetopay::PlacetopayRsyncRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(req_obj))) @@ -620,12 +608,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundSyncType::get_headers(self, req, connectors)?) @@ -638,10 +626,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: placetopay::PlacetopayRefundResponse = res .response .parse_struct("placetopay PlacetopayRefundResponse") @@ -650,7 +638,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + _request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_event_type( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + _request: &IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_resource_object( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } diff --git a/crates/router/src/connector/placetopay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/placetopay/transformers.rs similarity index 81% rename from crates/router/src/connector/placetopay/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/placetopay/transformers.rs index d809b9e770..e51093c28d 100644 --- a/crates/router/src/connector/placetopay/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/placetopay/transformers.rs @@ -1,18 +1,25 @@ -use common_utils::{date_time, types::MinorUnit}; -use diesel_models::enums; +use common_enums::{enums, Currency}; +use common_utils::{consts::BASE64_ENGINE, date_time, types::MinorUnit}; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{ConnectorAuthType, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::ResponseId, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types, +}; +use hyperswitch_interfaces::errors; use masking::{PeekInterface, Secret}; use ring::digest; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::{ - self, BrowserInformationData, CardData, PaymentsAuthorizeRequestData, - PaymentsSyncRequestData, RouterData, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{ + self, generate_random_bytes, BrowserInformationData, CardData as _, + PaymentsAuthorizeRequestData, PaymentsSyncRequestData, RouterData as _, }, - consts, - core::errors, - types::{self, api, domain, storage::enums as storage_enums}, }; pub struct PlacetopayRouterData { @@ -72,7 +79,7 @@ pub struct PlacetopayPayment { #[derive(Debug, Serialize)] #[serde(rename_all = "camelCase")] pub struct PlacetopayAmount { - currency: storage_enums::Currency, + currency: Currency, total: MinorUnit, } @@ -110,7 +117,7 @@ impl TryFrom<&PlacetopayRouterData<&types::PaymentsAuthorizeRouterData>> }, }; match item.router_data.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(req_card) => { + PaymentMethodData::Card(req_card) => { let card = PlacetopayCard { number: req_card.card_number.clone(), expiration: req_card @@ -128,24 +135,24 @@ impl TryFrom<&PlacetopayRouterData<&types::PaymentsAuthorizeRouterData>> }, }) } - domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::Wallet(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("Placetopay"), ) @@ -155,11 +162,11 @@ impl TryFrom<&PlacetopayRouterData<&types::PaymentsAuthorizeRouterData>> } } -impl TryFrom<&types::ConnectorAuthType> for PlacetopayAuth { +impl TryFrom<&ConnectorAuthType> for PlacetopayAuth { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { + fn try_from(auth_type: &ConnectorAuthType) -> Result { let placetopay_auth = PlacetopayAuthType::try_from(auth_type)?; - let nonce_bytes = utils::generate_random_bytes(16); + let nonce_bytes = generate_random_bytes(16); let now = date_time::date_as_yyyymmddthhmmssmmmz() .change_context(errors::ConnectorError::RequestEncodingFailed)?; let seed = format!("{}+00:00", now.split_at(now.len() - 5).0); @@ -167,8 +174,8 @@ impl TryFrom<&types::ConnectorAuthType> for PlacetopayAuth { context.update(&nonce_bytes); context.update(seed.as_bytes()); context.update(placetopay_auth.tran_key.peek().as_bytes()); - let encoded_digest = base64::Engine::encode(&consts::BASE64_ENGINE, context.finish()); - let nonce = Secret::new(base64::Engine::encode(&consts::BASE64_ENGINE, &nonce_bytes)); + let encoded_digest = base64::Engine::encode(&BASE64_ENGINE, context.finish()); + let nonce = Secret::new(base64::Engine::encode(&BASE64_ENGINE, &nonce_bytes)); Ok(Self { login: placetopay_auth.login, tran_key: encoded_digest.into(), @@ -178,11 +185,11 @@ impl TryFrom<&types::ConnectorAuthType> for PlacetopayAuth { } } -impl TryFrom<&types::ConnectorAuthType> for PlacetopayAuthType { +impl TryFrom<&ConnectorAuthType> for PlacetopayAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { - if let types::ConnectorAuthType::BodyKey { api_key, key1 } = auth_type { + fn try_from(auth_type: &ConnectorAuthType) -> Result { + if let ConnectorAuthType::BodyKey { api_key, key1 } = auth_type { Ok(Self { login: api_key.to_owned(), tran_key: key1.to_owned(), @@ -244,24 +251,17 @@ pub struct PlacetopayPaymentsResponse { authorization: Option, } -impl - TryFrom< - types::ResponseRouterData, - > for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - PlacetopayPaymentsResponse, - T, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { Ok(Self { status: enums::AttemptStatus::from(item.response.status.status), - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( item.response.internal_reference.to_string(), ), redirection_data: Box::new(None), @@ -374,15 +374,15 @@ pub struct PlacetopayRefundResponse { internal_reference: u64, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.internal_reference.to_string(), refund_status: enums::RefundStatus::from(item.response.status.status), }), @@ -398,9 +398,9 @@ pub struct PlacetopayRsyncRequest { internal_reference: u64, } -impl TryFrom<&types::RefundsRouterData> for PlacetopayRsyncRequest { +impl TryFrom<&types::RefundsRouterData> for PlacetopayRsyncRequest { type Error = error_stack::Report; - fn try_from(item: &types::RefundsRouterData) -> Result { + fn try_from(item: &types::RefundsRouterData) -> Result { let auth = PlacetopayAuth::try_from(&item.connector_auth_type)?; let internal_reference = item .request @@ -414,15 +414,15 @@ impl TryFrom<&types::RefundsRouterData> for PlacetopayRsyncRequest { } } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.internal_reference.to_string(), refund_status: enums::RefundStatus::from(item.response.status.status), }), diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs index aaaeecb50e..041e519acd 100644 --- a/crates/hyperswitch_connectors/src/default_implementations.rs +++ b/crates/hyperswitch_connectors/src/default_implementations.rs @@ -95,10 +95,12 @@ default_imp_for_authorize_session_token!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -116,8 +118,10 @@ default_imp_for_authorize_session_token!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -160,10 +164,12 @@ default_imp_for_calculate_tax!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -181,10 +187,12 @@ default_imp_for_calculate_tax!( connectors::Multisafepay, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Nomupay, connectors::Novalnet, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Rapyd, @@ -225,10 +233,12 @@ default_imp_for_session_update!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Digitalvirgo, connectors::Dlocal, connectors::Elavon, @@ -251,8 +261,10 @@ default_imp_for_session_update!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::UnifiedAuthenticationService, connectors::Fiuu, connectors::Globepay, @@ -290,11 +302,13 @@ default_imp_for_post_session_tokens!( connectors::Bambora, connectors::Bamboraapac, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Billwerk, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Digitalvirgo, connectors::Dlocal, connectors::Elavon, @@ -317,8 +331,10 @@ default_imp_for_post_session_tokens!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Fiuu, connectors::Globepay, connectors::Gocardless, @@ -361,6 +377,7 @@ default_imp_for_complete_authorize!( connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Dlocal, connectors::Elavon, connectors::Fiserv, @@ -378,6 +395,7 @@ default_imp_for_complete_authorize!( connectors::Nexinets, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Rapyd, connectors::Razorpay, connectors::Redsys, @@ -416,10 +434,12 @@ default_imp_for_incremental_authorization!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -437,8 +457,10 @@ default_imp_for_incremental_authorization!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -483,10 +505,12 @@ default_imp_for_create_customer!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -505,8 +529,10 @@ default_imp_for_create_customer!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Rapyd, @@ -552,6 +578,7 @@ default_imp_for_connector_redirect_response!( connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Dlocal, connectors::Elavon, @@ -570,6 +597,7 @@ default_imp_for_connector_redirect_response!( connectors::Nomupay, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Rapyd, @@ -609,10 +637,12 @@ default_imp_for_pre_processing_steps!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -628,8 +658,10 @@ default_imp_for_pre_processing_steps!( connectors::Nomupay, connectors::Novalnet, connectors::Nexinets, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -673,10 +705,12 @@ default_imp_for_post_processing_steps!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -694,8 +728,10 @@ default_imp_for_post_processing_steps!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -740,10 +776,12 @@ default_imp_for_approve!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -761,8 +799,10 @@ default_imp_for_approve!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -807,10 +847,12 @@ default_imp_for_reject!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -828,8 +870,10 @@ default_imp_for_reject!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -874,10 +918,12 @@ default_imp_for_webhook_source_verification!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -895,8 +941,10 @@ default_imp_for_webhook_source_verification!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -942,10 +990,12 @@ default_imp_for_accept_dispute!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -963,8 +1013,10 @@ default_imp_for_accept_dispute!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1009,10 +1061,12 @@ default_imp_for_submit_evidence!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1030,8 +1084,10 @@ default_imp_for_submit_evidence!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1076,10 +1132,12 @@ default_imp_for_defend_dispute!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1097,8 +1155,10 @@ default_imp_for_defend_dispute!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1152,10 +1212,12 @@ default_imp_for_file_upload!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1173,8 +1235,10 @@ default_imp_for_file_upload!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1212,9 +1276,11 @@ default_imp_for_payouts!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Cryptopay, + connectors::Datatrans, connectors::Coinbase, connectors::Deutschebank, connectors::Digitalvirgo, @@ -1233,10 +1299,12 @@ default_imp_for_payouts!( connectors::Multisafepay, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Nomupay, connectors::Novalnet, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Rapyd, @@ -1280,10 +1348,12 @@ default_imp_for_payouts_create!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1301,8 +1371,10 @@ default_imp_for_payouts_create!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1349,10 +1421,12 @@ default_imp_for_payouts_retrieve!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1370,8 +1444,10 @@ default_imp_for_payouts_retrieve!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1418,10 +1494,12 @@ default_imp_for_payouts_eligibility!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1439,8 +1517,10 @@ default_imp_for_payouts_eligibility!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1487,10 +1567,12 @@ default_imp_for_payouts_fulfill!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1508,8 +1590,10 @@ default_imp_for_payouts_fulfill!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1556,10 +1640,12 @@ default_imp_for_payouts_cancel!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1577,8 +1663,10 @@ default_imp_for_payouts_cancel!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1625,10 +1713,12 @@ default_imp_for_payouts_quote!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1646,8 +1736,10 @@ default_imp_for_payouts_quote!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1694,10 +1786,12 @@ default_imp_for_payouts_recipient!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1715,8 +1809,10 @@ default_imp_for_payouts_recipient!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1763,10 +1859,12 @@ default_imp_for_payouts_recipient_account!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1784,8 +1882,10 @@ default_imp_for_payouts_recipient_account!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1832,10 +1932,12 @@ default_imp_for_frm_sale!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1853,8 +1955,10 @@ default_imp_for_frm_sale!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1901,10 +2005,12 @@ default_imp_for_frm_checkout!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1922,8 +2028,10 @@ default_imp_for_frm_checkout!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1970,10 +2078,12 @@ default_imp_for_frm_transaction!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1991,8 +2101,10 @@ default_imp_for_frm_transaction!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -2039,10 +2151,12 @@ default_imp_for_frm_fulfillment!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -2060,8 +2174,10 @@ default_imp_for_frm_fulfillment!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -2108,10 +2224,12 @@ default_imp_for_frm_record_return!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -2129,8 +2247,10 @@ default_imp_for_frm_record_return!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -2174,10 +2294,12 @@ default_imp_for_revoking_mandates!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -2195,8 +2317,10 @@ default_imp_for_revoking_mandates!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs index 10a5fea8c4..33c45a5422 100644 --- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs +++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs @@ -211,10 +211,12 @@ default_imp_for_new_connector_integration_payment!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -232,8 +234,10 @@ default_imp_for_new_connector_integration_payment!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -279,10 +283,12 @@ default_imp_for_new_connector_integration_refund!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -300,8 +306,10 @@ default_imp_for_new_connector_integration_refund!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -342,10 +350,12 @@ default_imp_for_new_connector_integration_connector_access_token!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -363,8 +373,10 @@ default_imp_for_new_connector_integration_connector_access_token!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -411,10 +423,12 @@ default_imp_for_new_connector_integration_accept_dispute!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -432,8 +446,10 @@ default_imp_for_new_connector_integration_accept_dispute!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -479,10 +495,12 @@ default_imp_for_new_connector_integration_submit_evidence!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -500,8 +518,10 @@ default_imp_for_new_connector_integration_submit_evidence!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -547,10 +567,12 @@ default_imp_for_new_connector_integration_defend_dispute!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -568,8 +590,10 @@ default_imp_for_new_connector_integration_defend_dispute!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -625,10 +649,12 @@ default_imp_for_new_connector_integration_file_upload!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -646,8 +672,10 @@ default_imp_for_new_connector_integration_file_upload!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -695,10 +723,12 @@ default_imp_for_new_connector_integration_payouts_create!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -716,8 +746,10 @@ default_imp_for_new_connector_integration_payouts_create!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -765,10 +797,12 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -786,8 +820,10 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -835,10 +871,12 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -856,8 +894,10 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -905,10 +945,12 @@ default_imp_for_new_connector_integration_payouts_cancel!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -926,8 +968,10 @@ default_imp_for_new_connector_integration_payouts_cancel!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -975,10 +1019,12 @@ default_imp_for_new_connector_integration_payouts_quote!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -996,8 +1042,10 @@ default_imp_for_new_connector_integration_payouts_quote!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1045,10 +1093,12 @@ default_imp_for_new_connector_integration_payouts_recipient!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1066,8 +1116,10 @@ default_imp_for_new_connector_integration_payouts_recipient!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1115,10 +1167,12 @@ default_imp_for_new_connector_integration_payouts_sync!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1136,8 +1190,10 @@ default_imp_for_new_connector_integration_payouts_sync!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1185,10 +1241,12 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1206,8 +1264,10 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1253,10 +1313,12 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1274,8 +1336,10 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1323,10 +1387,12 @@ default_imp_for_new_connector_integration_frm_sale!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1344,8 +1410,10 @@ default_imp_for_new_connector_integration_frm_sale!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1393,10 +1461,12 @@ default_imp_for_new_connector_integration_frm_checkout!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1414,8 +1484,10 @@ default_imp_for_new_connector_integration_frm_checkout!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1463,10 +1535,12 @@ default_imp_for_new_connector_integration_frm_transaction!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1484,8 +1558,10 @@ default_imp_for_new_connector_integration_frm_transaction!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1533,10 +1609,12 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1554,8 +1632,10 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1603,10 +1683,12 @@ default_imp_for_new_connector_integration_frm_record_return!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1624,8 +1706,10 @@ default_imp_for_new_connector_integration_frm_record_return!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, @@ -1670,10 +1754,12 @@ default_imp_for_new_connector_integration_revoking_mandates!( connectors::Bamboraapac, connectors::Billwerk, connectors::Bitpay, + connectors::Bluesnap, connectors::Boku, connectors::Cashtocode, connectors::Coinbase, connectors::Cryptopay, + connectors::Datatrans, connectors::Deutschebank, connectors::Digitalvirgo, connectors::Dlocal, @@ -1691,8 +1777,10 @@ default_imp_for_new_connector_integration_revoking_mandates!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Paybox, connectors::Payeezy, connectors::Payu, + connectors::Placetopay, connectors::Powertranz, connectors::Prophetpay, connectors::Mollie, diff --git a/crates/hyperswitch_connectors/src/types.rs b/crates/hyperswitch_connectors/src/types.rs index 0d7ecfc364..05ef62d782 100644 --- a/crates/hyperswitch_connectors/src/types.rs +++ b/crates/hyperswitch_connectors/src/types.rs @@ -1,9 +1,9 @@ use hyperswitch_domain_models::{ router_data::{AccessToken, RouterData}, - router_flow_types::{AccessTokenAuth, Capture, PSync, PreProcessing, Void}, + router_flow_types::{AccessTokenAuth, Capture, PSync, PreProcessing, Session, Void}, router_request_types::{ AccessTokenRequestData, PaymentsCancelData, PaymentsCaptureData, PaymentsPreProcessingData, - PaymentsSyncData, RefundsData, + PaymentsSessionData, PaymentsSyncData, RefundsData, }, router_response_types::{PaymentsResponseData, RefundsResponseData}, }; @@ -22,6 +22,8 @@ pub(crate) type PaymentsCancelResponseRouterData = ResponseRouterData; pub(crate) type PaymentsPreprocessingResponseRouterData = ResponseRouterData; +pub(crate) type PaymentsSessionResponseRouterData = + ResponseRouterData; // TODO: Remove `ResponseRouterData` from router crate after all the related type aliases are moved to this crate. pub struct ResponseRouterData { diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs index 27e80fafa9..6dce48e699 100644 --- a/crates/hyperswitch_connectors/src/utils.rs +++ b/crates/hyperswitch_connectors/src/utils.rs @@ -17,7 +17,7 @@ use common_utils::{ use error_stack::{report, ResultExt}; use hyperswitch_domain_models::{ address::{Address, AddressDetails, PhoneDetails}, - payment_method_data::{Card, PaymentMethodData}, + payment_method_data::{self, Card, PaymentMethodData}, router_data::{ ApplePayPredecryptData, ErrorResponse, PaymentMethodToken, RecurringMandatePaymentData, }, @@ -83,6 +83,102 @@ pub(crate) fn to_currency_base_unit( .change_context(errors::ConnectorError::ParsingFailed) } +pub(crate) fn to_currency_lower_unit( + amount: String, + currency: enums::Currency, +) -> Result> { + currency + .to_currency_lower_unit(amount) + .change_context(errors::ConnectorError::ResponseHandlingFailed) +} + +pub trait ConnectorErrorTypeMapping { + fn get_connector_error_type( + &self, + _error_code: String, + _error_message: String, + ) -> ConnectorErrorType { + ConnectorErrorType::UnknownError + } +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct ErrorCodeAndMessage { + pub error_code: String, + pub error_message: String, +} + +#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Debug)] +//Priority of connector_error_type +pub enum ConnectorErrorType { + UserError = 2, + BusinessError = 3, + TechnicalError = 4, + UnknownError = 1, +} + +pub(crate) fn get_error_code_error_message_based_on_priority( + connector: impl ConnectorErrorTypeMapping, + error_list: Vec, +) -> Option { + let error_type_list = error_list + .iter() + .map(|error| { + connector + .get_connector_error_type(error.error_code.clone(), error.error_message.clone()) + }) + .collect::>(); + let mut error_zip_list = error_list + .iter() + .zip(error_type_list.iter()) + .collect::>(); + error_zip_list.sort_by_key(|&(_, error_type)| error_type); + error_zip_list + .first() + .map(|&(error_code_message, _)| error_code_message) + .cloned() +} + +#[derive(Clone, Debug, serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GooglePayWalletData { + #[serde(rename = "type")] + pub pm_type: String, + pub description: String, + pub info: GooglePayPaymentMethodInfo, + pub tokenization_data: GpayTokenizationData, +} + +#[derive(Clone, Debug, serde::Serialize)] +#[serde(rename_all = "camelCase")] +pub struct GooglePayPaymentMethodInfo { + pub card_network: String, + pub card_details: String, +} + +#[derive(Clone, Debug, serde::Serialize)] +pub struct GpayTokenizationData { + #[serde(rename = "type")] + pub token_type: String, + pub token: Secret, +} + +impl From for GooglePayWalletData { + fn from(data: payment_method_data::GooglePayWalletData) -> Self { + Self { + pm_type: data.pm_type, + description: data.description, + info: GooglePayPaymentMethodInfo { + card_network: data.info.card_network, + card_details: data.info.card_details, + }, + tokenization_data: GpayTokenizationData { + token_type: data.tokenization_data.token_type, + token: Secret::new(data.tokenization_data.token), + }, + } + } +} pub(crate) fn get_amount_as_f64( currency_unit: &api::CurrencyUnit, amount: i64, @@ -118,6 +214,12 @@ where json.parse_value(std::any::type_name::()).switch() } +pub(crate) fn generate_random_bytes(length: usize) -> Vec { + // returns random bytes of length n + let mut rng = rand::thread_rng(); + (0..length).map(|_| rand::Rng::gen(&mut rng)).collect() +} + pub(crate) fn missing_field_err( message: &'static str, ) -> Box error_stack::Report + 'static> { @@ -1178,10 +1280,11 @@ pub trait PaymentsAuthorizeRequestData { fn get_metadata_as_object(&self) -> Option; fn get_authentication_data(&self) -> Result; fn get_customer_name(&self) -> Result, Error>; + fn get_connector_mandate_request_reference_id(&self) -> Result; fn get_card_holder_name_from_additional_payment_method_data( &self, ) -> Result, Error>; - fn get_connector_mandate_request_reference_id(&self) -> Result; + fn is_cit_mandate_payment(&self) -> bool; } impl PaymentsAuthorizeRequestData for PaymentsAuthorizeData { @@ -1376,6 +1479,12 @@ impl PaymentsAuthorizeRequestData for PaymentsAuthorizeData { }) .ok_or_else(missing_field_err("connector_mandate_request_reference_id")) } + fn is_cit_mandate_payment(&self) -> bool { + (self.customer_acceptance.is_some() || self.setup_mandate_details.is_some()) + && self.setup_future_usage.map_or(false, |setup_future_usage| { + setup_future_usage == FutureUsage::OffSession + }) + } } pub trait PaymentsCaptureRequestData { @@ -1538,6 +1647,7 @@ pub trait PaymentsCompleteAuthorizeRequestData { fn get_complete_authorize_url(&self) -> Result; fn is_mandate_payment(&self) -> bool; fn get_connector_mandate_request_reference_id(&self) -> Result; + fn is_cit_mandate_payment(&self) -> bool; } impl PaymentsCompleteAuthorizeRequestData for CompleteAuthorizeData { @@ -1594,6 +1704,12 @@ impl PaymentsCompleteAuthorizeRequestData for CompleteAuthorizeData { }) .ok_or_else(missing_field_err("connector_mandate_request_reference_id")) } + fn is_cit_mandate_payment(&self) -> bool { + (self.customer_acceptance.is_some() || self.setup_mandate_details.is_some()) + && self.setup_future_usage.map_or(false, |setup_future_usage| { + setup_future_usage == FutureUsage::OffSession + }) + } } pub trait AddressData { fn get_optional_full_name(&self) -> Option>; @@ -1725,7 +1841,7 @@ pub trait CryptoData { fn get_pay_currency(&self) -> Result; } -impl CryptoData for hyperswitch_domain_models::payment_method_data::CryptoData { +impl CryptoData for payment_method_data::CryptoData { fn get_pay_currency(&self) -> Result { self.pay_currency .clone() @@ -2054,187 +2170,183 @@ impl From for PaymentMethodDataType { match pm_data { PaymentMethodData::Card(_) => Self::Card, PaymentMethodData::NetworkToken(_) => Self::NetworkToken, - PaymentMethodData::CardDetailsForNetworkTransactionId(_) => Self::NetworkTransactionIdAndCardDetails, - PaymentMethodData::CardRedirect(card_redirect_data) => { - match card_redirect_data { - hyperswitch_domain_models::payment_method_data::CardRedirectData::Knet {} => Self::Knet, - hyperswitch_domain_models::payment_method_data::CardRedirectData::Benefit {} => Self::Benefit, - hyperswitch_domain_models::payment_method_data::CardRedirectData::MomoAtm {} => Self::MomoAtm, - hyperswitch_domain_models::payment_method_data::CardRedirectData::CardRedirect {} => Self::CardRedirect, - } + PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + Self::NetworkTransactionIdAndCardDetails } + PaymentMethodData::CardRedirect(card_redirect_data) => match card_redirect_data { + payment_method_data::CardRedirectData::Knet {} => Self::Knet, + payment_method_data::CardRedirectData::Benefit {} => Self::Benefit, + payment_method_data::CardRedirectData::MomoAtm {} => Self::MomoAtm, + payment_method_data::CardRedirectData::CardRedirect {} => Self::CardRedirect, + }, PaymentMethodData::Wallet(wallet_data) => match wallet_data { - hyperswitch_domain_models::payment_method_data::WalletData::AliPayQr(_) => Self::AliPayQr, - hyperswitch_domain_models::payment_method_data::WalletData::AliPayRedirect(_) => Self::AliPayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::AliPayHkRedirect(_) => Self::AliPayHkRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::MomoRedirect(_) => Self::MomoRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::KakaoPayRedirect(_) => Self::KakaoPayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::GoPayRedirect(_) => Self::GoPayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::GcashRedirect(_) => Self::GcashRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::ApplePay(_) => Self::ApplePay, - hyperswitch_domain_models::payment_method_data::WalletData::ApplePayRedirect(_) => Self::ApplePayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::ApplePayThirdPartySdk(_) => { + payment_method_data::WalletData::AliPayQr(_) => Self::AliPayQr, + payment_method_data::WalletData::AliPayRedirect(_) => Self::AliPayRedirect, + payment_method_data::WalletData::AliPayHkRedirect(_) => Self::AliPayHkRedirect, + payment_method_data::WalletData::MomoRedirect(_) => Self::MomoRedirect, + payment_method_data::WalletData::KakaoPayRedirect(_) => Self::KakaoPayRedirect, + payment_method_data::WalletData::GoPayRedirect(_) => Self::GoPayRedirect, + payment_method_data::WalletData::GcashRedirect(_) => Self::GcashRedirect, + payment_method_data::WalletData::ApplePay(_) => Self::ApplePay, + payment_method_data::WalletData::ApplePayRedirect(_) => Self::ApplePayRedirect, + payment_method_data::WalletData::ApplePayThirdPartySdk(_) => { Self::ApplePayThirdPartySdk } - hyperswitch_domain_models::payment_method_data::WalletData::DanaRedirect {} => Self::DanaRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::GooglePay(_) => Self::GooglePay, - hyperswitch_domain_models::payment_method_data::WalletData::GooglePayRedirect(_) => Self::GooglePayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::GooglePayThirdPartySdk(_) => { + payment_method_data::WalletData::DanaRedirect {} => Self::DanaRedirect, + payment_method_data::WalletData::GooglePay(_) => Self::GooglePay, + payment_method_data::WalletData::GooglePayRedirect(_) => Self::GooglePayRedirect, + payment_method_data::WalletData::GooglePayThirdPartySdk(_) => { Self::GooglePayThirdPartySdk } - hyperswitch_domain_models::payment_method_data::WalletData::MbWayRedirect(_) => Self::MbWayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::MobilePayRedirect(_) => Self::MobilePayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::PaypalRedirect(_) => Self::PaypalRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::PaypalSdk(_) => Self::PaypalSdk, - hyperswitch_domain_models::payment_method_data::WalletData::Paze(_) => Self::Paze, - hyperswitch_domain_models::payment_method_data::WalletData::SamsungPay(_) => Self::SamsungPay, - hyperswitch_domain_models::payment_method_data::WalletData::TwintRedirect {} => Self::TwintRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::VippsRedirect {} => Self::VippsRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::TouchNGoRedirect(_) => Self::TouchNGoRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::WeChatPayRedirect(_) => Self::WeChatPayRedirect, - hyperswitch_domain_models::payment_method_data::WalletData::WeChatPayQr(_) => Self::WeChatPayQr, - hyperswitch_domain_models::payment_method_data::WalletData::CashappQr(_) => Self::CashappQr, - hyperswitch_domain_models::payment_method_data::WalletData::SwishQr(_) => Self::SwishQr, - hyperswitch_domain_models::payment_method_data::WalletData::Mifinity(_) => Self::Mifinity, + payment_method_data::WalletData::MbWayRedirect(_) => Self::MbWayRedirect, + payment_method_data::WalletData::MobilePayRedirect(_) => Self::MobilePayRedirect, + payment_method_data::WalletData::PaypalRedirect(_) => Self::PaypalRedirect, + payment_method_data::WalletData::PaypalSdk(_) => Self::PaypalSdk, + payment_method_data::WalletData::Paze(_) => Self::Paze, + payment_method_data::WalletData::SamsungPay(_) => Self::SamsungPay, + payment_method_data::WalletData::TwintRedirect {} => Self::TwintRedirect, + payment_method_data::WalletData::VippsRedirect {} => Self::VippsRedirect, + payment_method_data::WalletData::TouchNGoRedirect(_) => Self::TouchNGoRedirect, + payment_method_data::WalletData::WeChatPayRedirect(_) => Self::WeChatPayRedirect, + payment_method_data::WalletData::WeChatPayQr(_) => Self::WeChatPayQr, + payment_method_data::WalletData::CashappQr(_) => Self::CashappQr, + payment_method_data::WalletData::SwishQr(_) => Self::SwishQr, + payment_method_data::WalletData::Mifinity(_) => Self::Mifinity, }, PaymentMethodData::PayLater(pay_later_data) => match pay_later_data { - hyperswitch_domain_models::payment_method_data::PayLaterData::KlarnaRedirect { .. } => Self::KlarnaRedirect, - hyperswitch_domain_models::payment_method_data::PayLaterData::KlarnaSdk { .. } => Self::KlarnaSdk, - hyperswitch_domain_models::payment_method_data::PayLaterData::AffirmRedirect {} => Self::AffirmRedirect, - hyperswitch_domain_models::payment_method_data::PayLaterData::AfterpayClearpayRedirect { .. } => { + payment_method_data::PayLaterData::KlarnaRedirect { .. } => Self::KlarnaRedirect, + payment_method_data::PayLaterData::KlarnaSdk { .. } => Self::KlarnaSdk, + payment_method_data::PayLaterData::AffirmRedirect {} => Self::AffirmRedirect, + payment_method_data::PayLaterData::AfterpayClearpayRedirect { .. } => { Self::AfterpayClearpayRedirect } - hyperswitch_domain_models::payment_method_data::PayLaterData::PayBrightRedirect {} => Self::PayBrightRedirect, - hyperswitch_domain_models::payment_method_data::PayLaterData::WalleyRedirect {} => Self::WalleyRedirect, - hyperswitch_domain_models::payment_method_data::PayLaterData::AlmaRedirect {} => Self::AlmaRedirect, - hyperswitch_domain_models::payment_method_data::PayLaterData::AtomeRedirect {} => Self::AtomeRedirect, + payment_method_data::PayLaterData::PayBrightRedirect {} => Self::PayBrightRedirect, + payment_method_data::PayLaterData::WalleyRedirect {} => Self::WalleyRedirect, + payment_method_data::PayLaterData::AlmaRedirect {} => Self::AlmaRedirect, + payment_method_data::PayLaterData::AtomeRedirect {} => Self::AtomeRedirect, }, - PaymentMethodData::BankRedirect(bank_redirect_data) => { - match bank_redirect_data { - hyperswitch_domain_models::payment_method_data::BankRedirectData::BancontactCard { .. } => { - Self::BancontactCard - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::Bizum {} => Self::Bizum, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Blik { .. } => Self::Blik, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Eps { .. } => Self::Eps, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Giropay { .. } => Self::Giropay, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Ideal { .. } => Self::Ideal, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Interac { .. } => Self::Interac, - hyperswitch_domain_models::payment_method_data::BankRedirectData::OnlineBankingCzechRepublic { .. } => { - Self::OnlineBankingCzechRepublic - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::OnlineBankingFinland { .. } => { - Self::OnlineBankingFinland - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::OnlineBankingPoland { .. } => { - Self::OnlineBankingPoland - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::OnlineBankingSlovakia { .. } => { - Self::OnlineBankingSlovakia - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::OpenBankingUk { .. } => Self::OpenBankingUk, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Przelewy24 { .. } => Self::Przelewy24, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Sofort { .. } => Self::Sofort, - hyperswitch_domain_models::payment_method_data::BankRedirectData::Trustly { .. } => Self::Trustly, - hyperswitch_domain_models::payment_method_data::BankRedirectData::OnlineBankingFpx { .. } => { - Self::OnlineBankingFpx - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::OnlineBankingThailand { .. } => { - Self::OnlineBankingThailand - } - hyperswitch_domain_models::payment_method_data::BankRedirectData::LocalBankRedirect { } => { - Self::LocalBankRedirect - } + PaymentMethodData::BankRedirect(bank_redirect_data) => match bank_redirect_data { + payment_method_data::BankRedirectData::BancontactCard { .. } => { + Self::BancontactCard } - } - PaymentMethodData::BankDebit(bank_debit_data) => { - match bank_debit_data { - hyperswitch_domain_models::payment_method_data::BankDebitData::AchBankDebit { .. } => Self::AchBankDebit, - hyperswitch_domain_models::payment_method_data::BankDebitData::SepaBankDebit { .. } => Self::SepaBankDebit, - hyperswitch_domain_models::payment_method_data::BankDebitData::BecsBankDebit { .. } => Self::BecsBankDebit, - hyperswitch_domain_models::payment_method_data::BankDebitData::BacsBankDebit { .. } => Self::BacsBankDebit, + payment_method_data::BankRedirectData::Bizum {} => Self::Bizum, + payment_method_data::BankRedirectData::Blik { .. } => Self::Blik, + payment_method_data::BankRedirectData::Eps { .. } => Self::Eps, + payment_method_data::BankRedirectData::Giropay { .. } => Self::Giropay, + payment_method_data::BankRedirectData::Ideal { .. } => Self::Ideal, + payment_method_data::BankRedirectData::Interac { .. } => Self::Interac, + payment_method_data::BankRedirectData::OnlineBankingCzechRepublic { .. } => { + Self::OnlineBankingCzechRepublic } - } - PaymentMethodData::BankTransfer(bank_transfer_data) => { - match *bank_transfer_data { - hyperswitch_domain_models::payment_method_data::BankTransferData::AchBankTransfer { .. } => { - Self::AchBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::SepaBankTransfer { .. } => { - Self::SepaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::BacsBankTransfer { .. } => { - Self::BacsBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::MultibancoBankTransfer { .. } => { - Self::MultibancoBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::PermataBankTransfer { .. } => { - Self::PermataBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::BcaBankTransfer { .. } => { - Self::BcaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::BniVaBankTransfer { .. } => { - Self::BniVaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::BriVaBankTransfer { .. } => { - Self::BriVaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::CimbVaBankTransfer { .. } => { - Self::CimbVaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::DanamonVaBankTransfer { .. } => { - Self::DanamonVaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::MandiriVaBankTransfer { .. } => { - Self::MandiriVaBankTransfer - } - hyperswitch_domain_models::payment_method_data::BankTransferData::Pix { .. } => Self::Pix, - hyperswitch_domain_models::payment_method_data::BankTransferData::Pse {} => Self::Pse, - hyperswitch_domain_models::payment_method_data::BankTransferData::LocalBankTransfer { .. } => { - Self::LocalBankTransfer - } + payment_method_data::BankRedirectData::OnlineBankingFinland { .. } => { + Self::OnlineBankingFinland } - } + payment_method_data::BankRedirectData::OnlineBankingPoland { .. } => { + Self::OnlineBankingPoland + } + payment_method_data::BankRedirectData::OnlineBankingSlovakia { .. } => { + Self::OnlineBankingSlovakia + } + payment_method_data::BankRedirectData::OpenBankingUk { .. } => Self::OpenBankingUk, + payment_method_data::BankRedirectData::Przelewy24 { .. } => Self::Przelewy24, + payment_method_data::BankRedirectData::Sofort { .. } => Self::Sofort, + payment_method_data::BankRedirectData::Trustly { .. } => Self::Trustly, + payment_method_data::BankRedirectData::OnlineBankingFpx { .. } => { + Self::OnlineBankingFpx + } + payment_method_data::BankRedirectData::OnlineBankingThailand { .. } => { + Self::OnlineBankingThailand + } + payment_method_data::BankRedirectData::LocalBankRedirect {} => { + Self::LocalBankRedirect + } + }, + PaymentMethodData::BankDebit(bank_debit_data) => match bank_debit_data { + payment_method_data::BankDebitData::AchBankDebit { .. } => Self::AchBankDebit, + payment_method_data::BankDebitData::SepaBankDebit { .. } => Self::SepaBankDebit, + payment_method_data::BankDebitData::BecsBankDebit { .. } => Self::BecsBankDebit, + payment_method_data::BankDebitData::BacsBankDebit { .. } => Self::BacsBankDebit, + }, + PaymentMethodData::BankTransfer(bank_transfer_data) => match *bank_transfer_data { + payment_method_data::BankTransferData::AchBankTransfer { .. } => { + Self::AchBankTransfer + } + payment_method_data::BankTransferData::SepaBankTransfer { .. } => { + Self::SepaBankTransfer + } + payment_method_data::BankTransferData::BacsBankTransfer { .. } => { + Self::BacsBankTransfer + } + payment_method_data::BankTransferData::MultibancoBankTransfer { .. } => { + Self::MultibancoBankTransfer + } + payment_method_data::BankTransferData::PermataBankTransfer { .. } => { + Self::PermataBankTransfer + } + payment_method_data::BankTransferData::BcaBankTransfer { .. } => { + Self::BcaBankTransfer + } + payment_method_data::BankTransferData::BniVaBankTransfer { .. } => { + Self::BniVaBankTransfer + } + payment_method_data::BankTransferData::BriVaBankTransfer { .. } => { + Self::BriVaBankTransfer + } + payment_method_data::BankTransferData::CimbVaBankTransfer { .. } => { + Self::CimbVaBankTransfer + } + payment_method_data::BankTransferData::DanamonVaBankTransfer { .. } => { + Self::DanamonVaBankTransfer + } + payment_method_data::BankTransferData::MandiriVaBankTransfer { .. } => { + Self::MandiriVaBankTransfer + } + payment_method_data::BankTransferData::Pix { .. } => Self::Pix, + payment_method_data::BankTransferData::Pse {} => Self::Pse, + payment_method_data::BankTransferData::LocalBankTransfer { .. } => { + Self::LocalBankTransfer + } + }, PaymentMethodData::Crypto(_) => Self::Crypto, PaymentMethodData::MandatePayment => Self::MandatePayment, PaymentMethodData::Reward => Self::Reward, PaymentMethodData::Upi(_) => Self::Upi, PaymentMethodData::Voucher(voucher_data) => match voucher_data { - hyperswitch_domain_models::payment_method_data::VoucherData::Boleto(_) => Self::Boleto, - hyperswitch_domain_models::payment_method_data::VoucherData::Efecty => Self::Efecty, - hyperswitch_domain_models::payment_method_data::VoucherData::PagoEfectivo => Self::PagoEfectivo, - hyperswitch_domain_models::payment_method_data::VoucherData::RedCompra => Self::RedCompra, - hyperswitch_domain_models::payment_method_data::VoucherData::RedPagos => Self::RedPagos, - hyperswitch_domain_models::payment_method_data::VoucherData::Alfamart(_) => Self::Alfamart, - hyperswitch_domain_models::payment_method_data::VoucherData::Indomaret(_) => Self::Indomaret, - hyperswitch_domain_models::payment_method_data::VoucherData::Oxxo => Self::Oxxo, - hyperswitch_domain_models::payment_method_data::VoucherData::SevenEleven(_) => Self::SevenEleven, - hyperswitch_domain_models::payment_method_data::VoucherData::Lawson(_) => Self::Lawson, - hyperswitch_domain_models::payment_method_data::VoucherData::MiniStop(_) => Self::MiniStop, - hyperswitch_domain_models::payment_method_data::VoucherData::FamilyMart(_) => Self::FamilyMart, - hyperswitch_domain_models::payment_method_data::VoucherData::Seicomart(_) => Self::Seicomart, - hyperswitch_domain_models::payment_method_data::VoucherData::PayEasy(_) => Self::PayEasy, + payment_method_data::VoucherData::Boleto(_) => Self::Boleto, + payment_method_data::VoucherData::Efecty => Self::Efecty, + payment_method_data::VoucherData::PagoEfectivo => Self::PagoEfectivo, + payment_method_data::VoucherData::RedCompra => Self::RedCompra, + payment_method_data::VoucherData::RedPagos => Self::RedPagos, + payment_method_data::VoucherData::Alfamart(_) => Self::Alfamart, + payment_method_data::VoucherData::Indomaret(_) => Self::Indomaret, + payment_method_data::VoucherData::Oxxo => Self::Oxxo, + payment_method_data::VoucherData::SevenEleven(_) => Self::SevenEleven, + payment_method_data::VoucherData::Lawson(_) => Self::Lawson, + payment_method_data::VoucherData::MiniStop(_) => Self::MiniStop, + payment_method_data::VoucherData::FamilyMart(_) => Self::FamilyMart, + payment_method_data::VoucherData::Seicomart(_) => Self::Seicomart, + payment_method_data::VoucherData::PayEasy(_) => Self::PayEasy, }, - PaymentMethodData::RealTimePayment(real_time_payment_data) => match *real_time_payment_data{ - hyperswitch_domain_models::payment_method_data::RealTimePaymentData::DuitNow { } => Self::DuitNow, - hyperswitch_domain_models::payment_method_data::RealTimePaymentData::Fps { } => Self::Fps, - hyperswitch_domain_models::payment_method_data::RealTimePaymentData::PromptPay { } => Self::PromptPay, - hyperswitch_domain_models::payment_method_data::RealTimePaymentData::VietQr { } => Self::VietQr, - }, - PaymentMethodData::GiftCard(gift_card_data) => { - match *gift_card_data { - hyperswitch_domain_models::payment_method_data::GiftCardData::Givex(_) => Self::Givex, - hyperswitch_domain_models::payment_method_data::GiftCardData::PaySafeCard {} => Self::PaySafeCar, + PaymentMethodData::RealTimePayment(real_time_payment_data) => { + match *real_time_payment_data { + payment_method_data::RealTimePaymentData::DuitNow {} => Self::DuitNow, + payment_method_data::RealTimePaymentData::Fps {} => Self::Fps, + payment_method_data::RealTimePaymentData::PromptPay {} => Self::PromptPay, + payment_method_data::RealTimePaymentData::VietQr {} => Self::VietQr, } } + PaymentMethodData::GiftCard(gift_card_data) => match *gift_card_data { + payment_method_data::GiftCardData::Givex(_) => Self::Givex, + payment_method_data::GiftCardData::PaySafeCard {} => Self::PaySafeCar, + }, PaymentMethodData::CardToken(_) => Self::CardToken, PaymentMethodData::OpenBanking(data) => match data { - hyperswitch_domain_models::payment_method_data::OpenBankingData::OpenBankingPIS { } => Self::OpenBanking + payment_method_data::OpenBankingData::OpenBankingPIS {} => Self::OpenBanking, }, PaymentMethodData::MobilePayment(mobile_payment_data) => match mobile_payment_data { - hyperswitch_domain_models::payment_method_data::MobilePaymentData::DirectCarrierBilling { .. } => Self::DirectCarrierBilling, + payment_method_data::MobilePaymentData::DirectCarrierBilling { .. } => { + Self::DirectCarrierBilling + } }, } } @@ -2243,7 +2355,7 @@ pub trait ApplePay { fn get_applepay_decoded_payment_data(&self) -> Result, Error>; } -impl ApplePay for hyperswitch_domain_models::payment_method_data::ApplePayWalletData { +impl ApplePay for payment_method_data::ApplePayWalletData { fn get_applepay_decoded_payment_data(&self) -> Result, Error> { let token = Secret::new( String::from_utf8(BASE64_ENGINE.decode(&self.payment_data).change_context( @@ -2267,7 +2379,7 @@ pub trait WalletData { fn get_encoded_wallet_token(&self) -> Result; } -impl WalletData for hyperswitch_domain_models::payment_method_data::WalletData { +impl WalletData for payment_method_data::WalletData { fn get_wallet_token(&self) -> Result, Error> { match self { Self::GooglePay(data) => Ok(Secret::new(data.tokenization_data.token.clone())), diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs index 04e972e518..3d3c42d079 100644 --- a/crates/router/src/connector.rs +++ b/crates/router/src/connector.rs @@ -3,11 +3,9 @@ pub mod adyen; pub mod adyenplatform; pub mod authorizedotnet; pub mod bankofamerica; -pub mod bluesnap; pub mod braintree; pub mod checkout; pub mod cybersource; -pub mod datatrans; #[cfg(feature = "dummy_connector")] pub mod dummyconnector; pub mod ebanx; @@ -23,11 +21,9 @@ pub mod noon; pub mod nuvei; pub mod opayo; pub mod opennode; -pub mod paybox; pub mod payme; pub mod payone; pub mod paypal; -pub mod placetopay; pub mod plaid; pub mod riskified; pub mod signifyd; @@ -42,18 +38,19 @@ pub mod wise; pub use hyperswitch_connectors::connectors::{ airwallex, airwallex::Airwallex, amazonpay, amazonpay::Amazonpay, bambora, bambora::Bambora, bamboraapac, bamboraapac::Bamboraapac, billwerk, billwerk::Billwerk, bitpay, bitpay::Bitpay, - boku, boku::Boku, cashtocode, cashtocode::Cashtocode, coinbase, coinbase::Coinbase, cryptopay, - cryptopay::Cryptopay, deutschebank, deutschebank::Deutschebank, digitalvirgo, - digitalvirgo::Digitalvirgo, dlocal, dlocal::Dlocal, elavon, elavon::Elavon, fiserv, - fiserv::Fiserv, fiservemea, fiservemea::Fiservemea, fiuu, fiuu::Fiuu, forte, forte::Forte, - globepay, globepay::Globepay, gocardless, gocardless::Gocardless, helcim, helcim::Helcim, - inespay, inespay::Inespay, jpmorgan, jpmorgan::Jpmorgan, mollie, mollie::Mollie, multisafepay, - multisafepay::Multisafepay, nexinets, nexinets::Nexinets, nexixpay, nexixpay::Nexixpay, - nomupay, nomupay::Nomupay, novalnet, novalnet::Novalnet, payeezy, payeezy::Payeezy, payu, - payu::Payu, powertranz, powertranz::Powertranz, prophetpay, prophetpay::Prophetpay, rapyd, - rapyd::Rapyd, razorpay, razorpay::Razorpay, redsys, redsys::Redsys, shift4, shift4::Shift4, - square, square::Square, stax, stax::Stax, taxjar, taxjar::Taxjar, thunes, thunes::Thunes, tsys, - tsys::Tsys, unified_authentication_service, + bluesnap, bluesnap::Bluesnap, boku, boku::Boku, cashtocode, cashtocode::Cashtocode, coinbase, + coinbase::Coinbase, cryptopay, cryptopay::Cryptopay, datatrans, datatrans::Datatrans, + deutschebank, deutschebank::Deutschebank, digitalvirgo, digitalvirgo::Digitalvirgo, dlocal, + dlocal::Dlocal, elavon, elavon::Elavon, fiserv, fiserv::Fiserv, fiservemea, + fiservemea::Fiservemea, fiuu, fiuu::Fiuu, forte, forte::Forte, globepay, globepay::Globepay, + gocardless, gocardless::Gocardless, helcim, helcim::Helcim, inespay, inespay::Inespay, + jpmorgan, jpmorgan::Jpmorgan, mollie, mollie::Mollie, multisafepay, multisafepay::Multisafepay, + nexinets, nexinets::Nexinets, nexixpay, nexixpay::Nexixpay, nomupay, nomupay::Nomupay, + novalnet, novalnet::Novalnet, paybox, paybox::Paybox, payeezy, payeezy::Payeezy, payu, + payu::Payu, placetopay, placetopay::Placetopay, powertranz, powertranz::Powertranz, prophetpay, + prophetpay::Prophetpay, rapyd, rapyd::Rapyd, razorpay, razorpay::Razorpay, redsys, + redsys::Redsys, shift4, shift4::Shift4, square, square::Square, stax, stax::Stax, taxjar, + taxjar::Taxjar, thunes, thunes::Thunes, tsys, tsys::Tsys, unified_authentication_service, unified_authentication_service::UnifiedAuthenticationService, volt, volt::Volt, worldline, worldline::Worldline, worldpay, worldpay::Worldpay, xendit, xendit::Xendit, zen, zen::Zen, zsl, zsl::Zsl, @@ -63,12 +60,11 @@ pub use hyperswitch_connectors::connectors::{ pub use self::dummyconnector::DummyConnector; pub use self::{ aci::Aci, adyen::Adyen, adyenplatform::Adyenplatform, authorizedotnet::Authorizedotnet, - bankofamerica::Bankofamerica, bluesnap::Bluesnap, braintree::Braintree, checkout::Checkout, - cybersource::Cybersource, datatrans::Datatrans, ebanx::Ebanx, globalpay::Globalpay, - gpayments::Gpayments, iatapay::Iatapay, itaubank::Itaubank, klarna::Klarna, mifinity::Mifinity, - netcetera::Netcetera, nmi::Nmi, noon::Noon, nuvei::Nuvei, opayo::Opayo, opennode::Opennode, - paybox::Paybox, payme::Payme, payone::Payone, paypal::Paypal, placetopay::Placetopay, - plaid::Plaid, riskified::Riskified, signifyd::Signifyd, stripe::Stripe, - threedsecureio::Threedsecureio, trustpay::Trustpay, wellsfargo::Wellsfargo, + bankofamerica::Bankofamerica, braintree::Braintree, checkout::Checkout, + cybersource::Cybersource, ebanx::Ebanx, globalpay::Globalpay, gpayments::Gpayments, + iatapay::Iatapay, itaubank::Itaubank, klarna::Klarna, mifinity::Mifinity, netcetera::Netcetera, + nmi::Nmi, noon::Noon, nuvei::Nuvei, opayo::Opayo, opennode::Opennode, payme::Payme, + payone::Payone, paypal::Paypal, plaid::Plaid, riskified::Riskified, signifyd::Signifyd, + stripe::Stripe, threedsecureio::Threedsecureio, trustpay::Trustpay, wellsfargo::Wellsfargo, wellsfargopayout::Wellsfargopayout, wise::Wise, }; diff --git a/crates/router/src/consts.rs b/crates/router/src/consts.rs index bf78424c9d..3d3b3b9814 100644 --- a/crates/router/src/consts.rs +++ b/crates/router/src/consts.rs @@ -54,10 +54,6 @@ pub(crate) const BASE64_ENGINE: base64::engine::GeneralPurpose = consts::BASE64_ pub(crate) const API_KEY_LENGTH: usize = 64; -// Apple Pay validation url -pub(crate) const APPLEPAY_VALIDATION_URL: &str = - "https://apple-pay-gateway-cert.apple.com/paymentservices/startSession"; - // OID (Object Identifier) for the merchant ID field extension. pub(crate) const MERCHANT_ID_FIELD_EXTENSION_ID: &str = "1.2.840.113635.100.6.32"; diff --git a/crates/router/src/core/payments/connector_integration_v2_impls.rs b/crates/router/src/core/payments/connector_integration_v2_impls.rs index 8725470e25..c9da7bb1fd 100644 --- a/crates/router/src/core/payments/connector_integration_v2_impls.rs +++ b/crates/router/src/core/payments/connector_integration_v2_impls.rs @@ -695,11 +695,9 @@ default_imp_for_new_connector_integration_payment!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -713,11 +711,9 @@ default_imp_for_new_connector_integration_payment!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -751,11 +747,9 @@ default_imp_for_new_connector_integration_refund!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -769,11 +763,9 @@ default_imp_for_new_connector_integration_refund!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -801,11 +793,9 @@ default_imp_for_new_connector_integration_connector_access_token!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -819,11 +809,9 @@ default_imp_for_new_connector_integration_connector_access_token!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -873,11 +861,9 @@ default_imp_for_new_connector_integration_accept_dispute!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -891,11 +877,9 @@ default_imp_for_new_connector_integration_accept_dispute!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -927,11 +911,9 @@ default_imp_for_new_connector_integration_defend_dispute!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -945,11 +927,9 @@ default_imp_for_new_connector_integration_defend_dispute!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -965,11 +945,9 @@ default_imp_for_new_connector_integration_submit_evidence!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -983,11 +961,9 @@ default_imp_for_new_connector_integration_submit_evidence!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1030,11 +1006,9 @@ default_imp_for_new_connector_integration_file_upload!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1048,11 +1022,9 @@ default_imp_for_new_connector_integration_file_upload!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1091,7 +1063,6 @@ default_imp_for_new_connector_integration_payouts!( connector::Cryptopay, connector::Coinbase, connector::Cybersource, - connector::Datatrans, connector::Deutschebank, connector::Digitalvirgo, connector::Dlocal, @@ -1129,7 +1100,6 @@ default_imp_for_new_connector_integration_payouts!( connector::Payone, connector::Paypal, connector::Payu, - connector::Placetopay, connector::Powertranz, connector::Rapyd, connector::Razorpay, @@ -1179,11 +1149,9 @@ default_imp_for_new_connector_integration_payouts_create!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1197,11 +1165,9 @@ default_imp_for_new_connector_integration_payouts_create!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1236,11 +1202,9 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1254,11 +1218,9 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1293,11 +1255,9 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1311,11 +1271,9 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1350,11 +1308,9 @@ default_imp_for_new_connector_integration_payouts_cancel!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1368,11 +1324,9 @@ default_imp_for_new_connector_integration_payouts_cancel!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1407,11 +1361,9 @@ default_imp_for_new_connector_integration_payouts_quote!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1425,11 +1377,9 @@ default_imp_for_new_connector_integration_payouts_quote!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1464,11 +1414,9 @@ default_imp_for_new_connector_integration_payouts_recipient!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1482,11 +1430,9 @@ default_imp_for_new_connector_integration_payouts_recipient!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1521,11 +1467,9 @@ default_imp_for_new_connector_integration_payouts_sync!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1539,11 +1483,9 @@ default_imp_for_new_connector_integration_payouts_sync!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1578,11 +1520,9 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1596,11 +1536,9 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1633,11 +1571,9 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1651,11 +1587,9 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1694,7 +1628,6 @@ default_imp_for_new_connector_integration_frm!( connector::Cryptopay, connector::Coinbase, connector::Cybersource, - connector::Datatrans, connector::Deutschebank, connector::Digitalvirgo, connector::Dlocal, @@ -1732,7 +1665,6 @@ default_imp_for_new_connector_integration_frm!( connector::Payone, connector::Paypal, connector::Payu, - connector::Placetopay, connector::Powertranz, connector::Rapyd, connector::Razorpay, @@ -1782,11 +1714,9 @@ default_imp_for_new_connector_integration_frm_sale!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1800,11 +1730,9 @@ default_imp_for_new_connector_integration_frm_sale!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1839,11 +1767,9 @@ default_imp_for_new_connector_integration_frm_checkout!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1857,11 +1783,9 @@ default_imp_for_new_connector_integration_frm_checkout!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1896,11 +1820,9 @@ default_imp_for_new_connector_integration_frm_transaction!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1914,11 +1836,9 @@ default_imp_for_new_connector_integration_frm_transaction!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -1953,11 +1873,9 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1971,11 +1889,9 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -2010,11 +1926,9 @@ default_imp_for_new_connector_integration_frm_record_return!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2028,11 +1942,9 @@ default_imp_for_new_connector_integration_frm_record_return!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, @@ -2064,11 +1976,9 @@ default_imp_for_new_connector_integration_revoking_mandates!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2082,11 +1992,9 @@ default_imp_for_new_connector_integration_revoking_mandates!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Stripe, diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs index 9ce0ccb449..ba1964435b 100644 --- a/crates/router/src/core/payments/flows.rs +++ b/crates/router/src/core/payments/flows.rs @@ -213,7 +213,6 @@ default_imp_for_complete_authorize!( connector::Adyen, connector::Bankofamerica, connector::Checkout, - connector::Datatrans, connector::Ebanx, connector::Gpayments, connector::Iatapay, @@ -225,7 +224,6 @@ default_imp_for_complete_authorize!( connector::Opayo, connector::Opennode, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -268,11 +266,9 @@ default_imp_for_webhook_source_verification!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -286,10 +282,8 @@ default_imp_for_webhook_source_verification!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -334,11 +328,9 @@ default_imp_for_create_customer!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -352,11 +344,9 @@ default_imp_for_create_customer!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -402,7 +392,6 @@ default_imp_for_connector_redirect_response!( connector::Adyen, connector::Bankofamerica, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Gpayments, connector::Iatapay, @@ -413,7 +402,6 @@ default_imp_for_connector_redirect_response!( connector::Opayo, connector::Opennode, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -554,10 +542,8 @@ default_imp_for_accept_dispute!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -571,11 +557,9 @@ default_imp_for_accept_dispute!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -641,10 +625,8 @@ default_imp_for_file_upload!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -657,11 +639,9 @@ default_imp_for_file_upload!( connector::Noon, connector::Nuvei, connector::Opayo, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -705,10 +685,8 @@ default_imp_for_submit_evidence!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -721,11 +699,9 @@ default_imp_for_submit_evidence!( connector::Noon, connector::Nuvei, connector::Opayo, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -769,10 +745,8 @@ default_imp_for_defend_dispute!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -785,11 +759,9 @@ default_imp_for_defend_dispute!( connector::Noon, connector::Nuvei, connector::Opayo, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -849,10 +821,8 @@ default_imp_for_pre_processing_steps!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, - connector::Datatrans, connector::Ebanx, connector::Iatapay, connector::Itaubank, @@ -864,9 +834,7 @@ default_imp_for_pre_processing_steps!( connector::Noon, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -901,10 +869,8 @@ default_imp_for_post_processing_steps!( connector::Trustpay, connector::Aci, connector::Authorizedotnet, - connector::Bluesnap, connector::Braintree, connector::Checkout, - connector::Datatrans, connector::Ebanx, connector::Iatapay, connector::Itaubank, @@ -916,9 +882,7 @@ default_imp_for_post_processing_steps!( connector::Noon, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payone, - connector::Placetopay, connector::Riskified, connector::Signifyd, connector::Threedsecureio, @@ -942,10 +906,8 @@ default_imp_for_payouts!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -958,9 +920,7 @@ default_imp_for_payouts!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1003,11 +963,9 @@ default_imp_for_payouts_create!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -1020,10 +978,8 @@ default_imp_for_payouts_create!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1067,11 +1023,9 @@ default_imp_for_payouts_retrieve!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1085,10 +1039,8 @@ default_imp_for_payouts_retrieve!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1136,11 +1088,9 @@ default_imp_for_payouts_eligibility!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -1153,11 +1103,9 @@ default_imp_for_payouts_eligibility!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1200,10 +1148,8 @@ default_imp_for_payouts_fulfill!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -1216,9 +1162,7 @@ default_imp_for_payouts_fulfill!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1261,11 +1205,9 @@ default_imp_for_payouts_cancel!( connector::Aci, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -1278,11 +1220,9 @@ default_imp_for_payouts_cancel!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1326,11 +1266,9 @@ default_imp_for_payouts_quote!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -1343,11 +1281,9 @@ default_imp_for_payouts_quote!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1392,11 +1328,9 @@ default_imp_for_payouts_recipient!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Globalpay, connector::Gpayments, connector::Iatapay, @@ -1409,11 +1343,9 @@ default_imp_for_payouts_recipient!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1460,11 +1392,9 @@ default_imp_for_payouts_recipient_account!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1478,11 +1408,9 @@ default_imp_for_payouts_recipient_account!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1526,11 +1454,9 @@ default_imp_for_approve!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1544,11 +1470,9 @@ default_imp_for_approve!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1593,11 +1517,9 @@ default_imp_for_reject!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1611,11 +1533,9 @@ default_imp_for_reject!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -1758,11 +1678,9 @@ default_imp_for_frm_sale!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1776,11 +1694,9 @@ default_imp_for_frm_sale!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Stripe, connector::Threedsecureio, @@ -1825,11 +1741,9 @@ default_imp_for_frm_checkout!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1843,11 +1757,9 @@ default_imp_for_frm_checkout!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Stripe, connector::Threedsecureio, @@ -1892,11 +1804,9 @@ default_imp_for_frm_transaction!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1910,11 +1820,9 @@ default_imp_for_frm_transaction!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Stripe, connector::Threedsecureio, @@ -1959,11 +1867,9 @@ default_imp_for_frm_fulfillment!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -1977,11 +1883,9 @@ default_imp_for_frm_fulfillment!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Stripe, connector::Threedsecureio, @@ -2026,11 +1930,9 @@ default_imp_for_frm_record_return!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2044,11 +1946,9 @@ default_imp_for_frm_record_return!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Stripe, connector::Threedsecureio, @@ -2091,10 +1991,8 @@ default_imp_for_incremental_authorization!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2108,11 +2006,9 @@ default_imp_for_incremental_authorization!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -2154,10 +2050,8 @@ default_imp_for_revoking_mandates!( connector::Adyen, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2170,11 +2064,9 @@ default_imp_for_revoking_mandates!( connector::Nuvei, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -2384,11 +2276,9 @@ default_imp_for_authorize_session_token!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2401,11 +2291,9 @@ default_imp_for_authorize_session_token!( connector::Noon, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -2448,11 +2336,9 @@ default_imp_for_calculate_tax!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2466,11 +2352,9 @@ default_imp_for_calculate_tax!( connector::Noon, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, connector::Paypal, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -2513,11 +2397,9 @@ default_imp_for_session_update!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2531,10 +2413,8 @@ default_imp_for_session_update!( connector::Noon, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd, @@ -2577,11 +2457,9 @@ default_imp_for_post_session_tokens!( connector::Adyenplatform, connector::Authorizedotnet, connector::Bankofamerica, - connector::Bluesnap, connector::Braintree, connector::Checkout, connector::Cybersource, - connector::Datatrans, connector::Ebanx, connector::Globalpay, connector::Gpayments, @@ -2595,10 +2473,8 @@ default_imp_for_post_session_tokens!( connector::Noon, connector::Opayo, connector::Opennode, - connector::Paybox, connector::Payme, connector::Payone, - connector::Placetopay, connector::Plaid, connector::Riskified, connector::Signifyd,