diff --git a/crates/router/src/connector/adyen.rs b/crates/router/src/connector/adyen.rs index 554de564b6..c634d38c61 100644 --- a/crates/router/src/connector/adyen.rs +++ b/crates/router/src/connector/adyen.rs @@ -2,7 +2,7 @@ pub mod transformers; use std::fmt::Debug; -use api_models::webhooks::IncomingWebhookEvent; +use api_models::{enums::PaymentMethodType, webhooks::IncomingWebhookEvent}; use base64::Engine; use common_utils::request::RequestContent; use diesel_models::{enums as storage_enums, enums}; @@ -11,8 +11,8 @@ use ring::hmac; use router_env::{instrument, tracing}; use self::transformers as adyen; -use super::utils as connector_utils; use crate::{ + capture_method_not_supported, configs::settings, consts, core::errors::{self, CustomResult}, @@ -87,15 +87,138 @@ impl ConnectorValidation for Adyen { fn validate_capture_method( &self, capture_method: Option, + pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); - match capture_method { - enums::CaptureMethod::Automatic - | enums::CaptureMethod::Manual - | enums::CaptureMethod::ManualMultiple => Ok(()), - enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_implemented_error_report(capture_method, self.id()), - ), + let connector = self.id(); + match pmt { + Some(payment_method_type) => match payment_method_type { + PaymentMethodType::Affirm + | PaymentMethodType::AfterpayClearpay + | PaymentMethodType::ApplePay + | PaymentMethodType::Credit + | PaymentMethodType::Debit + | PaymentMethodType::GooglePay + | PaymentMethodType::MobilePay + | PaymentMethodType::PayBright + | PaymentMethodType::Sepa + | PaymentMethodType::Vipps + | PaymentMethodType::Paypal => match capture_method { + enums::CaptureMethod::Automatic + | enums::CaptureMethod::Manual + | enums::CaptureMethod::ManualMultiple => Ok(()), + enums::CaptureMethod::Scheduled => { + capture_method_not_supported!( + connector, + capture_method, + payment_method_type + ) + } + }, + PaymentMethodType::Ach + | PaymentMethodType::Alma + | PaymentMethodType::Bacs + | PaymentMethodType::Givex + | PaymentMethodType::Klarna + | PaymentMethodType::Twint + | PaymentMethodType::Walley => match capture_method { + enums::CaptureMethod::Automatic | enums::CaptureMethod::Manual => Ok(()), + enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => { + capture_method_not_supported!( + connector, + capture_method, + payment_method_type + ) + } + }, + + PaymentMethodType::AliPay + | PaymentMethodType::AliPayHk + | PaymentMethodType::Atome + | PaymentMethodType::BancontactCard + | PaymentMethodType::Benefit + | PaymentMethodType::Bizum + | PaymentMethodType::Blik + | PaymentMethodType::Boleto + | PaymentMethodType::Dana + | PaymentMethodType::Eps + | PaymentMethodType::OnlineBankingFpx + | PaymentMethodType::Gcash + | PaymentMethodType::GoPay + | PaymentMethodType::Ideal + | PaymentMethodType::KakaoPay + | PaymentMethodType::Knet + | PaymentMethodType::MbWay + | PaymentMethodType::Momo + | PaymentMethodType::MomoAtm + | PaymentMethodType::OnlineBankingFinland + | PaymentMethodType::OnlineBankingPoland + | PaymentMethodType::OnlineBankingSlovakia + | PaymentMethodType::OnlineBankingThailand + | PaymentMethodType::Oxxo + | PaymentMethodType::PaySafeCard + | PaymentMethodType::Pix + | PaymentMethodType::Swish + | PaymentMethodType::TouchNGo + | PaymentMethodType::Trustly + | PaymentMethodType::WeChatPay + | PaymentMethodType::DanamonVa + | PaymentMethodType::BcaBankTransfer + | PaymentMethodType::BriVa + | PaymentMethodType::BniVa + | PaymentMethodType::CimbVa + | PaymentMethodType::MandiriVa + | PaymentMethodType::Alfamart + | PaymentMethodType::Indomaret + | PaymentMethodType::FamilyMart + | PaymentMethodType::Sofort + | PaymentMethodType::Giropay + | PaymentMethodType::Seicomart + | PaymentMethodType::PayEasy + | PaymentMethodType::MiniStop + | PaymentMethodType::Lawson + | PaymentMethodType::SevenEleven + | PaymentMethodType::OpenBankingUk + | PaymentMethodType::OnlineBankingCzechRepublic + | PaymentMethodType::PermataBankTransfer => match capture_method { + enums::CaptureMethod::Automatic => Ok(()), + enums::CaptureMethod::Manual + | enums::CaptureMethod::ManualMultiple + | enums::CaptureMethod::Scheduled => { + capture_method_not_supported!( + connector, + capture_method, + payment_method_type + ) + } + }, + PaymentMethodType::CardRedirect + | PaymentMethodType::Interac + | PaymentMethodType::Multibanco + | PaymentMethodType::Przelewy24 + | PaymentMethodType::Becs + | PaymentMethodType::ClassicReward + | PaymentMethodType::Pse + | PaymentMethodType::Efecty + | PaymentMethodType::PagoEfectivo + | PaymentMethodType::RedCompra + | PaymentMethodType::RedPagos + | PaymentMethodType::CryptoCurrency + | PaymentMethodType::SamsungPay + | PaymentMethodType::Evoucher + | PaymentMethodType::Cashapp + | PaymentMethodType::UpiCollect => { + capture_method_not_supported!(connector, capture_method, payment_method_type) + } + }, + None => match capture_method { + enums::CaptureMethod::Automatic + | enums::CaptureMethod::Manual + | enums::CaptureMethod::ManualMultiple => Ok(()), + enums::CaptureMethod::Scheduled => { + capture_method_not_supported!(connector, capture_method) + } + }, } } fn validate_psync_reference_id( diff --git a/crates/router/src/connector/airwallex.rs b/crates/router/src/connector/airwallex.rs index 103c5852ac..a788a4a2ab 100644 --- a/crates/router/src/connector/airwallex.rs +++ b/crates/router/src/connector/airwallex.rs @@ -110,6 +110,7 @@ impl ConnectorValidation for Airwallex { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/authorizedotnet.rs b/crates/router/src/connector/authorizedotnet.rs index e8ef9195d0..04704a9091 100644 --- a/crates/router/src/connector/authorizedotnet.rs +++ b/crates/router/src/connector/authorizedotnet.rs @@ -67,6 +67,7 @@ impl ConnectorValidation for Authorizedotnet { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/bambora.rs b/crates/router/src/connector/bambora.rs index df078e895d..e2d9e18ce9 100644 --- a/crates/router/src/connector/bambora.rs +++ b/crates/router/src/connector/bambora.rs @@ -111,6 +111,7 @@ impl ConnectorValidation for Bambora { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/bankofamerica.rs b/crates/router/src/connector/bankofamerica.rs index 8a72e65f97..706532c5d1 100644 --- a/crates/router/src/connector/bankofamerica.rs +++ b/crates/router/src/connector/bankofamerica.rs @@ -264,6 +264,7 @@ impl ConnectorValidation for Bankofamerica { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/bluesnap.rs b/crates/router/src/connector/bluesnap.rs index 824a073136..71e140ca07 100644 --- a/crates/router/src/connector/bluesnap.rs +++ b/crates/router/src/connector/bluesnap.rs @@ -175,6 +175,7 @@ impl ConnectorValidation for Bluesnap { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/boku.rs b/crates/router/src/connector/boku.rs index 7b470593e7..b3e2643092 100644 --- a/crates/router/src/connector/boku.rs +++ b/crates/router/src/connector/boku.rs @@ -147,6 +147,7 @@ impl ConnectorValidation for Boku { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/braintree.rs b/crates/router/src/connector/braintree.rs index 629a966103..b080db1df6 100644 --- a/crates/router/src/connector/braintree.rs +++ b/crates/router/src/connector/braintree.rs @@ -166,6 +166,7 @@ impl ConnectorValidation for Braintree { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/cashtocode.rs b/crates/router/src/connector/cashtocode.rs index 127451f383..5dc8096789 100644 --- a/crates/router/src/connector/cashtocode.rs +++ b/crates/router/src/connector/cashtocode.rs @@ -135,6 +135,7 @@ impl ConnectorValidation for Cashtocode { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/checkout.rs b/crates/router/src/connector/checkout.rs index ea2c4fefd3..cf1b5a1498 100644 --- a/crates/router/src/connector/checkout.rs +++ b/crates/router/src/connector/checkout.rs @@ -146,6 +146,7 @@ impl ConnectorValidation for Checkout { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/coinbase.rs b/crates/router/src/connector/coinbase.rs index 1886b65117..700731348f 100644 --- a/crates/router/src/connector/coinbase.rs +++ b/crates/router/src/connector/coinbase.rs @@ -123,6 +123,7 @@ impl ConnectorValidation for Coinbase { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/cybersource.rs b/crates/router/src/connector/cybersource.rs index 5597af94e3..2b9b45cdda 100644 --- a/crates/router/src/connector/cybersource.rs +++ b/crates/router/src/connector/cybersource.rs @@ -203,6 +203,7 @@ impl ConnectorValidation for Cybersource { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/dlocal.rs b/crates/router/src/connector/dlocal.rs index 5487fd68a5..9fdb36ea1d 100644 --- a/crates/router/src/connector/dlocal.rs +++ b/crates/router/src/connector/dlocal.rs @@ -146,6 +146,7 @@ impl ConnectorValidation for Dlocal { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/dummyconnector.rs b/crates/router/src/connector/dummyconnector.rs index 85b87f26c5..7889c4e405 100644 --- a/crates/router/src/connector/dummyconnector.rs +++ b/crates/router/src/connector/dummyconnector.rs @@ -127,6 +127,7 @@ impl ConnectorValidation for DummyConnector { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/fiserv.rs b/crates/router/src/connector/fiserv.rs index 5cbfee5194..7db63f5eee 100644 --- a/crates/router/src/connector/fiserv.rs +++ b/crates/router/src/connector/fiserv.rs @@ -174,6 +174,7 @@ impl ConnectorValidation for Fiserv { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/forte.rs b/crates/router/src/connector/forte.rs index f179e8a8cc..7cc3f9f9a4 100644 --- a/crates/router/src/connector/forte.rs +++ b/crates/router/src/connector/forte.rs @@ -147,6 +147,7 @@ impl ConnectorValidation for Forte { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/globalpay.rs b/crates/router/src/connector/globalpay.rs index 620805eb3e..d9123c516e 100644 --- a/crates/router/src/connector/globalpay.rs +++ b/crates/router/src/connector/globalpay.rs @@ -119,6 +119,7 @@ impl ConnectorValidation for Globalpay { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/gocardless.rs b/crates/router/src/connector/gocardless.rs index 720a13611c..806aec7dbe 100644 --- a/crates/router/src/connector/gocardless.rs +++ b/crates/router/src/connector/gocardless.rs @@ -330,7 +330,8 @@ impl impl ConnectorValidation for Gocardless { fn validate_capture_method( &self, - capture_method: Option, + capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/helcim.rs b/crates/router/src/connector/helcim.rs index 5e03e5046a..d1b9732cb1 100644 --- a/crates/router/src/connector/helcim.rs +++ b/crates/router/src/connector/helcim.rs @@ -157,6 +157,7 @@ impl ConnectorValidation for Helcim { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/multisafepay.rs b/crates/router/src/connector/multisafepay.rs index da3a87454c..b039da42a0 100644 --- a/crates/router/src/connector/multisafepay.rs +++ b/crates/router/src/connector/multisafepay.rs @@ -100,6 +100,7 @@ impl ConnectorValidation for Multisafepay { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/nexinets.rs b/crates/router/src/connector/nexinets.rs index 4457a0986f..85cc094981 100644 --- a/crates/router/src/connector/nexinets.rs +++ b/crates/router/src/connector/nexinets.rs @@ -146,6 +146,7 @@ impl ConnectorValidation for Nexinets { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/nmi.rs b/crates/router/src/connector/nmi.rs index a7c920a5f9..e7b7e0e902 100644 --- a/crates/router/src/connector/nmi.rs +++ b/crates/router/src/connector/nmi.rs @@ -95,6 +95,7 @@ impl ConnectorValidation for Nmi { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/noon.rs b/crates/router/src/connector/noon.rs index 56f3c7101b..33cb94da18 100644 --- a/crates/router/src/connector/noon.rs +++ b/crates/router/src/connector/noon.rs @@ -159,6 +159,7 @@ impl ConnectorValidation for Noon { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/nuvei.rs b/crates/router/src/connector/nuvei.rs index 5939676631..8d3be455d4 100644 --- a/crates/router/src/connector/nuvei.rs +++ b/crates/router/src/connector/nuvei.rs @@ -75,6 +75,7 @@ impl ConnectorValidation for Nuvei { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/opayo.rs b/crates/router/src/connector/opayo.rs index 7285ce49fc..53a314162b 100644 --- a/crates/router/src/connector/opayo.rs +++ b/crates/router/src/connector/opayo.rs @@ -123,6 +123,7 @@ impl ConnectorValidation for Opayo { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/payeezy.rs b/crates/router/src/connector/payeezy.rs index 6f6a366ee4..04f180efd0 100644 --- a/crates/router/src/connector/payeezy.rs +++ b/crates/router/src/connector/payeezy.rs @@ -137,6 +137,7 @@ impl ConnectorValidation for Payeezy { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/payme.rs b/crates/router/src/connector/payme.rs index d84c87f2e4..ba11df7d53 100644 --- a/crates/router/src/connector/payme.rs +++ b/crates/router/src/connector/payme.rs @@ -113,6 +113,7 @@ impl ConnectorValidation for Payme { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/paypal.rs b/crates/router/src/connector/paypal.rs index 38d8b783d5..1c168ba499 100644 --- a/crates/router/src/connector/paypal.rs +++ b/crates/router/src/connector/paypal.rs @@ -265,6 +265,7 @@ impl ConnectorValidation for Paypal { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/payu.rs b/crates/router/src/connector/payu.rs index bd850cf1e8..3ff0e70936 100644 --- a/crates/router/src/connector/payu.rs +++ b/crates/router/src/connector/payu.rs @@ -112,6 +112,7 @@ impl ConnectorValidation for Payu { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/placetopay.rs b/crates/router/src/connector/placetopay.rs index ab33bf1039..81255f450e 100644 --- a/crates/router/src/connector/placetopay.rs +++ b/crates/router/src/connector/placetopay.rs @@ -115,6 +115,7 @@ impl ConnectorValidation for Placetopay { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/powertranz.rs b/crates/router/src/connector/powertranz.rs index 5023f6b743..53f6a02d5b 100644 --- a/crates/router/src/connector/powertranz.rs +++ b/crates/router/src/connector/powertranz.rs @@ -134,6 +134,7 @@ impl ConnectorValidation for Powertranz { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/rapyd.rs b/crates/router/src/connector/rapyd.rs index 389893b552..9bf5101e8b 100644 --- a/crates/router/src/connector/rapyd.rs +++ b/crates/router/src/connector/rapyd.rs @@ -120,6 +120,7 @@ impl ConnectorValidation for Rapyd { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/shift4.rs b/crates/router/src/connector/shift4.rs index 352ec4787a..0128aa1c2f 100644 --- a/crates/router/src/connector/shift4.rs +++ b/crates/router/src/connector/shift4.rs @@ -114,6 +114,7 @@ impl ConnectorValidation for Shift4 { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/square.rs b/crates/router/src/connector/square.rs index ea6bd42ffe..8bfc9582d0 100644 --- a/crates/router/src/connector/square.rs +++ b/crates/router/src/connector/square.rs @@ -138,6 +138,7 @@ impl ConnectorValidation for Square { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/stax.rs b/crates/router/src/connector/stax.rs index db090cdf78..73bcb0b8c6 100644 --- a/crates/router/src/connector/stax.rs +++ b/crates/router/src/connector/stax.rs @@ -121,6 +121,7 @@ impl ConnectorValidation for Stax { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/stripe.rs b/crates/router/src/connector/stripe.rs index 01848f704e..b85725c249 100644 --- a/crates/router/src/connector/stripe.rs +++ b/crates/router/src/connector/stripe.rs @@ -66,6 +66,7 @@ impl ConnectorValidation for Stripe { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/tsys.rs b/crates/router/src/connector/tsys.rs index 8117bc8901..10e5af8de2 100644 --- a/crates/router/src/connector/tsys.rs +++ b/crates/router/src/connector/tsys.rs @@ -86,6 +86,7 @@ impl ConnectorValidation for Tsys { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/worldline.rs b/crates/router/src/connector/worldline.rs index e46062a312..410d096d20 100644 --- a/crates/router/src/connector/worldline.rs +++ b/crates/router/src/connector/worldline.rs @@ -151,6 +151,7 @@ impl ConnectorValidation for Worldline { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/connector/worldpay.rs b/crates/router/src/connector/worldpay.rs index fa534a8806..65d4d2553e 100644 --- a/crates/router/src/connector/worldpay.rs +++ b/crates/router/src/connector/worldpay.rs @@ -110,6 +110,7 @@ impl ConnectorValidation for Worldpay { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method { diff --git a/crates/router/src/core/errors.rs b/crates/router/src/core/errors.rs index c7486e827c..d1814f7ee8 100644 --- a/crates/router/src/core/errors.rs +++ b/crates/router/src/core/errors.rs @@ -50,6 +50,24 @@ macro_rules! impl_error_display { }; } +#[macro_export] +macro_rules! capture_method_not_supported { + ($connector:expr, $capture_method:expr) => { + Err(errors::ConnectorError::NotSupported { + message: format!("{} for selected payment method", $capture_method), + connector: $connector, + } + .into()) + }; + ($connector:expr, $capture_method:expr, $payment_method_type:expr) => { + Err(errors::ConnectorError::NotSupported { + message: format!("{} for {}", $capture_method, $payment_method_type), + connector: $connector, + } + .into()) + }; +} + macro_rules! impl_error_type { ($name: ident, $arg: tt) => { #[derive(Debug)] diff --git a/crates/router/src/core/payments/flows/authorize_flow.rs b/crates/router/src/core/payments/flows/authorize_flow.rs index c64912195e..7842678a92 100644 --- a/crates/router/src/core/payments/flows/authorize_flow.rs +++ b/crates/router/src/core/payments/flows/authorize_flow.rs @@ -74,7 +74,10 @@ impl Feature for types::PaymentsAu > = connector.connector.get_connector_integration(); connector .connector - .validate_capture_method(self.request.capture_method) + .validate_capture_method( + self.request.capture_method, + self.request.payment_method_type, + ) .to_payment_failed_response()?; if self.should_proceed_with_authorize() { diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs index 3730c5bf9a..391a081a29 100644 --- a/crates/router/src/services/api.rs +++ b/crates/router/src/services/api.rs @@ -10,7 +10,7 @@ use std::{ }; use actix_web::{body, web, FromRequest, HttpRequest, HttpResponse, Responder, ResponseError}; -use api_models::enums::CaptureMethod; +use api_models::enums::{CaptureMethod, PaymentMethodType}; pub use client::{proxy_bypass_urls, ApiClient, MockApiClient, ProxyClient}; use common_enums::Currency; pub use common_utils::request::{ContentType, Method, Request, RequestBuilder}; @@ -73,6 +73,7 @@ pub trait ConnectorValidation: ConnectorCommon { fn validate_capture_method( &self, capture_method: Option, + _pmt: Option, ) -> CustomResult<(), errors::ConnectorError> { let capture_method = capture_method.unwrap_or_default(); match capture_method {