Bug: [FEATURE]: Implement Skrill wallet Payment Method



Implement Skrill wallet Payment Method 
diff --git a/Cargo.lock b/Cargo.lock
index 196c7b9820b..491f77bf391 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1,6 +1,6 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
-version = 3
+version = 4
 
 [[package]]
 name = "actix-codec"
@@ -1970,6 +1970,7 @@ dependencies = [
  "api_models",
  "common_utils",
  "serde",
+ "serde_json",
  "serde_with",
  "toml 0.8.22",
  "utoipa",
diff --git a/crates/connector_configs/Cargo.toml b/crates/connector_configs/Cargo.toml
index 08a8a149c6d..d322c891277 100644
--- a/crates/connector_configs/Cargo.toml
+++ b/crates/connector_configs/Cargo.toml
@@ -21,6 +21,7 @@ common_utils = { version = "0.1.0", path = "../common_utils" }
 
 # Third party crates
 serde = { version = "1.0.219", features = ["derive"] }
+serde_json = "1.0.140"
 serde_with = "3.12.0"
 toml = "0.8.22"
 utoipa = { version = "4.2.3", features = ["preserve_order", "preserve_path_order"] }
diff --git a/crates/connector_configs/src/common_config.rs b/crates/connector_configs/src/common_config.rs
index b54d9e86da8..be97726a194 100644
--- a/crates/connector_configs/src/common_config.rs
+++ b/crates/connector_configs/src/common_config.rs
@@ -110,7 +110,7 @@ pub struct ApiModelMetaData {
     pub merchant_configuration_id: Option<String>,
     pub tenant_id: Option<String>,
     pub platform_url: Option<String>,
-    pub account_id: Option<String>,
+    pub account_id: Option<serde_json::Value>,
 }
 
 #[serde_with::skip_serializing_none]
diff --git a/crates/connector_configs/src/connector.rs b/crates/connector_configs/src/connector.rs
index 0a521f7a864..a69ad5e278e 100644
--- a/crates/connector_configs/src/connector.rs
+++ b/crates/connector_configs/src/connector.rs
@@ -115,10 +115,19 @@ pub struct AccountIdConfigForCard {
     pub no_three_ds: Option<Vec<InputData>>,
 }
 
+#[serde_with::skip_serializing_none]
+#[derive(Debug, Deserialize, Serialize, Clone)]
+pub struct AccountIdConfigForRedirect {
+    pub three_ds: Option<Vec<InputData>>,
+}
+
 #[serde_with::skip_serializing_none]
 #[derive(Debug, Deserialize, Serialize, Clone)]
 pub struct AccountIDSupportedMethods {
     card: HashMap<String, AccountIdConfigForCard>,
+    skrill: HashMap<String, AccountIdConfigForRedirect>,
+    interac: HashMap<String, AccountIdConfigForRedirect>,
+    pay_safe_card: HashMap<String, AccountIdConfigForRedirect>,
 }
 
 #[serde_with::skip_serializing_none]
diff --git a/crates/connector_configs/toml/development.toml b/crates/connector_configs/toml/development.toml
index 0f9fa995409..7545372876d 100644
--- a/crates/connector_configs/toml/development.toml
+++ b/crates/connector_configs/toml/development.toml
@@ -6834,29 +6834,71 @@ key1 = "Password"
 [paysafe.connector_webhook_details]
 merchant_secret = "Source verification key"
 [[paysafe.metadata.account_id.card.USD.three_ds]]
-name="account_id"
+name="three_ds"
 label="ThreeDS account id"
 placeholder="Enter ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.USD.no_three_ds]]
 name="no_three_ds"
 label="Non ThreeDS account id"
 placeholder="Enter Non ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.EUR.three_ds]]
-name="account_id"
+name="three_ds"
 label="ThreeDS account id"
 placeholder="Enter ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.EUR.no_three_ds]]
 name="no_three_ds"
 label="Non ThreeDS account id"
 placeholder="Enter Non ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
+[[paysafe.metadata.account_id.interac.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.USD.three_ds]]
+name="three_ds"
+label="USD"
+placeholder="Enter usd Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.EUR.three_ds]]
+name="three_ds"
+label="EUR"
+placeholder="Enter eur Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.USD.three_ds]]
+name="three_ds"
+label="USD"
+placeholder="Enter usd Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.EUR.three_ds]]
+name="three_ds"
+label="EUR"
+placeholder="Enter eur Account ID"
+required=true
+type="Text"
 
 [peachpayments]
 [[peachpayments.credit]]
diff --git a/crates/connector_configs/toml/production.toml b/crates/connector_configs/toml/production.toml
index 96d473a386c..aef577cafa2 100644
--- a/crates/connector_configs/toml/production.toml
+++ b/crates/connector_configs/toml/production.toml
@@ -5503,29 +5503,71 @@ key1 = "Password"
 [paysafe.connector_webhook_details]
 merchant_secret = "Source verification key"
 [[paysafe.metadata.account_id.card.USD.three_ds]]
-name="account_id"
+name="three_ds"
 label="ThreeDS account id"
 placeholder="Enter ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.USD.no_three_ds]]
 name="no_three_ds"
 label="Non ThreeDS account id"
 placeholder="Enter Non ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.EUR.three_ds]]
-name="account_id"
+name="three_ds"
 label="ThreeDS account id"
 placeholder="Enter ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.EUR.no_three_ds]]
 name="no_three_ds"
 label="Non ThreeDS account id"
 placeholder="Enter Non ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
+[[paysafe.metadata.account_id.interac.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.USD.three_ds]]
+name="three_ds"
+label="USD"
+placeholder="Enter usd Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.EUR.three_ds]]
+name="three_ds"
+label="EUR"
+placeholder="Enter eur Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.USD.three_ds]]
+name="three_ds"
+label="USD"
+placeholder="Enter usd Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.EUR.three_ds]]
+name="three_ds"
+label="EUR"
+placeholder="Enter eur Account ID"
+required=true
+type="Text"
 
 [peachpayments]
 [[peachpayments.credit]]
diff --git a/crates/connector_configs/toml/sandbox.toml b/crates/connector_configs/toml/sandbox.toml
index 45da96d5344..7748f5dd784 100644
--- a/crates/connector_configs/toml/sandbox.toml
+++ b/crates/connector_configs/toml/sandbox.toml
@@ -6817,29 +6817,71 @@ key1 = "Password"
 [paysafe.connector_webhook_details]
 merchant_secret = "Source verification key"
 [[paysafe.metadata.account_id.card.USD.three_ds]]
-name="account_id"
+name="three_ds"
 label="ThreeDS account id"
 placeholder="Enter ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.USD.no_three_ds]]
 name="no_three_ds"
 label="Non ThreeDS account id"
 placeholder="Enter Non ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.EUR.three_ds]]
-name="account_id"
+name="three_ds"
 label="ThreeDS account id"
 placeholder="Enter ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
 [[paysafe.metadata.account_id.card.EUR.no_three_ds]]
 name="no_three_ds"
 label="Non ThreeDS account id"
 placeholder="Enter Non ThreeDS Account ID"
 required=true
-type="Number"
+type="Text"
+[[paysafe.metadata.account_id.interac.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.USD.three_ds]]
+name="three_ds"
+label="USD"
+placeholder="Enter usd Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.skrill.EUR.three_ds]]
+name="three_ds"
+label="EUR"
+placeholder="Enter eur Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.USD.three_ds]]
+name="three_ds"
+label="USD"
+placeholder="Enter usd Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.CAD.three_ds]]
+name="three_ds"
+label="CAD"
+placeholder="Enter cad Account ID"
+required=true
+type="Text"
+[[paysafe.metadata.account_id.pay_safe_card.EUR.three_ds]]
+name="three_ds"
+label="EUR"
+placeholder="Enter eur Account ID"
+required=true
+type="Text"
 
 
 
diff --git a/crates/hyperswitch_connectors/src/connectors/paysafe.rs b/crates/hyperswitch_connectors/src/connectors/paysafe.rs
index 8d463966748..df996434c78 100644
--- a/crates/hyperswitch_connectors/src/connectors/paysafe.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paysafe.rs
@@ -975,6 +975,7 @@ static PAYSAFE_SUPPORTED_PAYMENT_METHODS: LazyLock<SupportedPaymentMethods> = La
         enums::CaptureMethod::Automatic,
         enums::CaptureMethod::Manual,
     ];
