Bug: [FEATURE] : Paybox payments integration 



### Feature Description

Payone is payout connector
Documentation link: http://www1.paybox.com/wp-content/uploads/2017/08/ManuelIntegrationVerifone_PayboxDirect_V8.1_EN.pdf
Website url: [Paybox.com](http://paybox.com/)

### Have you spent some time to check if this feature request has been raised before?

- [X] I checked and didn't find similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

Yes I am willing to submit a PR!
diff --git a/config/config.example.toml b/config/config.example.toml
index 92bdaf6b924..7cbd6551303 100644
--- a/config/config.example.toml
+++ b/config/config.example.toml
@@ -227,6 +227,7 @@ noon.key_mode = "Test"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-test.sagepay.com/"
 opennode.base_url = "https://dev-api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api-cert.payeezy.com/"
 payme.base_url = "https://sandbox.payme.io/"
 payone.base_url = "https://payment.preprod.payone.com/"
diff --git a/config/deployments/integration_test.toml b/config/deployments/integration_test.toml
index 39b19fd0535..69d268e2162 100644
--- a/config/deployments/integration_test.toml
+++ b/config/deployments/integration_test.toml
@@ -66,6 +66,7 @@ noon.key_mode = "Test"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-test.sagepay.com/"
 opennode.base_url = "https://dev-api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api-cert.payeezy.com/"
 payme.base_url = "https://sandbox.payme.io/"
 payone.base_url = "https://payment.preprod.payone.com/"
diff --git a/config/deployments/production.toml b/config/deployments/production.toml
index 4630b969224..17f4b2fa994 100644
--- a/config/deployments/production.toml
+++ b/config/deployments/production.toml
@@ -70,6 +70,7 @@ noon.key_mode = "Live"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-live.sagepay.com/"
 opennode.base_url = "https://api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api.payeezy.com/"
 payme.base_url = "https://live.payme.io/"
 payone.base_url = "https://payment.payone.com/"
diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml
index e79e096436b..730f7829198 100644
--- a/config/deployments/sandbox.toml
+++ b/config/deployments/sandbox.toml
@@ -70,6 +70,7 @@ noon.key_mode = "Test"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-test.sagepay.com/"
 opennode.base_url = "https://dev-api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api-cert.payeezy.com/"
 payme.base_url = "https://sandbox.payme.io/"
 payone.base_url = "https://payment.preprod.payone.com/"
diff --git a/config/development.toml b/config/development.toml
index 108e67e8849..e1b180d300a 100644
--- a/config/development.toml
+++ b/config/development.toml
@@ -135,6 +135,7 @@ cards = [
     "nuvei",
     "opayo",
     "opennode",
+    "paybox",
     "payeezy",
     "payme",
     "payone",
@@ -223,6 +224,7 @@ noon.key_mode = "Test"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-test.sagepay.com/"
 opennode.base_url = "https://dev-api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api-cert.payeezy.com/"
 payme.base_url = "https://sandbox.payme.io/"
 payone.base_url = "https://payment.preprod.payone.com/"
diff --git a/config/docker_compose.toml b/config/docker_compose.toml
index f6cb52803ad..4d8f287a077 100644
--- a/config/docker_compose.toml
+++ b/config/docker_compose.toml
@@ -156,6 +156,7 @@ noon.key_mode = "Test"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-test.sagepay.com/"
 opennode.base_url = "https://dev-api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api-cert.payeezy.com/"
 payme.base_url = "https://sandbox.payme.io/"
 payone.base_url = "https://payment.preprod.payone.com/"
@@ -235,6 +236,7 @@ cards = [
     "nuvei",
     "opayo",
     "opennode",
+    "paybox",
     "payeezy",
     "payme",
     "payone",
diff --git a/crates/api_models/src/enums.rs b/crates/api_models/src/enums.rs
index c87c94084b0..f0405376739 100644
--- a/crates/api_models/src/enums.rs
+++ b/crates/api_models/src/enums.rs
@@ -115,6 +115,7 @@ pub enum Connector {
     Nuvei,
     // Opayo, added as template code for future usage
     Opennode,
+    // Paybox, added as template code for future usage
     // Payeezy, As psync and rsync are not supported by this connector, it is added as template code for future usage
     Payme,
     Payone,
@@ -239,6 +240,7 @@ impl Connector {
             | Self::Nexinets
             | Self::Nuvei
             | Self::Opennode
+			// | Self::Paybox  added as template code for future usage
             | Self::Payme
             | Self::Payone
             | Self::Paypal
diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs
index 2bd2e8c03b9..1f59aa3e131 100644
--- a/crates/common_enums/src/enums.rs
+++ b/crates/common_enums/src/enums.rs
@@ -228,6 +228,7 @@ pub enum RoutableConnectors {
     // Opayo, added as template code for future usage
     Opennode,
     // Payeezy, As psync and rsync are not supported by this connector, it is added as template code for future usage
+    // Paybox, added as template code for future usage
     Payme,
     Payone,
     Paypal,
diff --git a/crates/connector_configs/src/connector.rs b/crates/connector_configs/src/connector.rs
index d4c90248831..bc781e05294 100644
--- a/crates/connector_configs/src/connector.rs
+++ b/crates/connector_configs/src/connector.rs
@@ -174,6 +174,7 @@ pub struct ConnectorConfig {
     pub nmi: Option<ConnectorTomlConfig>,
     pub noon: Option<ConnectorTomlConfig>,
     pub nuvei: Option<ConnectorTomlConfig>,
+    // pub paybox: Option<ConnectorTomlConfig>, added for future usage
     pub payme: Option<ConnectorTomlConfig>,
     #[cfg(feature = "payouts")]
     pub payone_payout: Option<ConnectorTomlConfig>,
@@ -350,6 +351,7 @@ impl ConnectorConfig {
             #[cfg(feature = "dummy_connector")]
             Connector::DummyConnector7 => Ok(connector_data.paypal_test),
             Connector::Netcetera => Ok(connector_data.netcetera),
+            // Connector::Paybox => Ok(connector_data.paybox), added for future usage
         }
     }
 }
diff --git a/crates/hyperswitch_interfaces/src/configs.rs b/crates/hyperswitch_interfaces/src/configs.rs
index 7634c006a7b..cb3fa0313c1 100644
--- a/crates/hyperswitch_interfaces/src/configs.rs
+++ b/crates/hyperswitch_interfaces/src/configs.rs
@@ -56,6 +56,7 @@ pub struct Connectors {
     pub nuvei: ConnectorParams,
     pub opayo: ConnectorParams,
     pub opennode: ConnectorParams,
+    pub paybox: ConnectorParams,
     pub payeezy: ConnectorParams,
     pub payme: ConnectorParams,
     pub payone: ConnectorParams,
diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs
index 7d5fc28e2ba..f97d428c178 100644
--- a/crates/router/src/connector.rs
+++ b/crates/router/src/connector.rs
@@ -37,6 +37,7 @@ pub mod noon;
 pub mod nuvei;
 pub mod opayo;
 pub mod opennode;
+pub mod paybox;
 pub mod payeezy;
 pub mod payme;
 pub mod payone;
@@ -81,10 +82,11 @@ pub use self::{
     globalpay::Globalpay, globepay::Globepay, gocardless::Gocardless, gpayments::Gpayments,
     iatapay::Iatapay, itaubank::Itaubank, klarna::Klarna, mifinity::Mifinity, mollie::Mollie,
     multisafepay::Multisafepay, netcetera::Netcetera, nexinets::Nexinets, nmi::Nmi, noon::Noon,
-    nuvei::Nuvei, opayo::Opayo, opennode::Opennode, payeezy::Payeezy, payme::Payme, payone::Payone,
-    paypal::Paypal, payu::Payu, placetopay::Placetopay, plaid::Plaid, powertranz::Powertranz,
-    prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay, riskified::Riskified, shift4::Shift4,
-    signifyd::Signifyd, square::Square, stripe::Stripe, threedsecureio::Threedsecureio,
-    trustpay::Trustpay, tsys::Tsys, volt::Volt, wellsfargo::Wellsfargo, wise::Wise,
-    worldline::Worldline, worldpay::Worldpay, zen::Zen, zsl::Zsl,
+    nuvei::Nuvei, opayo::Opayo, opennode::Opennode, paybox::Paybox, payeezy::Payeezy, payme::Payme,
+    payone::Payone, paypal::Paypal, payu::Payu, placetopay::Placetopay, plaid::Plaid,
+    powertranz::Powertranz, prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay,
+    riskified::Riskified, shift4::Shift4, signifyd::Signifyd, square::Square, stripe::Stripe,
+    threedsecureio::Threedsecureio, trustpay::Trustpay, tsys::Tsys, volt::Volt,
+    wellsfargo::Wellsfargo, wise::Wise, worldline::Worldline, worldpay::Worldpay, zen::Zen,
+    zsl::Zsl,
 };
diff --git a/crates/router/src/connector/paybox.rs b/crates/router/src/connector/paybox.rs
new file mode 100644
index 00000000000..720f0a00c6a
--- /dev/null
+++ b/crates/router/src/connector/paybox.rs
@@ -0,0 +1,574 @@
+pub mod transformers;
+
+use common_utils::types::{AmountConvertor, MinorUnit, MinorUnitForConnector};
+use error_stack::{report, ResultExt};
+use masking::ExposeInterface;
+use transformers as paybox;
+
+use super::utils::{self as connector_utils};
+use crate::{
+    configs::settings,
+    core::errors::{self, CustomResult},
+    events::connector_api_logs::ConnectorEvent,
+    headers,
+    services::{
+        self,
+        request::{self, Mask},
+        ConnectorIntegration, ConnectorValidation,
+    },
+    types::{
+        self,
+        api::{self, ConnectorCommon, ConnectorCommonExt},
+        ErrorResponse, RequestContent, Response,
+    },
+    utils::BytesExt,
+};
+
+#[derive(Clone)]
+pub struct Paybox {
+    amount_converter: &'static (dyn AmountConvertor<Output = MinorUnit> + Sync),
+}
+
+impl Paybox {
+    pub fn new() -> &'static Self {
+        &Self {
+            amount_converter: &MinorUnitForConnector,
+        }
+    }
+}
+
+impl api::Payment for Paybox {}
+impl api::PaymentSession for Paybox {}
+impl api::ConnectorAccessToken for Paybox {}
+impl api::MandateSetup for Paybox {}
+impl api::PaymentAuthorize for Paybox {}
+impl api::PaymentSync for Paybox {}
+impl api::PaymentCapture for Paybox {}
+impl api::PaymentVoid for Paybox {}
+impl api::Refund for Paybox {}
+impl api::RefundExecute for Paybox {}
+impl api::RefundSync for Paybox {}
+impl api::PaymentToken for Paybox {}
+
+impl
+    ConnectorIntegration<
+        api::PaymentMethodToken,
+        types::PaymentMethodTokenizationData,
+        types::PaymentsResponseData,
+    > for Paybox
+{
+    // Not Implemented (R)
+}
+
+impl<Flow, Request, Response> ConnectorCommonExt<Flow, Request, Response> for Paybox
+where
+    Self: ConnectorIntegration<Flow, Request, Response>,
+{
+    fn build_headers(
+        &self,
+        req: &types::RouterData<Flow, Request, Response>,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        let mut header = vec![(
+            headers::CONTENT_TYPE.to_string(),
+            self.get_content_type().to_string().into(),
+        )];
+        let mut api_key = self.get_auth_header(&req.connector_auth_type)?;
+        header.append(&mut api_key);
+        Ok(header)
+    }
+}
+
+impl ConnectorCommon for Paybox {
+    fn id(&self) -> &'static str {
+        "paybox"
+    }
+
+    // fn get_currency_unit(&self) -> api::CurrencyUnit {
+    //     // todo!()
+    //     //    TODO! Check connector documentation, on which unit they are processing the currency.
+    //     //    If the connector accepts amount in lower unit ( i.e cents for USD) then return api::CurrencyUnit::Minor,
+    //     //    if connector accepts amount in base unit (i.e dollars for USD) then return api::CurrencyUnit::Base
+    // }
+
+    fn common_get_content_type(&self) -> &'static str {
+        "application/json"
+    }
+
+    fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str {
+        connectors.paybox.base_url.as_ref()
+    }
+
+    fn get_auth_header(
+        &self,
+        auth_type: &types::ConnectorAuthType,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        let auth = paybox::PayboxAuthType::try_from(auth_type)
+            .change_context(errors::ConnectorError::FailedToObtainAuthType)?;
+        Ok(vec![(
+            headers::AUTHORIZATION.to_string(),
+            auth.api_key.expose().into_masked(),
+        )])
+    }
+
+    fn build_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        let response: paybox::PayboxErrorResponse = res
+            .response
+            .parse_struct("PayboxErrorResponse")
+            .change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
+
+        event_builder.map(|i| i.set_response_body(&response));
+        router_env::logger::info!(connector_response=?response);
+
+        Ok(ErrorResponse {
+            status_code: res.status_code,
+            code: response.code,
+            message: response.message,
+            reason: response.reason,
+            attempt_status: None,
+            connector_transaction_id: None,
+        })
+    }
+}
+
+impl ConnectorValidation for Paybox {
+    //TODO: implement functions when support enabled
+}
+
+impl ConnectorIntegration<api::Session, types::PaymentsSessionData, types::PaymentsResponseData>
+    for Paybox
+{
+    //TODO: implement sessions flow
+}
+
+impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, types::AccessToken>
+    for Paybox
+{
+}
+
+impl
+    ConnectorIntegration<
+        api::SetupMandate,
+        types::SetupMandateRequestData,
+        types::PaymentsResponseData,
+    > for Paybox
+{
+}
+
+impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::PaymentsResponseData>
+    for Paybox
+{
+    fn get_headers(
+        &self,
+        req: &types::PaymentsAuthorizeRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &types::PaymentsAuthorizeRouterData,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+    }
+
+    fn get_request_body(
+        &self,
+        req: &types::PaymentsAuthorizeRouterData,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<RequestContent, errors::ConnectorError> {
+        let amount = connector_utils::convert_amount(
+            self.amount_converter,
+            req.request.minor_amount,
+            req.request.currency,
+        )?;
+
+        let connector_router_data = paybox::PayboxRouterData::from((amount, req));
+        let connector_req = paybox::PayboxPaymentsRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &types::PaymentsAuthorizeRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        Ok(Some(
+            services::RequestBuilder::new()
+                .method(services::Method::Post)
+                .url(&types::PaymentsAuthorizeType::get_url(
+                    self, req, connectors,
+                )?)
+                .attach_default_headers()
+                .headers(types::PaymentsAuthorizeType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(types::PaymentsAuthorizeType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &types::PaymentsAuthorizeRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<types::PaymentsAuthorizeRouterData, errors::ConnectorError> {
+        let response: paybox::PayboxPaymentsResponse = res
+            .response
+            .parse_struct("Paybox 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 {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsResponseData>
+    for Paybox
+{
+    fn get_headers(
+        &self,
+        req: &types::PaymentsSyncRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &types::PaymentsSyncRouterData,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+    }
+
+    fn build_request(
+        &self,
+        req: &types::PaymentsSyncRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        Ok(Some(
+            services::RequestBuilder::new()
+                .method(services::Method::Get)
+                .url(&types::PaymentsSyncType::get_url(self, req, connectors)?)
+                .attach_default_headers()
+                .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &types::PaymentsSyncRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<types::PaymentsSyncRouterData, errors::ConnectorError> {
+        let response: paybox::PayboxPaymentsResponse = res
+            .response
+            .parse_struct("paybox PaymentsSyncResponse")
+            .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 {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::PaymentsResponseData>
+    for Paybox
+{
+    fn get_headers(
+        &self,
+        req: &types::PaymentsCaptureRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &types::PaymentsCaptureRouterData,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+    }
+
+    fn get_request_body(
+        &self,
+        _req: &types::PaymentsCaptureRouterData,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<RequestContent, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented("get_request_body method".to_string()).into())
+    }
+
+    fn build_request(
+        &self,
+        req: &types::PaymentsCaptureRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        Ok(Some(
+            services::RequestBuilder::new()
+                .method(services::Method::Post)
+                .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?)
+                .attach_default_headers()
+                .headers(types::PaymentsCaptureType::get_headers(
+                    self, req, connectors,
+                )?)
+                .set_body(types::PaymentsCaptureType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &types::PaymentsCaptureRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<types::PaymentsCaptureRouterData, errors::ConnectorError> {
+        let response: paybox::PayboxPaymentsResponse = res
+            .response
+            .parse_struct("Paybox PaymentsCaptureResponse")
+            .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 {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<api::Void, types::PaymentsCancelData, types::PaymentsResponseData>
+    for Paybox
+{
+}
+
+impl ConnectorIntegration<api::Execute, types::RefundsData, types::RefundsResponseData> for Paybox {
+    fn get_headers(
+        &self,
+        req: &types::RefundsRouterData<api::Execute>,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &types::RefundsRouterData<api::Execute>,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+    }
+
+    fn get_request_body(
+        &self,
+        req: &types::RefundsRouterData<api::Execute>,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<RequestContent, errors::ConnectorError> {
+        let refund_amount = connector_utils::convert_amount(
+            self.amount_converter,
+            req.request.minor_refund_amount,
+            req.request.currency,
+        )?;
+
+        let connector_router_data = paybox::PayboxRouterData::from((refund_amount, req));
+        let connector_req = paybox::PayboxRefundRequest::try_from(&connector_router_data)?;
+        Ok(RequestContent::Json(Box::new(connector_req)))
+    }
+
+    fn build_request(
+        &self,
+        req: &types::RefundsRouterData<api::Execute>,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        let request = services::RequestBuilder::new()
+            .method(services::Method::Post)
+            .url(&types::RefundExecuteType::get_url(self, req, connectors)?)
+            .attach_default_headers()
+            .headers(types::RefundExecuteType::get_headers(
+                self, req, connectors,
+            )?)
+            .set_body(types::RefundExecuteType::get_request_body(
+                self, req, connectors,
+            )?)
+            .build();
+        Ok(Some(request))
+    }
+
+    fn handle_response(
+        &self,
+        data: &types::RefundsRouterData<api::Execute>,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<types::RefundsRouterData<api::Execute>, errors::ConnectorError> {
+        let response: paybox::RefundResponse =
+            res.response
+                .parse_struct("paybox RefundResponse")
+                .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 {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponseData> for Paybox {
+    fn get_headers(
+        &self,
+        req: &types::RefundSyncRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Vec<(String, request::Maskable<String>)>, errors::ConnectorError> {
+        self.build_headers(req, connectors)
+    }
+
+    fn get_content_type(&self) -> &'static str {
+        self.common_get_content_type()
+    }
+
+    fn get_url(
+        &self,
+        _req: &types::RefundSyncRouterData,
+        _connectors: &settings::Connectors,
+    ) -> CustomResult<String, errors::ConnectorError> {
+        Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into())
+    }
+
+    fn build_request(
+        &self,
+        req: &types::RefundSyncRouterData,
+        connectors: &settings::Connectors,
+    ) -> CustomResult<Option<services::Request>, errors::ConnectorError> {
+        Ok(Some(
+            services::RequestBuilder::new()
+                .method(services::Method::Get)
+                .url(&types::RefundSyncType::get_url(self, req, connectors)?)
+                .attach_default_headers()
+                .headers(types::RefundSyncType::get_headers(self, req, connectors)?)
+                .set_body(types::RefundSyncType::get_request_body(
+                    self, req, connectors,
+                )?)
+                .build(),
+        ))
+    }
+
+    fn handle_response(
+        &self,
+        data: &types::RefundSyncRouterData,
+        event_builder: Option<&mut ConnectorEvent>,
+        res: Response,
+    ) -> CustomResult<types::RefundSyncRouterData, errors::ConnectorError> {
+        let response: paybox::RefundResponse = res
+            .response
+            .parse_struct("paybox RefundSyncResponse")
+            .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 {
+            response,
+            data: data.clone(),
+            http_code: res.status_code,
+        })
+    }
+
+    fn get_error_response(
+        &self,
+        res: Response,
+        event_builder: Option<&mut ConnectorEvent>,
+    ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
+        self.build_error_response(res, event_builder)
+    }
+}
+
+#[async_trait::async_trait]
+impl api::IncomingWebhook for Paybox {
+    fn get_webhook_object_reference_id(
+        &self,
+        _request: &api::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api::webhooks::ObjectReferenceId, errors::ConnectorError> {
+        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
+    }
+
+    fn get_webhook_event_type(
+        &self,
+        _request: &api::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<api::IncomingWebhookEvent, errors::ConnectorError> {
+        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
+    }
+
+    fn get_webhook_resource_object(
+        &self,
+        _request: &api::IncomingWebhookRequestDetails<'_>,
+    ) -> CustomResult<Box<dyn masking::ErasedMaskSerialize>, errors::ConnectorError> {
+        Err(report!(errors::ConnectorError::WebhooksNotImplemented))
+    }
+}
diff --git a/crates/router/src/connector/paybox/transformers.rs b/crates/router/src/connector/paybox/transformers.rs
new file mode 100644
index 00000000000..d83c4261c19
--- /dev/null
+++ b/crates/router/src/connector/paybox/transformers.rs
@@ -0,0 +1,226 @@
+use common_utils::types::MinorUnit;
+use masking::Secret;
+use serde::{Deserialize, Serialize};
+
+use crate::{
+    connector::utils::PaymentsAuthorizeRequestData,
+    core::errors,
+    types::{self, api, domain, storage::enums},
+};
+
+//TODO: Fill the struct with respective fields
+pub struct PayboxRouterData<T> {
+    pub amount: MinorUnit, // The type of amount that a connector accepts, for example, String, i64, f64, etc.
+    pub router_data: T,
+}
+
+impl<T> From<(MinorUnit, T)> for PayboxRouterData<T> {
+    fn from((amount, item): (MinorUnit, T)) -> Self {
+        //Todo :  use utils to convert the amount to the type of amount that a connector accepts
+        Self {
+            amount,
+            router_data: item,
+        }
+    }
+}
+
+//TODO: Fill the struct with respective fields
+#[derive(Default, Debug, Serialize, PartialEq)]
+pub struct PayboxPaymentsRequest {
+    amount: MinorUnit,
+    card: PayboxCard,
+}
+
+#[derive(Default, Debug, Serialize, Eq, PartialEq)]
+pub struct PayboxCard {
+    number: cards::CardNumber,
+    expiry_month: Secret<String>,
+    expiry_year: Secret<String>,
+    cvc: Secret<String>,
+    complete: bool,
+}
+
+impl TryFrom<&PayboxRouterData<&types::PaymentsAuthorizeRouterData>> for PayboxPaymentsRequest {
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(
+        item: &PayboxRouterData<&types::PaymentsAuthorizeRouterData>,
+    ) -> Result<Self, Self::Error> {
+        match item.router_data.request.payment_method_data.clone() {
+            domain::PaymentMethodData::Card(req_card) => {
+                let card = PayboxCard {
+                    number: req_card.card_number,
+                    expiry_month: req_card.card_exp_month,
+                    expiry_year: req_card.card_exp_year,
+                    cvc: req_card.card_cvc,
+                    complete: item.router_data.request.is_auto_capture()?,
+                };
+                Ok(Self {
+                    amount: item.amount,
+                    card,
+                })
+            }
+            _ => Err(errors::ConnectorError::NotImplemented("Payment methods".to_string()).into()),
+        }
+    }
+}
+
+//TODO: Fill the struct with respective fields
+// Auth Struct
+pub struct PayboxAuthType {
+    pub(super) api_key: Secret<String>,
+}
+
+impl TryFrom<&types::ConnectorAuthType> for PayboxAuthType {
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(auth_type: &types::ConnectorAuthType) -> Result<Self, Self::Error> {
+        match auth_type {
+            types::ConnectorAuthType::HeaderKey { api_key } => Ok(Self {
+                api_key: api_key.to_owned(),
+            }),
+            _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()),
+        }
+    }
+}
+// PaymentsResponse
+//TODO: Append the remaining status flags
+#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
+#[serde(rename_all = "lowercase")]
+pub enum PayboxPaymentStatus {
+    Succeeded,
+    Failed,
+    #[default]
+    Processing,
+}
+
+impl From<PayboxPaymentStatus> for enums::AttemptStatus {
+    fn from(item: PayboxPaymentStatus) -> Self {
+        match item {
+            PayboxPaymentStatus::Succeeded => Self::Charged,
+            PayboxPaymentStatus::Failed => Self::Failure,
+            PayboxPaymentStatus::Processing => Self::Authorizing,
+        }
+    }
+}
+
+//TODO: Fill the struct with respective fields
+#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq)]
+pub struct PayboxPaymentsResponse {
+    status: PayboxPaymentStatus,
+    id: String,
+}
+
+impl<F, T>
+    TryFrom<types::ResponseRouterData<F, PayboxPaymentsResponse, T, types::PaymentsResponseData>>
+    for types::RouterData<F, T, types::PaymentsResponseData>
+{
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(
+        item: types::ResponseRouterData<F, PayboxPaymentsResponse, T, types::PaymentsResponseData>,
+    ) -> Result<Self, Self::Error> {
+        Ok(Self {
+            status: enums::AttemptStatus::from(item.response.status),
+            response: Ok(types::PaymentsResponseData::TransactionResponse {
+                resource_id: types::ResponseId::ConnectorTransactionId(item.response.id),
+                redirection_data: None,
+                mandate_reference: None,
+                connector_metadata: None,
+                network_txn_id: None,
+                connector_response_reference_id: None,
+                incremental_authorization_allowed: None,
+                charge_id: None,
+            }),
+            ..item.data
+        })
+    }
+}
+
+//TODO: Fill the struct with respective fields
+// REFUND :
+// Type definition for RefundRequest
+#[derive(Default, Debug, Serialize)]
+pub struct PayboxRefundRequest {
+    pub amount: MinorUnit,
+}
+
+impl<F> TryFrom<&PayboxRouterData<&types::RefundsRouterData<F>>> for PayboxRefundRequest {
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(
+        item: &PayboxRouterData<&types::RefundsRouterData<F>>,
+    ) -> Result<Self, Self::Error> {
+        Ok(Self {
+            amount: item.amount.to_owned(),
+        })
+    }
+}
+
+// Type definition for Refund Response
+
+#[allow(dead_code)]
+#[derive(Debug, Serialize, Default, Deserialize, Clone)]
+pub enum RefundStatus {
+    Succeeded,
+    Failed,
+    #[default]
+    Processing,
+}
+
+impl From<RefundStatus> for enums::RefundStatus {
+    fn from(item: RefundStatus) -> Self {
+        match item {
+            RefundStatus::Succeeded => Self::Success,
+            RefundStatus::Failed => Self::Failure,
+            RefundStatus::Processing => Self::Pending,
+            //TODO: Review mapping
+        }
+    }
+}
+
+//TODO: Fill the struct with respective fields
+#[derive(Default, Debug, Clone, Serialize, Deserialize)]
+pub struct RefundResponse {
+    id: String,
+    status: RefundStatus,
+}
+
+impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
+    for types::RefundsRouterData<api::Execute>
+{
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(
+        item: types::RefundsResponseRouterData<api::Execute, RefundResponse>,
+    ) -> Result<Self, Self::Error> {
+        Ok(Self {
+            response: Ok(types::RefundsResponseData {
+                connector_refund_id: item.response.id.to_string(),
+                refund_status: enums::RefundStatus::from(item.response.status),
+            }),
+            ..item.data
+        })
+    }
+}
+
+impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundResponse>>
+    for types::RefundsRouterData<api::RSync>
+{
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(
+        item: types::RefundsResponseRouterData<api::RSync, RefundResponse>,
+    ) -> Result<Self, Self::Error> {
+        Ok(Self {
+            response: Ok(types::RefundsResponseData {
+                connector_refund_id: item.response.id.to_string(),
+                refund_status: enums::RefundStatus::from(item.response.status),
+            }),
+            ..item.data
+        })
+    }
+}
+
+//TODO: Fill the struct with respective fields
+#[derive(Default, Debug, Serialize, Deserialize, PartialEq)]
+pub struct PayboxErrorResponse {
+    pub status_code: u16,
+    pub code: String,
+    pub message: String,
+    pub reason: Option<String>,
+}
diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs
index 530f8579507..964c24cc838 100644
--- a/crates/router/src/core/admin.rs
+++ b/crates/router/src/core/admin.rs
@@ -1420,6 +1420,7 @@ impl<'a> ConnectorAuthTypeAndMetadataValidation<'a> {
                 opennode::transformers::OpennodeAuthType::try_from(self.auth_type)?;
                 Ok(())
             }
+            // api_enums::Connector::Paybox => todo!(), added for future usage
             api_enums::Connector::Payme => {
                 payme::transformers::PaymeAuthType::try_from(self.auth_type)?;
                 Ok(())
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 4090dc40462..92ec7c0094d 100644
--- a/crates/router/src/core/payments/connector_integration_v2_impls.rs
+++ b/crates/router/src/core/payments/connector_integration_v2_impls.rs
@@ -671,6 +671,7 @@ default_imp_for_new_connector_integration_payment!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -753,6 +754,7 @@ default_imp_for_new_connector_integration_refund!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -830,6 +832,7 @@ default_imp_for_new_connector_integration_connector_access_token!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -929,6 +932,7 @@ default_imp_for_new_connector_integration_accept_dispute!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1010,6 +1014,7 @@ default_imp_for_new_connector_integration_defend_dispute!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1075,6 +1080,7 @@ default_imp_for_new_connector_integration_submit_evidence!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1167,6 +1173,7 @@ default_imp_for_new_connector_integration_file_upload!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1245,6 +1252,7 @@ default_imp_for_new_connector_integration_payouts!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1330,6 +1338,7 @@ default_imp_for_new_connector_integration_payouts_create!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1414,6 +1423,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1498,6 +1508,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1582,6 +1593,7 @@ default_imp_for_new_connector_integration_payouts_cancel!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1666,6 +1678,7 @@ default_imp_for_new_connector_integration_payouts_quote!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1750,6 +1763,7 @@ default_imp_for_new_connector_integration_payouts_recipient!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1834,6 +1848,7 @@ default_imp_for_new_connector_integration_payouts_sync!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1918,6 +1933,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2000,6 +2016,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2078,6 +2095,7 @@ default_imp_for_new_connector_integration_frm!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2163,6 +2181,7 @@ default_imp_for_new_connector_integration_frm_sale!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2247,6 +2266,7 @@ default_imp_for_new_connector_integration_frm_checkout!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2331,6 +2351,7 @@ default_imp_for_new_connector_integration_frm_transaction!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2415,6 +2436,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2499,6 +2521,7 @@ default_imp_for_new_connector_integration_frm_record_return!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2580,6 +2603,7 @@ default_imp_for_new_connector_integration_revoking_mandates!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2693,6 +2717,7 @@ default_imp_for_new_connector_integration_connector_authentication!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs
index af56c7e4ba6..f5abd22480b 100644
--- a/crates/router/src/core/payments/flows.rs
+++ b/crates/router/src/core/payments/flows.rs
@@ -214,6 +214,7 @@ default_imp_for_complete_authorize!(
     connector::Noon,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payone,
     connector::Payu,
@@ -300,6 +301,7 @@ default_imp_for_webhook_source_verification!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -391,6 +393,7 @@ default_imp_for_create_customer!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -475,6 +478,7 @@ default_imp_for_connector_redirect_response!(
     connector::Nexinets,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payone,
     connector::Payu,
@@ -550,6 +554,7 @@ default_imp_for_connector_request_id!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -645,6 +650,7 @@ default_imp_for_accept_dispute!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -758,6 +764,7 @@ default_imp_for_file_upload!(
     connector::Noon,
     connector::Nuvei,
     connector::Opayo,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -849,6 +856,7 @@ default_imp_for_submit_evidence!(
     connector::Noon,
     connector::Nuvei,
     connector::Opayo,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -940,6 +948,7 @@ default_imp_for_defend_dispute!(
     connector::Noon,
     connector::Nuvei,
     connector::Opayo,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1043,6 +1052,7 @@ default_imp_for_pre_processing_steps!(
     connector::Noon,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payone,
     connector::Payu,
@@ -1121,6 +1131,7 @@ default_imp_for_post_processing_steps!(
     connector::Noon,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payone,
     connector::Payu,
@@ -1192,6 +1203,7 @@ default_imp_for_payouts!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payu,
@@ -1281,6 +1293,7 @@ default_imp_for_payouts_create!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1372,6 +1385,7 @@ default_imp_for_payouts_retrieve!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1466,6 +1480,7 @@ default_imp_for_payouts_eligibility!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1555,6 +1570,7 @@ default_imp_for_payouts_fulfill!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payu,
@@ -1643,6 +1659,7 @@ default_imp_for_payouts_cancel!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1734,6 +1751,7 @@ default_imp_for_payouts_quote!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1826,6 +1844,7 @@ default_imp_for_payouts_recipient!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -1921,6 +1940,7 @@ default_imp_for_payouts_recipient_account!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2013,6 +2033,7 @@ default_imp_for_approve!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2106,6 +2127,7 @@ default_imp_for_reject!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2187,6 +2209,7 @@ default_imp_for_fraud_check!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2281,6 +2304,7 @@ default_imp_for_frm_sale!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2374,6 +2398,7 @@ default_imp_for_frm_checkout!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2467,6 +2492,7 @@ default_imp_for_frm_transaction!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2560,6 +2586,7 @@ default_imp_for_frm_fulfillment!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2653,6 +2680,7 @@ default_imp_for_frm_record_return!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2743,6 +2771,7 @@ default_imp_for_incremental_authorization!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2832,6 +2861,7 @@ default_imp_for_revoking_mandates!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -2986,6 +3016,7 @@ default_imp_for_connector_authentication!(
     connector::Nuvei,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
@@ -3075,6 +3106,7 @@ default_imp_for_authorize_session_token!(
     connector::Noon,
     connector::Opayo,
     connector::Opennode,
+    connector::Paybox,
     connector::Payeezy,
     connector::Payme,
     connector::Payone,
diff --git a/crates/router/src/types/api.rs b/crates/router/src/types/api.rs
index e117f8c290a..c85b60d13d4 100644
--- a/crates/router/src/types/api.rs
+++ b/crates/router/src/types/api.rs
@@ -399,6 +399,7 @@ impl ConnectorData {
                 enums::Connector::Opennode => {
                     Ok(ConnectorEnum::Old(Box::new(&connector::Opennode)))
                 }
+                // enums::Connector::Paybox => Ok(ConnectorEnum::Old(Box::new(connector::Paybox::new()))), // added for future use
                 // "payeezy" => Ok(ConnectorIntegrationEnum::Old(Box::new(&connector::Payeezy)), As psync and rsync are not supported by this connector, it is added as template code for future usage
                 enums::Connector::Payme => {
                     Ok(ConnectorEnum::Old(Box::new(connector::Payme::new())))
diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs
index 83518cfbc3d..ce59a85dc9b 100644
--- a/crates/router/src/types/transformers.rs
+++ b/crates/router/src/types/transformers.rs
@@ -270,6 +270,7 @@ impl ForeignTryFrom<api_enums::Connector> for common_enums::RoutableConnectors {
             api_enums::Connector::Noon => Self::Noon,
             api_enums::Connector::Nuvei => Self::Nuvei,
             api_enums::Connector::Opennode => Self::Opennode,
+            // api_enums::Connector::Paybox => Self::Paybox, added for future usage
             api_enums::Connector::Payme => Self::Payme,
             api_enums::Connector::Payone => Self::Payone,
             api_enums::Connector::Paypal => Self::Paypal,
diff --git a/crates/router/tests/connectors/main.rs b/crates/router/tests/connectors/main.rs
index bbf2077f0c9..a701f11748e 100644
--- a/crates/router/tests/connectors/main.rs
+++ b/crates/router/tests/connectors/main.rs
@@ -50,6 +50,7 @@ mod nuvei;
 #[cfg(feature = "dummy_connector")]
 mod opayo;
 mod opennode;
+mod paybox;
 #[cfg(feature = "dummy_connector")]
 mod payeezy;
 mod payme;
diff --git a/crates/router/tests/connectors/paybox.rs b/crates/router/tests/connectors/paybox.rs
new file mode 100644
index 00000000000..0741e3a1a37
--- /dev/null
+++ b/crates/router/tests/connectors/paybox.rs
@@ -0,0 +1,420 @@
+use masking::Secret;
+use router::types::{self, api, domain, storage::enums};
+use test_utils::connector_auth;
+
+use crate::utils::{self, ConnectorActions};
+
+#[derive(Clone, Copy)]
+struct PayboxTest;
+impl ConnectorActions for PayboxTest {}
+impl utils::Connector for PayboxTest {
+    fn get_data(&self) -> api::ConnectorData {
+        use router::connector::Paybox;
+        utils::construct_connector_data_old(
+            Box::new(Paybox::new()),
+            types::Connector::Plaid,
+            api::GetToken::Connector,
+            None,
+        )
+    }
+
+    fn get_auth_token(&self) -> types::ConnectorAuthType {
+        utils::to_connector_auth_type(
+            connector_auth::ConnectorAuthentication::new()
+                .paybox
+                .expect("Missing connector authentication configuration")
+                .into(),
+        )
+    }
+
+    fn get_name(&self) -> String {
+        "paybox".to_string()
+    }
+}
+
+static CONNECTOR: PayboxTest = PayboxTest {};
+
+fn get_default_payment_info() -> Option<utils::PaymentInfo> {
+    None
+}
+
+fn payment_method_details() -> Option<types::PaymentsAuthorizeData> {
+    None
+}
+
+// Cards Positive Tests
+// Creates a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_only_authorize_payment() {
+    let response = CONNECTOR
+        .authorize_payment(payment_method_details(), get_default_payment_info())
+        .await
+        .expect("Authorize payment response");
+    assert_eq!(response.status, enums::AttemptStatus::Authorized);
+}
+
+// Captures a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_capture_authorized_payment() {
+    let response = CONNECTOR
+        .authorize_and_capture_payment(payment_method_details(), None, get_default_payment_info())
+        .await
+        .expect("Capture payment response");
+    assert_eq!(response.status, enums::AttemptStatus::Charged);
+}
+
+// Partially captures a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_partially_capture_authorized_payment() {
+    let response = CONNECTOR
+        .authorize_and_capture_payment(
+            payment_method_details(),
+            Some(types::PaymentsCaptureData {
+                amount_to_capture: 50,
+                ..utils::PaymentCaptureType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .expect("Capture payment response");
+    assert_eq!(response.status, enums::AttemptStatus::Charged);
+}
+
+// Synchronizes a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_sync_authorized_payment() {
+    let authorize_response = CONNECTOR
+        .authorize_payment(payment_method_details(), get_default_payment_info())
+        .await
+        .expect("Authorize payment response");
+    let txn_id = utils::get_connector_transaction_id(authorize_response.response);
+    let response = CONNECTOR
+        .psync_retry_till_status_matches(
+            enums::AttemptStatus::Authorized,
+            Some(types::PaymentsSyncData {
+                connector_transaction_id: types::ResponseId::ConnectorTransactionId(
+                    txn_id.unwrap(),
+                ),
+                ..Default::default()
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .expect("PSync response");
+    assert_eq!(response.status, enums::AttemptStatus::Authorized,);
+}
+
+// Voids a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_void_authorized_payment() {
+    let response = CONNECTOR
+        .authorize_and_void_payment(
+            payment_method_details(),
+            Some(types::PaymentsCancelData {
+                connector_transaction_id: String::from(""),
+                cancellation_reason: Some("requested_by_customer".to_string()),
+                ..Default::default()
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .expect("Void payment response");
+    assert_eq!(response.status, enums::AttemptStatus::Voided);
+}
+
+// Refunds a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_refund_manually_captured_payment() {
+    let response = CONNECTOR
+        .capture_payment_and_refund(
+            payment_method_details(),
+            None,
+            None,
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap().refund_status,
+        enums::RefundStatus::Success,
+    );
+}
+
+// Partially refunds a payment using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_partially_refund_manually_captured_payment() {
+    let response = CONNECTOR
+        .capture_payment_and_refund(
+            payment_method_details(),
+            None,
+            Some(types::RefundsData {
+                refund_amount: 50,
+                ..utils::PaymentRefundType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap().refund_status,
+        enums::RefundStatus::Success,
+    );
+}
+
+// Synchronizes a refund using the manual capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_sync_manually_captured_refund() {
+    let refund_response = CONNECTOR
+        .capture_payment_and_refund(
+            payment_method_details(),
+            None,
+            None,
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    let response = CONNECTOR
+        .rsync_retry_till_status_matches(
+            enums::RefundStatus::Success,
+            refund_response.response.unwrap().connector_refund_id,
+            None,
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap().refund_status,
+        enums::RefundStatus::Success,
+    );
+}
+
+// Creates a payment using the automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_make_payment() {
+    let authorize_response = CONNECTOR
+        .make_payment(payment_method_details(), get_default_payment_info())
+        .await
+        .unwrap();
+    assert_eq!(authorize_response.status, enums::AttemptStatus::Charged);
+}
+
+// Synchronizes a payment using the automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_sync_auto_captured_payment() {
+    let authorize_response = CONNECTOR
+        .make_payment(payment_method_details(), get_default_payment_info())
+        .await
+        .unwrap();
+    assert_eq!(authorize_response.status, enums::AttemptStatus::Charged);
+    let txn_id = utils::get_connector_transaction_id(authorize_response.response);
+    assert_ne!(txn_id, None, "Empty connector transaction id");
+    let response = CONNECTOR
+        .psync_retry_till_status_matches(
+            enums::AttemptStatus::Charged,
+            Some(types::PaymentsSyncData {
+                connector_transaction_id: types::ResponseId::ConnectorTransactionId(
+                    txn_id.unwrap(),
+                ),
+                capture_method: Some(enums::CaptureMethod::Automatic),
+                ..Default::default()
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(response.status, enums::AttemptStatus::Charged,);
+}
+
+// Refunds a payment using the automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_refund_auto_captured_payment() {
+    let response = CONNECTOR
+        .make_payment_and_refund(payment_method_details(), None, get_default_payment_info())
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap().refund_status,
+        enums::RefundStatus::Success,
+    );
+}
+
+// Partially refunds a payment using the automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_partially_refund_succeeded_payment() {
+    let refund_response = CONNECTOR
+        .make_payment_and_refund(
+            payment_method_details(),
+            Some(types::RefundsData {
+                refund_amount: 50,
+                ..utils::PaymentRefundType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        refund_response.response.unwrap().refund_status,
+        enums::RefundStatus::Success,
+    );
+}
+
+// Creates multiple refunds against a payment using the automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_refund_succeeded_payment_multiple_times() {
+    CONNECTOR
+        .make_payment_and_multiple_refund(
+            payment_method_details(),
+            Some(types::RefundsData {
+                refund_amount: 50,
+                ..utils::PaymentRefundType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await;
+}
+
+// Synchronizes a refund using the automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_sync_refund() {
+    let refund_response = CONNECTOR
+        .make_payment_and_refund(payment_method_details(), None, get_default_payment_info())
+        .await
+        .unwrap();
+    let response = CONNECTOR
+        .rsync_retry_till_status_matches(
+            enums::RefundStatus::Success,
+            refund_response.response.unwrap().connector_refund_id,
+            None,
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap().refund_status,
+        enums::RefundStatus::Success,
+    );
+}
+
+// Cards Negative scenarios
+// Creates a payment with incorrect CVC.
+#[actix_web::test]
+async fn should_fail_payment_for_incorrect_cvc() {
+    let response = CONNECTOR
+        .make_payment(
+            Some(types::PaymentsAuthorizeData {
+                payment_method_data: domain::PaymentMethodData::Card(domain::Card {
+                    card_cvc: Secret::new("12345".to_string()),
+                    ..utils::CCardType::default().0
+                }),
+                ..utils::PaymentAuthorizeType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap_err().message,
+        "Your card's security code is invalid.".to_string(),
+    );
+}
+
+// Creates a payment with incorrect expiry month.
+#[actix_web::test]
+async fn should_fail_payment_for_invalid_exp_month() {
+    let response = CONNECTOR
+        .make_payment(
+            Some(types::PaymentsAuthorizeData {
+                payment_method_data: domain::PaymentMethodData::Card(domain::Card {
+                    card_exp_month: Secret::new("20".to_string()),
+                    ..utils::CCardType::default().0
+                }),
+                ..utils::PaymentAuthorizeType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap_err().message,
+        "Your card's expiration month is invalid.".to_string(),
+    );
+}
+
+// Creates a payment with incorrect expiry year.
+#[actix_web::test]
+async fn should_fail_payment_for_incorrect_expiry_year() {
+    let response = CONNECTOR
+        .make_payment(
+            Some(types::PaymentsAuthorizeData {
+                payment_method_data: domain::PaymentMethodData::Card(domain::Card {
+                    card_exp_year: Secret::new("2000".to_string()),
+                    ..utils::CCardType::default().0
+                }),
+                ..utils::PaymentAuthorizeType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap_err().message,
+        "Your card's expiration year is invalid.".to_string(),
+    );
+}
+
+// Voids a payment using automatic capture flow (Non 3DS).
+#[actix_web::test]
+async fn should_fail_void_payment_for_auto_capture() {
+    let authorize_response = CONNECTOR
+        .make_payment(payment_method_details(), get_default_payment_info())
+        .await
+        .unwrap();
+    assert_eq!(authorize_response.status, enums::AttemptStatus::Charged);
+    let txn_id = utils::get_connector_transaction_id(authorize_response.response);
+    assert_ne!(txn_id, None, "Empty connector transaction id");
+    let void_response = CONNECTOR
+        .void_payment(txn_id.unwrap(), None, get_default_payment_info())
+        .await
+        .unwrap();
+    assert_eq!(
+        void_response.response.unwrap_err().message,
+        "You cannot cancel this PaymentIntent because it has a status of succeeded."
+    );
+}
+
+// Captures a payment using invalid connector payment id.
+#[actix_web::test]
+async fn should_fail_capture_for_invalid_payment() {
+    let capture_response = CONNECTOR
+        .capture_payment("123456789".to_string(), None, get_default_payment_info())
+        .await
+        .unwrap();
+    assert_eq!(
+        capture_response.response.unwrap_err().message,
+        String::from("No such payment_intent: '123456789'")
+    );
+}
+
+// Refunds a payment with refund amount higher than payment amount.
+#[actix_web::test]
+async fn should_fail_for_refund_amount_higher_than_payment_amount() {
+    let response = CONNECTOR
+        .make_payment_and_refund(
+            payment_method_details(),
+            Some(types::RefundsData {
+                refund_amount: 150,
+                ..utils::PaymentRefundType::default().0
+            }),
+            get_default_payment_info(),
+        )
+        .await
+        .unwrap();
+    assert_eq!(
+        response.response.unwrap_err().message,
+        "Refund amount (₹1.50) is greater than charge amount (₹1.00)",
+    );
+}
+
+// Connector dependent test cases goes here
+
+// [#478]: add unit tests for non 3DS, wallets & webhooks in connector tests
diff --git a/crates/router/tests/connectors/sample_auth.toml b/crates/router/tests/connectors/sample_auth.toml
index 0df5cc09b07..278bffa6aed 100644
--- a/crates/router/tests/connectors/sample_auth.toml
+++ b/crates/router/tests/connectors/sample_auth.toml
@@ -253,4 +253,7 @@ api_key="API Key"
 [wellsfargo]
 api_key = "MyApiKey"
 key1 = "Merchant id"
-api_secret = "Secret key"
\ No newline at end of file
+api_secret = "Secret key"
+
+[paybox]
+api_key="API Key"
diff --git a/crates/test_utils/src/connector_auth.rs b/crates/test_utils/src/connector_auth.rs
index 13d7da931f6..154e4e28fd0 100644
--- a/crates/test_utils/src/connector_auth.rs
+++ b/crates/test_utils/src/connector_auth.rs
@@ -54,6 +54,7 @@ pub struct ConnectorAuthentication {
     pub nuvei: Option<SignatureKey>,
     pub opayo: Option<HeaderKey>,
     pub opennode: Option<HeaderKey>,
+    pub paybox: Option<HeaderKey>,
     pub payeezy: Option<SignatureKey>,
     pub payme: Option<BodyKey>,
     pub payone: Option<HeaderKey>,
diff --git a/loadtest/config/development.toml b/loadtest/config/development.toml
index b09958f02f3..d64d246dff2 100644
--- a/loadtest/config/development.toml
+++ b/loadtest/config/development.toml
@@ -121,6 +121,7 @@ noon.key_mode = "Test"
 nuvei.base_url = "https://ppp-test.nuvei.com/"
 opayo.base_url = "https://pi-test.sagepay.com/"
 opennode.base_url = "https://dev-api.opennode.com"
+paybox.base_url = "https://preprod-ppps.paybox.com/PPPS.php"
 payeezy.base_url = "https://api-cert.payeezy.com/"
 payme.base_url = "https://sandbox.payme.io/"
 payone.base_url = "https://payment.preprod.payone.com/"
@@ -200,6 +201,7 @@ cards = [
     "nuvei",
     "opayo",
     "opennode",
+    "paybox",
     "payeezy",
     "payme",
     "payone",
diff --git a/scripts/add_connector.sh b/scripts/add_connector.sh
index 62a6140fcc2..b29972b9e3b 100755
--- a/scripts/add_connector.sh
+++ b/scripts/add_connector.sh
@@ -6,7 +6,7 @@ function find_prev_connector() {
     git checkout $self
     cp $self $self.tmp
     # Add new connector to existing list and sort it
-    connectors=(aci adyen adyenplatform airwallex applepay authorizedotnet bambora bamboraapac bankofamerica billwerk bitpay bluesnap boku braintree cashtocode checkout coinbase cryptopay cybersource datatrans dlocal dummyconnector ebanx fiserv forte globalpay globepay gocardless gpayments helcim iatapay itaubank klarna mifinity mollie multisafepay netcetera nexinets noon nuvei opayo opennode payeezy payme payone paypal payu placetopay plaid powertranz prophetpay rapyd razorpay shift4 square stax stripe threedsecureio trustpay tsys volt wellsfargo wise worldline worldpay zsl "$1")
+    connectors=(aci adyen adyenplatform airwallex applepay authorizedotnet bambora bamboraapac bankofamerica billwerk bitpay bluesnap boku braintree cashtocode checkout coinbase cryptopay cybersource datatrans dlocal dummyconnector ebanx fiserv forte globalpay globepay gocardless gpayments helcim iatapay itaubank klarna mifinity mollie multisafepay netcetera nexinets noon nuvei opayo opennode paybox payeezy payme payone paypal payu placetopay plaid powertranz prophetpay rapyd razorpay shift4 square stax stripe threedsecureio trustpay tsys volt wellsfargo wise worldline worldpay zsl "$1")
     IFS=$'\n' sorted=($(sort <<<"${connectors[*]}")); unset IFS
     res=`echo ${sorted[@]}`
     sed -i'' -e "s/^    connectors=.*/    connectors=($res \"\$1\")/" $self.tmp

## Type of Change
<!-- Put an `x` in the boxes that apply -->
- [x] New feature

## Description
<!-- Describe your changes in detail -->
Template code for Paybox

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->
https://github.com/juspay/hyperswitch/issues/5489

## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
This is template code so, no api testing required

## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I formatted the code `cargo +nightly fmt --all`
- [x] I addressed lints thrown by `cargo clippy`
- [x] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