+    let supported_capture_methods2 = vec![enums::CaptureMethod::Automatic];
 
     let supported_card_network = vec![
         common_enums::CardNetwork::Mastercard,
@@ -1028,6 +1029,39 @@ static PAYSAFE_SUPPORTED_PAYMENT_METHODS: LazyLock<SupportedPaymentMethods> = La
         },
     );
 
+    paysafe_supported_payment_methods.add(
+        enums::PaymentMethod::Wallet,
+        enums::PaymentMethodType::Skrill,
+        PaymentMethodDetails {
+            mandates: enums::FeatureStatus::NotSupported,
+            refunds: enums::FeatureStatus::Supported,
+            supported_capture_methods: supported_capture_methods2.clone(),
+            specific_features: None,
+        },
+    );
+
+    paysafe_supported_payment_methods.add(
+        enums::PaymentMethod::BankRedirect,
+        enums::PaymentMethodType::Interac,
+        PaymentMethodDetails {
+            mandates: enums::FeatureStatus::NotSupported,
+            refunds: enums::FeatureStatus::Supported,
+            supported_capture_methods: supported_capture_methods2.clone(),
+            specific_features: None,
+        },
+    );
+
+    paysafe_supported_payment_methods.add(
+        enums::PaymentMethod::GiftCard,
+        enums::PaymentMethodType::PaySafeCard,
+        PaymentMethodDetails {
+            mandates: enums::FeatureStatus::NotSupported,
+            refunds: enums::FeatureStatus::Supported,
+            supported_capture_methods: supported_capture_methods2.clone(),
+            specific_features: None,
+        },
+    );
+
     paysafe_supported_payment_methods
 });
 
diff --git a/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs b/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs
index 26e9d8de48d..8a091a7aec2 100644
--- a/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/paysafe/transformers.rs
@@ -3,13 +3,14 @@ use std::collections::HashMap;
 use cards::CardNumber;
 use common_enums::{enums, Currency};
 use common_utils::{
-    pii::{IpAddress, SecretSerdeValue},
+    id_type,
+    pii::{Email, IpAddress, SecretSerdeValue},
     request::Method,
     types::MinorUnit,
 };
 use error_stack::ResultExt;
 use hyperswitch_domain_models::{
-    payment_method_data::PaymentMethodData,
+    payment_method_data::{BankRedirectData, GiftCardData, PaymentMethodData, WalletData},
     router_data::{ConnectorAuthType, RouterData},
     router_flow_types::refunds::{Execute, RSync},
     router_request_types::{
@@ -56,6 +57,9 @@ pub struct PaysafeConnectorMetadataObject {
 #[derive(Debug, Default, Serialize, Deserialize)]
 pub struct PaysafePaymentMethodDetails {
     pub card: Option<HashMap<Currency, CardAccountId>>,
+    pub skrill: Option<HashMap<Currency, RedirectAccountId>>,
+    pub interac: Option<HashMap<Currency, RedirectAccountId>>,
+    pub pay_safe_card: Option<HashMap<Currency, RedirectAccountId>>,
 }
 
 #[derive(Debug, Default, Serialize, Deserialize)]
@@ -64,6 +68,11 @@ pub struct CardAccountId {
     three_ds: Option<Secret<String>>,
 }
 
+#[derive(Debug, Default, Serialize, Deserialize)]
+pub struct RedirectAccountId {
+    three_ds: Option<Secret<String>>,
+}
+
 impl TryFrom<&Option<SecretSerdeValue>> for PaysafeConnectorMetadataObject {
     type Error = error_stack::Report<errors::ConnectorError>;
     fn try_from(meta_data: &Option<SecretSerdeValue>) -> Result<Self, Self::Error> {
@@ -127,13 +136,54 @@ pub struct PaysafePaymentHandleRequest {
     pub return_links: Vec<ReturnLink>,
     pub account_id: Secret<String>,
     pub three_ds: Option<ThreeDs>,
+    pub profile: Option<PaysafeProfile>,
+}
+
+#[derive(Debug, Serialize, Clone, PartialEq)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeProfile {
+    pub first_name: Secret<String>,
+    pub last_name: Secret<String>,
+    pub email: Email,
 }
 
 #[derive(Debug, Serialize)]
 #[serde(rename_all = "camelCase")]
 #[serde(untagged)]
 pub enum PaysafePaymentMethod {
-    Card { card: PaysafeCard },
+    Card {
+        card: PaysafeCard,
+    },
+    Skrill {
+        skrill: SkrillWallet,
+    },
+    Interac {
+        #[serde(rename = "interacEtransfer")]
+        interac_etransfer: InteracBankRedirect,
+    },
+    PaysafeCard {
+        #[serde(rename = "paysafecard")]
+        pay_safe_card: PaysafeGiftCard,
+    },
+}
+
+#[derive(Debug, Serialize, Clone, PartialEq)]
+#[serde(rename_all = "camelCase")]
+pub struct SkrillWallet {
+    pub consumer_id: Email,
+    pub country_code: Option<api_models::enums::CountryAlpha2>,
+}
+
+#[derive(Debug, Serialize, Clone, PartialEq)]
+#[serde(rename_all = "camelCase")]
+pub struct InteracBankRedirect {
+    pub consumer_id: Email,
+}
+
+#[derive(Debug, Serialize, Clone, PartialEq)]
+#[serde(rename_all = "camelCase")]
+pub struct PaysafeGiftCard {
+    pub consumer_id: id_type::CustomerId,
 }
 
 #[derive(Debug, Serialize)]
@@ -153,9 +203,12 @@ pub enum LinkType {
 }
 
 #[derive(Debug, Serialize)]
+#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
 pub enum PaysafePaymentType {
-    #[serde(rename = "CARD")]
     Card,
+    Skrill,
+    InteracEtransfer,
+    Paysafecard,
 }
 
 #[derive(Debug, Serialize)]
@@ -173,7 +226,7 @@ impl PaysafePaymentMethodDetails {
             .as_ref()
             .and_then(|cards| cards.get(&currency))
             .and_then(|card| card.no_three_ds.clone())
-            .ok_or_else(|| errors::ConnectorError::InvalidConnectorConfig {
+            .ok_or(errors::ConnectorError::InvalidConnectorConfig {
                 config: "Missing no_3ds account_id",
             })
     }
@@ -186,10 +239,49 @@ impl PaysafePaymentMethodDetails {
             .as_ref()
             .and_then(|cards| cards.get(&currency))
             .and_then(|card| card.three_ds.clone())
-            .ok_or_else(|| errors::ConnectorError::InvalidConnectorConfig {
+            .ok_or(errors::ConnectorError::InvalidConnectorConfig {
                 config: "Missing 3ds account_id",
             })
     }
+
+    pub fn get_skrill_account_id(
+        &self,
+        currency: Currency,
+    ) -> Result<Secret<String>, errors::ConnectorError> {
+        self.skrill
+            .as_ref()
+            .and_then(|wallets| wallets.get(&currency))
+            .and_then(|skrill| skrill.three_ds.clone())
+            .ok_or(errors::ConnectorError::InvalidConnectorConfig {
+                config: "Missing skrill account_id",
+            })
+    }
+
+    pub fn get_interac_account_id(
+        &self,
+        currency: Currency,
+    ) -> Result<Secret<String>, errors::ConnectorError> {
+        self.interac
+            .as_ref()
+            .and_then(|redirects| redirects.get(&currency))
+            .and_then(|interac| interac.three_ds.clone())
+            .ok_or(errors::ConnectorError::InvalidConnectorConfig {
+                config: "Missing interac account_id",
+            })
+    }
+
+    pub fn get_paysafe_gift_card_account_id(
+        &self,
+        currency: Currency,
+    ) -> Result<Secret<String>, errors::ConnectorError> {
+        self.pay_safe_card
+            .as_ref()
+            .and_then(|gift_cards| gift_cards.get(&currency))
+            .and_then(|pay_safe_card| pay_safe_card.three_ds.clone())
+            .ok_or(errors::ConnectorError::InvalidConnectorConfig {
+                config: "Missing paysafe gift card account_id",
+            })
+    }
 }
 
 impl TryFrom<&PaysafeRouterData<&PaymentsPreProcessingRouterData>> for PaysafePaymentHandleRequest {
@@ -268,6 +360,7 @@ impl TryFrom<&PaysafeRouterData<&PaymentsPreProcessingRouterData>> for PaysafePa
                     return_links,
                     account_id,
                     three_ds: None,
+                    profile: None,
                 })
             }
             _ => Err(errors::ConnectorError::NotImplemented(
@@ -303,6 +396,7 @@ pub enum PaysafePaymentHandleStatus {
     Failed,
     Expired,
     Completed,
+    Error,
 }
 
 impl TryFrom<PaysafePaymentHandleStatus> for common_enums::AttemptStatus {
@@ -310,9 +404,9 @@ impl TryFrom<PaysafePaymentHandleStatus> for common_enums::AttemptStatus {
     fn try_from(item: PaysafePaymentHandleStatus) -> Result<Self, Self::Error> {
         match item {
             PaysafePaymentHandleStatus::Completed => Ok(Self::Authorized),
-            PaysafePaymentHandleStatus::Failed | PaysafePaymentHandleStatus::Expired => {
-                Ok(Self::Failure)
-            }
+            PaysafePaymentHandleStatus::Failed
+            | PaysafePaymentHandleStatus::Expired
+            | PaysafePaymentHandleStatus::Error => Ok(Self::Failure),
             // We get an `Initiated` status, with a redirection link from the connector, which indicates that further action is required by the customer,
             PaysafePaymentHandleStatus::Initiated => Ok(Self::AuthenticationPending),
             PaysafePaymentHandleStatus::Payable | PaysafePaymentHandleStatus::Processing => {
@@ -544,60 +638,118 @@ impl TryFrom<&PaysafeRouterData<&PaymentsAuthorizeRouterData>> for PaysafePaymen
             Some(enums::CaptureMethod::Automatic) | None
         );
         let transaction_type = TransactionType::Payment;
-        match item.router_data.request.payment_method_data.clone() {
-            PaymentMethodData::Card(req_card) => {
-                let card = PaysafeCard {
-                    card_num: req_card.card_number.clone(),
-                    card_expiry: PaysafeCardExpiry {
-                        month: req_card.card_exp_month.clone(),
-                        year: req_card.get_expiry_year_4_digit(),
-                    },
-                    cvv: if req_card.card_cvc.clone().expose().is_empty() {
-                        None
-                    } else {
-                        Some(req_card.card_cvc.clone())
-                    },
-                    holder_name: item.router_data.get_optional_billing_full_name(),
-                };
-                let payment_method = PaysafePaymentMethod::Card { card: card.clone() };
-                let payment_type = PaysafePaymentType::Card;
-                let headers = item.router_data.header_payload.clone();
-                let platform = headers
-                    .as_ref()
-                    .and_then(|headers| headers.x_client_platform.clone());
-                let device_channel = match platform {
-                    Some(common_enums::ClientPlatform::Web)
-                    | Some(common_enums::ClientPlatform::Unknown)
-                    | None => DeviceChannel::Browser,
-                    Some(common_enums::ClientPlatform::Ios)
-                    | Some(common_enums::ClientPlatform::Android) => DeviceChannel::Sdk,
-                };
-                let account_id = metadata.account_id.get_three_ds_account_id(currency_code)?;
-                let three_ds = Some(ThreeDs {
-                    merchant_url: item.router_data.request.get_router_return_url()?,
-                    device_channel,
-                    message_category: ThreeDsMessageCategory::Payment,
-                    authentication_purpose: ThreeDsAuthenticationPurpose::PaymentTransaction,
-                    requestor_challenge_preference: ThreeDsChallengePreference::ChallengeMandated,
-                });
+        let (payment_method, payment_type, account_id, three_ds, profile) =
+            match item.router_data.request.payment_method_data.clone() {
+                PaymentMethodData::Card(req_card) => {
+                    let card = PaysafeCard {
+                        card_num: req_card.card_number.clone(),
+                        card_expiry: PaysafeCardExpiry {
+                            month: req_card.card_exp_month.clone(),
+                            year: req_card.get_expiry_year_4_digit(),
+                        },
+                        cvv: if req_card.card_cvc.clone().expose().is_empty() {
+                            None
+                        } else {
+                            Some(req_card.card_cvc.clone())
+                        },
+                        holder_name: item.router_data.get_optional_billing_full_name(),
+                    };
+                    let payment_method = PaysafePaymentMethod::Card { card: card.clone() };
+                    let payment_type = PaysafePaymentType::Card;
+
+                    let headers = item.router_data.header_payload.clone();
+                    let platform = headers.as_ref().and_then(|h| h.x_client_platform.clone());
+                    let device_channel = match platform {
+                        Some(common_enums::ClientPlatform::Web)
+                        | Some(common_enums::ClientPlatform::Unknown)
+                        | None => DeviceChannel::Browser,
+                        Some(common_enums::ClientPlatform::Ios)
+                        | Some(common_enums::ClientPlatform::Android) => DeviceChannel::Sdk,
+                    };
+
+                    let account_id = metadata.account_id.get_three_ds_account_id(currency_code)?;
+                    let three_ds = Some(ThreeDs {
+                        merchant_url: item.router_data.request.get_router_return_url()?,
+                        device_channel,
+                        message_category: ThreeDsMessageCategory::Payment,
+                        authentication_purpose: ThreeDsAuthenticationPurpose::PaymentTransaction,
+                        requestor_challenge_preference:
+                            ThreeDsChallengePreference::ChallengeMandated,
+                    });
+
+                    (payment_method, payment_type, account_id, three_ds, None)
+                }
+
+                PaymentMethodData::Wallet(WalletData::Skrill(_)) => {
+                    let payment_method = PaysafePaymentMethod::Skrill {
+                        skrill: SkrillWallet {
+                            consumer_id: item.router_data.get_billing_email()?,
+                            country_code: item.router_data.get_optional_billing_country(),
+                        },
+                    };
+                    let payment_type = PaysafePaymentType::Skrill;
+                    let account_id = metadata.account_id.get_skrill_account_id(currency_code)?;
+                    (payment_method, payment_type, account_id, None, None)
+                }
+                PaymentMethodData::Wallet(_) => Err(errors::ConnectorError::NotImplemented(
+                    "Payment Method".to_string(),
+                ))?,
+
+                PaymentMethodData::BankRedirect(BankRedirectData::Interac { .. }) => {
+                    let payment_method = PaysafePaymentMethod::Interac {
+                        interac_etransfer: InteracBankRedirect {
+                            consumer_id: item.router_data.get_billing_email()?,
+                        },
+                    };
+                    let payment_type = PaysafePaymentType::InteracEtransfer;
+                    let account_id = metadata.account_id.get_interac_account_id(currency_code)?;
+                    let profile = Some(PaysafeProfile {
+                        first_name: item.router_data.get_billing_first_name()?,
+                        last_name: item.router_data.get_billing_last_name()?,
+                        email: item.router_data.get_billing_email()?,
+                    });
+                    (payment_method, payment_type, account_id, None, profile)
+                }
+                PaymentMethodData::BankRedirect(_) => Err(errors::ConnectorError::NotImplemented(
+                    "Payment Method".to_string(),
+                ))?,
+
+                PaymentMethodData::GiftCard(gift_card_data) => match gift_card_data.as_ref() {
+                    GiftCardData::PaySafeCard {} => {
+                        let payment_method = PaysafePaymentMethod::PaysafeCard {
+                            pay_safe_card: PaysafeGiftCard {
+                                consumer_id: item.router_data.get_customer_id()?,
+                            },
+                        };
+                        let payment_type = PaysafePaymentType::Paysafecard;
+                        let account_id = metadata
+                            .account_id
+                            .get_paysafe_gift_card_account_id(currency_code)?;
+                        (payment_method, payment_type, account_id, None, None)
+                    }
+                    _ => Err(errors::ConnectorError::NotImplemented(
+                        "Payment Method".to_string(),
+                    ))?,
+                },
+
+                _ => Err(errors::ConnectorError::NotImplemented(
+                    "Payment Method".to_string(),
+                ))?,
+            };
 
-                Ok(Self {
-                    merchant_ref_num: item.router_data.connector_request_reference_id.clone(),
-                    amount,
-                    settle_with_auth,
-                    payment_method,
-                    currency_code,
-                    payment_type,
-                    transaction_type,
-                    return_links,
-                    account_id,
-                    three_ds,
-                })
-            }
-            _ => Err(errors::ConnectorError::NotImplemented(
-                "Payment Method".to_string(),
-            ))?,
-        }
+        Ok(Self {
+            merchant_ref_num: item.router_data.connector_request_reference_id.clone(),
+            amount,
+            settle_with_auth,
+            payment_method,
+            currency_code,
+            payment_type,
+            transaction_type,
+            return_links,
+            account_id,
+            three_ds,
+            profile,
+        })
     }
 }
 
@@ -750,7 +902,6 @@ pub struct PaysafePaymentsResponse {
     pub id: String,
     pub merchant_ref_num: Option<String>,
     pub status: PaysafePaymentStatus,
-    pub settlements: Option<Vec<PaysafeSettlementResponse>>,
 }
 
 #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
diff --git a/crates/payment_methods/src/configs/payment_connector_required_fields.rs b/crates/payment_methods/src/configs/payment_connector_required_fields.rs
index f61c789fe2f..e2dc44304ed 100644
--- a/crates/payment_methods/src/configs/payment_connector_required_fields.rs
+++ b/crates/payment_methods/src/configs/payment_connector_required_fields.rs
@@ -2268,6 +2268,13 @@ fn get_bank_redirect_required_fields(
                 ),
             ]),
         ),
+        (
+            enums::PaymentMethodType::Interac,
+            connectors(vec![(
+                Connector::Paysafe,
+                fields(vec![], vec![RequiredField::BillingEmail], vec![]),
+            )]),
+        ),
     ])
 }
 
@@ -2710,19 +2717,32 @@ fn get_wallet_required_fields() -> HashMap<enums::PaymentMethodType, ConnectorFi
         ),
         (
             enums::PaymentMethodType::Skrill,
-            connectors(vec![(
-                Connector::Airwallex,
-                RequiredFieldFinal {
-                    mandate: HashMap::new(),
-                    non_mandate: HashMap::from([
-                        RequiredField::BillingUserFirstName.to_tuple(),
-                        RequiredField::BillingUserLastName.to_tuple(),
-                        RequiredField::BillingAddressCountries(vec!["ALL"]).to_tuple(),
-                        RequiredField::BillingEmail.to_tuple(),
-                    ]),
-                    common: HashMap::new(),
-                },
-            )]),
+            connectors(vec![
+                (
+                    Connector::Airwallex,
+                    RequiredFieldFinal {
+                        mandate: HashMap::new(),
+                        non_mandate: HashMap::from([
+                            RequiredField::BillingUserFirstName.to_tuple(),
+                            RequiredField::BillingUserLastName.to_tuple(),
+                            RequiredField::BillingAddressCountries(vec!["ALL"]).to_tuple(),
+                            RequiredField::BillingEmail.to_tuple(),
+                        ]),
+                        common: HashMap::new(),
+                    },
+                ),
+                (
+                    Connector::Paysafe,
+                    RequiredFieldFinal {
+                        mandate: HashMap::new(),
+                        non_mandate: HashMap::from([
+                            RequiredField::BillingAddressCountries(vec!["ALL"]).to_tuple(),
+                            RequiredField::BillingEmail.to_tuple(),
+                        ]),
+                        common: HashMap::new(),
+                    },
+                ),
+            ]),
         ),
     ])
 }

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

- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
implement Skrill, interac and paysafecard Payment Method

### 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).
-->


## How did you test it?
1. Create a Skrill Payment
```
{
    "amount": 1500,
    "currency": "USD",
    "confirm": true,
    "capture_method": "automatic",
    "customer_id": "aaaa",
    "profile_id": "pro_4qL65B30WQmHX25pXKmG",
    "authentication_type": "three_ds",
    "payment_method": "wallet",
    "payment_method_type": "skrill",
    "payment_method_data": {
        "wallet": {
            "skrill": {}
        }
    },
    "billing": {
        "address": {
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "city": "Downtown Core",
            "state": "Central Indiana America",
            "zip": "039393",
            "country": "SG",
            "first_name": "박성준",
            "last_name": "박성준"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "browser_info": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "127.0.0.1"
    }
}
```
Response
```
{
    "payment_id": "pay_5xoMCjQvR0AnUF37kl6v",
    "merchant_id": "merchant_1757942854",
    "status": "requires_customer_action",
    "amount": 1500,
    "net_amount": 1500,
    "shipping_cost": null,
    "amount_capturable": 1500,
    "amount_received": null,
    "connector": "paysafe",
    "client_secret": "pay_5xoMCjQvR0AnUF37kl6v_secret_Co7z6eH0h93pHyicLKJp",
    "created": "2025-09-16T06:09:53.680Z",
    "currency": "USD",
    "customer_id": "aaaa",
    "customer": {
        "id": "aaaa",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "wallet",
    "payment_method_data": {
        "wallet": {},
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "박성준",
            "last_name": "박성준",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": null
    },
    "billing": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "박성준",
            "last_name": "박성준",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": {
        "type": "redirect_to_url",
        "redirect_to_url": "http://localhost:8080/payments/redirect/pay_5xoMCjQvR0AnUF37kl6v/merchant_1757942854/pay_5xoMCjQvR0AnUF37kl6v_1"
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "skrill",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "aaaa",
        "created_at": 1758002993,
        "expires": 1758006593,
        "secret": "epk_6eec4bbcf95a434a8b65171dca1d86da"
    },
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "gateway_system": "direct"
    },
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_4qL65B30WQmHX25pXKmG",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_2zxP3MvnLEpDi16Ay49j",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-09-16T06:24:53.680Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": null,
    "payment_method_status": null,
    "updated": "2025-09-16T06:09:56.298Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": null,
    "network_details": null
}
```
Complete Payment using redirection

2. Do psync 
```
curl --location 'http://localhost:8080/payments/pay_biJy45vN8GAgHdotUaAm?force_sync=true' \
--header 'Accept: application/json' \
--header 'api-key: dev_XE1bY6wAFDqmx67zzp7ywkodIuZnJ1bnzq7BmJ6jcULVA5z454A0vA5D9jR2uaFL'
```
Response
```
{
    "payment_id": "pay_biJy45vN8GAgHdotUaAm",
    "merchant_id": "merchant_1757942854",
    "status": "succeeded",
    "amount": 1500,
    "net_amount": 1500,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 1500,
    "connector": "paysafe",
    "client_secret": "pay_biJy45vN8GAgHdotUaAm_secret_wzBdMh7jy1lQLteolVik",
    "created": "2025-09-16T06:11:55.151Z",
    "currency": "USD",
    "customer_id": "aaaa",
    "customer": {
        "id": "aaaa",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "manual",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "1091",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "400000",
            "card_extended_bin": null,
            "card_exp_month": "10",
            "card_exp_year": "25",
            "card_holder_name": "Joseph",
            "payment_checks": null,
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "박성준",
            "last_name": "박성준",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": null
    },
    "billing": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "박성준",
            "last_name": "박성준",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": null
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "credit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "f7b13a78-971f-484f-bf2e-b7696cae27e4",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "gateway_system": "direct"
    },
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_4qL65B30WQmHX25pXKmG",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_2zxP3MvnLEpDi16Ay49j",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-09-16T06:26:55.151Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": null,
    "payment_method_status": null,
    "updated": "2025-09-16T06:12:52.541Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": null,
    "network_details": null
}
```

_________________________________________
1. Create a Interac Payment
```
{
    "amount": 1500,
    "currency": "CAD",
    "confirm": true,
    "capture_method": "automatic",
    "customer_id": "aaaa",
    "profile_id": "pro_ZOeeFgbR94MvAzeqRgCP",
    "authentication_type": "three_ds",
    "payment_method": "bank_redirect",
    "payment_method_type": "interac",
    "payment_method_data": {
        "bank_redirect": {
            "interac": {}
        }
    },
    "billing": {
        "address": {
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "city": "Downtown Core",
            "state": "Central Indiana America",
            "zip": "039393",
            "country": "SG",
            "first_name": "Swangi",
            "last_name": "Kumari"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "browser_info": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "127.0.0.1"
    }
}
```
Response
```
{
    "payment_id": "pay_z7YQYcZmsvJqgvaULlib",
    "merchant_id": "merchant_1758109811",
    "status": "requires_customer_action",
    "amount": 1500,
    "net_amount": 1500,
    "shipping_cost": null,
    "amount_capturable": 1500,
    "amount_received": null,
    "connector": "paysafe",
    "client_secret": "pay_z7YQYcZmsvJqgvaULlib_secret_pP5mHo1dYDNdpTaEvzJM",
    "created": "2025-09-17T12:14:15.417Z",
    "currency": "CAD",
    "customer_id": "aaaa",
    "customer": {
        "id": "aaaa",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "bank_redirect",
    "payment_method_data": {
        "bank_redirect": {
            "type": "BankRedirectResponse",
            "bank_name": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "Swangi",
            "last_name": "Kumari",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": {
        "type": "redirect_to_url",
        "redirect_to_url": "http://localhost:8080/payments/redirect/pay_z7YQYcZmsvJqgvaULlib/merchant_1758109811/pay_z7YQYcZmsvJqgvaULlib_1"
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "interac",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "aaaa",
        "created_at": 1758111255,
        "expires": 1758114855,
        "secret": "epk_a1d811edc6eb473e91d84edd854bc78f"
    },
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "gateway_system": "direct"
    },
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_ZOeeFgbR94MvAzeqRgCP",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_RgaQGT7EpJ4ktWrgTjiW",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-09-17T12:29:15.417Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": null,
    "payment_method_status": null,
    "updated": "2025-09-17T12:14:16.388Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": null,
    "network_details": null
}
```
Complete the payment using redirection 

2. Do psync 
We will get `succeeded` status 

____________________________________

1. Create Paysafe gift card payment
```
{
    "amount": 1500,
    "currency": "USD",
    "confirm": true,
    "capture_method": "automatic",
    "customer_id": "aaaa",
    "profile_id": "pro_ZOeeFgbR94MvAzeqRgCP",
    "authentication_type": "three_ds",
    "payment_method": "gift_card",
    "payment_method_type": "pay_safe_card",
    "payment_method_data": {
        "gift_card": {
            "pay_safe_card": {}
        }
    },
    "billing": {
        "address": {
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "city": "Downtown Core",
            "state": "Central Indiana America",
            "zip": "039393",
            "country": "SG",
            "first_name": "Swangi",
            "last_name": "Kumari"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "browser_info": {
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "127.0.0.1"
    }
}
```
Response
```
{
    "payment_id": "pay_e1mvzY3QHPNkUoq95Y3r",
    "merchant_id": "merchant_1758109811",
    "status": "requires_customer_action",
    "amount": 1500,
    "net_amount": 1500,
    "shipping_cost": null,
    "amount_capturable": 1500,
    "amount_received": null,
    "connector": "paysafe",
    "client_secret": "pay_e1mvzY3QHPNkUoq95Y3r_secret_GeqxmczpZ6Rl3WAa2qye",
    "created": "2025-09-17T12:15:54.727Z",
    "currency": "USD",
    "customer_id": "aaaa",
    "customer": {
        "id": "aaaa",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "gift_card",
    "payment_method_data": {
        "gift_card": {
            "pay_safe_card": {}
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "Swangi",
            "last_name": "Kumari",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": {
        "type": "redirect_to_url",
        "redirect_to_url": "http://localhost:8080/payments/redirect/pay_e1mvzY3QHPNkUoq95Y3r/merchant_1758109811/pay_e1mvzY3QHPNkUoq95Y3r_1"
    },
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pay_safe_card",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "aaaa",
        "created_at": 1758111354,
        "expires": 1758114954,
        "secret": "epk_f8d75c19c2af479ebc9f5466bea7156b"
    },
    "manual_retry_allowed": null,
    "connector_transaction_id": null,
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "gateway_system": "direct"
    },
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_ZOeeFgbR94MvAzeqRgCP",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_RgaQGT7EpJ4ktWrgTjiW",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-09-17T12:30:54.726Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": null,
    "payment_method_status": null,
    "updated": "2025-09-17T12:15:56.032Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": null,
    "network_details": null
}
```
Complete payment using redirection

2. Do psync , 
Response
```
{
    "payment_id": "pay_e1mvzY3QHPNkUoq95Y3r",
    "merchant_id": "merchant_1758109811",
    "status": "succeeded",
    "amount": 1500,
    "net_amount": 1500,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 1500,
    "connector": "paysafe",
    "client_secret": "pay_e1mvzY3QHPNkUoq95Y3r_secret_GeqxmczpZ6Rl3WAa2qye",
    "created": "2025-09-17T12:15:54.727Z",
    "currency": "USD",
    "customer_id": "aaaa",
    "customer": {
        "id": "aaaa",
        "name": null,
        "email": null,
        "phone": null,
        "phone_country_code": null
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "gift_card",
    "payment_method_data": {
        "gift_card": {
            "pay_safe_card": {}
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": null,
    "billing": {
        "address": {
            "city": "Downtown Core",
            "country": "SG",
            "line1": "Singapore Changi Airport. 2nd flr",
            "line2": "",
            "line3": "",
            "zip": "039393",
            "state": "Central Indiana America",
            "first_name": "Swangi",
            "last_name": "Kumari",
            "origin_zip": null
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": "swangi.kumari@juspay.in"
    },
    "order_details": null,
    "email": null,
    "name": null,
    "phone": null,
    "return_url": null,
    "authentication_type": "three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "pay_safe_card",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": null,
    "manual_retry_allowed": null,
    "connector_transaction_id": "16591c55-a1d0-48b3-bd5f-0b86fe514be8",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": {
        "redirect_response": null,
        "search_tags": null,
        "apple_pay_recurring_details": null,
        "gateway_system": "direct"
    },
    "reference_id": null,
    "payment_link": null,
    "profile_id": "pro_ZOeeFgbR94MvAzeqRgCP",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_RgaQGT7EpJ4ktWrgTjiW",
    "incremental_authorization_allowed": false,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-09-17T12:30:54.726Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "127.0.0.1",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_channel": null,
    "payment_method_id": null,
    "network_transaction_id": null,
    "payment_method_status": null,
    "updated": "2025-09-17T12:16:06.859Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": null,
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null,
    "enable_partial_authorization": null,
    "enable_overcapture": null,
    "is_overcapture_enabled": null,
    "network_details": null
}
```

## 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
