Bug: [BUG] zero amount mandates for wallets through Novalnet



### Bug Description

Zero amount mandates for wallets through Novalnet throws errors saying some required fields are missing. This is needed to be fixed in the connector integration.

### Expected Behavior

Zero amount mandates for wallets (GPay + PayPal + APay) should return a connector mandate ID which can be used for future MITs.

### Actual Behavior

Zero amount mandates for wallets throw an error saying some required fields are missing.

### Steps To Reproduce

1. Create a payment link (amount: 0, currency: EUR, do not send billing details)
2. Select GooglePay and complete the txn
3. Confirm call returns 400 saying billing.address is missing OR email is missing

### Have you spent some time checking if this bug has been raised before?

- [x] I checked and didn't find a 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/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs b/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs
index ba00162281f..44f84bf475d 100644
--- a/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs
+++ b/crates/hyperswitch_connectors/src/connectors/novalnet/transformers.rs
@@ -28,7 +28,7 @@ use strum::Display;
 use crate::{
     types::{RefundsResponseRouterData, ResponseRouterData},
     utils::{
-        self, AddressDetailsData, ApplePay, PaymentsAuthorizeRequestData,
+        self, AddressData, AddressDetailsData, ApplePay, PaymentsAuthorizeRequestData,
         PaymentsCancelRequestData, PaymentsCaptureRequestData, PaymentsSetupMandateRequestData,
         PaymentsSyncRequestData, RefundsRequestData, RouterData as _,
     },
@@ -1467,7 +1467,7 @@ impl TryFrom<&SetupMandateRouterData> for NovalnetPaymentsRequest {
             enums::AuthenticationType::NoThreeDs => None,
         };
         let test_mode = get_test_mode(item.test_mode);
-        let req_address = item.get_billing_address()?.to_owned();
+        let req_address = item.get_optional_billing();
 
         let billing = NovalnetPaymentsRequestBilling {
             house_no: item.get_optional_billing_line1(),
@@ -1477,10 +1477,12 @@ impl TryFrom<&SetupMandateRouterData> for NovalnetPaymentsRequest {
             country_code: item.get_optional_billing_country(),
         };
 
+        let email = item.get_billing_email().or(item.request.get_email())?;
+
         let customer = NovalnetPaymentsRequestCustomer {
-            first_name: req_address.get_optional_first_name(),
-            last_name: req_address.get_optional_last_name(),
-            email: item.request.get_email()?.clone(),
+            first_name: req_address.and_then(|addr| addr.get_optional_first_name()),
+            last_name: req_address.and_then(|addr| addr.get_optional_last_name()),
+            email,
             mobile: item.get_optional_billing_phone_number(),
             billing: Some(billing),
             // no_nc is used to indicate if minimal customer data is passed or not
@@ -1504,7 +1506,7 @@ impl TryFrom<&SetupMandateRouterData> for NovalnetPaymentsRequest {
                     card_expiry_month: req_card.card_exp_month.clone(),
                     card_expiry_year: req_card.card_exp_year.clone(),
                     card_cvc: req_card.card_cvc.clone(),
-                    card_holder: req_address.get_full_name()?.clone(),
+                    card_holder: item.get_billing_address()?.get_full_name()?,
                 });
 
                 let transaction = NovalnetPaymentsRequestTransaction {
diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs
index aec4d31072d..af8e89eeced 100644
--- a/crates/hyperswitch_connectors/src/utils.rs
+++ b/crates/hyperswitch_connectors/src/utils.rs
@@ -1935,6 +1935,8 @@ pub trait AddressData {
     fn get_optional_full_name(&self) -> Option<Secret<String>>;
     fn get_email(&self) -> Result<Email, Error>;
     fn get_phone_with_country_code(&self) -> Result<Secret<String>, Error>;
+    fn get_optional_first_name(&self) -> Option<Secret<String>>;
+    fn get_optional_last_name(&self) -> Option<Secret<String>>;
 }
 
 impl AddressData for Address {
@@ -1955,6 +1957,18 @@ impl AddressData for Address {
             .transpose()?
             .ok_or_else(missing_field_err("phone"))
     }
+
+    fn get_optional_first_name(&self) -> Option<Secret<String>> {
+        self.address
+            .as_ref()
+            .and_then(|billing_address| billing_address.get_optional_first_name())
+    }
+
+    fn get_optional_last_name(&self) -> Option<Secret<String>> {
+        self.address
+            .as_ref()
+            .and_then(|billing_address| billing_address.get_optional_last_name())
+    }
 }
 pub trait PaymentsPreProcessingRequestData {
     fn get_redirect_response_payload(&self) -> Result<pii::SecretSerdeValue, Error>;

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

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

## Description
This PR updates connector integration for SetupMandate flow for Novalnet.


### 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
Helps fix zero amount CIT mandate flow for wallets through Novalnet


## How did you test it?
<details>
    <summary>1. Zero amount mandate through GPay (CIT)</summary>

cURL (create a payment link)

    curl --location --request POST 'http://localhost:8080/payments' \
        --header 'Content-Type: application/json' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_Z6hI0pxQyHsH240jY8lyalrGGJGyZBtjWhFrxxCmbvEdc7KywJRANdBXFzZ8XO2G' \
        --data '{"customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","profile_id":"pro_9tMbnzk3iyggEiTQDwZi","customer_acceptance":{"acceptance_type":"online","accepted_at":"1963-05-03T04:07:52.723Z","online":{"ip_address":"127.0.0.1","user_agent":"amet irure esse"}},"amount":0,"currency":"EUR","payment_link":true,"setup_future_usage":"off_session","description":"This is my description of why this payment was requested.","capture_method":"automatic","session_expiry":100000,"return_url":"https://example.com","payment_link_config":{"theme":"#0E103D","logo":"https://hyperswitch.io/favicon.ico","seller_name":"Hyperswitch Inc."}}'

Response

    {"payment_id":"pay_H4hegvKbutEoaqqWnfi7","merchant_id":"merchant_1739349514","status":"requires_payment_method","amount":0,"net_amount":0,"shipping_cost":null,"amount_capturable":0,"amount_received":null,"connector":null,"client_secret":"pay_H4hegvKbutEoaqqWnfi7_secret_0dJICKnhrb8h98fGIpRH","created":"2025-02-12T09:58:12.371Z","currency":"EUR","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","customer":{"id":"cus_zO4rCUYOsXWOdZb4Tb8f","name":"John Nether","email":null,"phone":"6168205362","phone_country_code":"+1"},"description":"This is my description of why this payment was requested.","refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":"off_session","off_session":null,"capture_on":null,"capture_method":"automatic","payment_method":null,"payment_method_data":null,"payment_token":null,"shipping":null,"billing":null,"order_details":null,"email":null,"name":"John Nether","phone":"6168205362","return_url":"https://example.com/","authentication_type":null,"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":null,"connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":{"customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","created_at":1739354292,"expires":1739357892,"secret":"epk_2a0d34b394314b75ae482a0151bf5793"},"manual_retry_allowed":null,"connector_transaction_id":null,"frm_message":null,"metadata":null,"connector_metadata":null,"feature_metadata":null,"reference_id":null,"payment_link":{"link":"http://localhost:8080/payment_link/merchant_1739349514/pay_H4hegvKbutEoaqqWnfi7?locale=en","secure_link":null,"payment_link_id":"plink_QXzLep6VzSaTGthJpxSS"},"profile_id":"pro_9tMbnzk3iyggEiTQDwZi","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":null,"incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-02-13T13:44:52.369Z","fingerprint":null,"browser_info":null,"payment_method_id":null,"payment_method_status":null,"updated":"2025-02-12T09:58:12.384Z","split_payments":null,"frm_metadata":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":null}

- Open payment link and complete GPay txn

- cURL (retrieve payment_method_id)

    curl --location --request GET 'http://localhost:8080/payments/pay_H4hegvKbutEoaqqWnfi7?force_sync=true' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_Z6hI0pxQyHsH240jY8lyalrGGJGyZBtjWhFrxxCmbvEdc7KywJRANdBXFzZ8XO2G'

Response

    {"payment_id":"pay_H4hegvKbutEoaqqWnfi7","merchant_id":"merchant_1739349514","status":"succeeded","amount":0,"net_amount":0,"shipping_cost":null,"amount_capturable":0,"amount_received":0,"connector":"novalnet","client_secret":"pay_H4hegvKbutEoaqqWnfi7_secret_LieHRikq7Bov1SA7Pm0c","created":"2025-02-12T10:00:12.291Z","currency":"EUR","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","customer":{"id":"cus_zO4rCUYOsXWOdZb4Tb8f","name":"John Doe","email":"guest@example.com","phone":"999999999","phone_country_code":"+1"},"description":"Its my first payment request","refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":"off_session","off_session":null,"capture_on":null,"capture_method":"automatic","payment_method":"wallet","payment_method_data":{"wallet":{"google_pay":{"last4":"0002","card_network":"AMEX","type":"CARD"}},"billing":null},"payment_token":null,"shipping":null,"billing":null,"order_details":null,"email":"guest@example.com","name":"John Doe","phone":"999999999","return_url":"https://google.com/","authentication_type":"no_three_ds","statement_descriptor_name":"joseph","statement_descriptor_suffix":"JS","next_action":null,"cancellation_reason":null,"error_code":null,"error_message":null,"unified_code":null,"unified_message":null,"payment_experience":null,"payment_method_type":"google_pay","connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":null,"manual_retry_allowed":false,"connector_transaction_id":"15146800034507274","frm_message":null,"metadata":{"udf1":"value1","login_date":"2019-09-10T10:11:12Z","new_customer":"true"},"connector_metadata":null,"feature_metadata":null,"reference_id":"15146800034507274","payment_link":null,"profile_id":"pro_9tMbnzk3iyggEiTQDwZi","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":"mca_VSzA7Xp292ZhnZFVAzXk","incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-02-12T10:15:12.291Z","fingerprint":null,"browser_info":null,"payment_method_id":"pm_7fdNeTCaPqNvsn5ws3V1","payment_method_status":"active","updated":"2025-02-12T10:00:14.797Z","split_payments":null,"frm_metadata":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":null}


</details>

<details>
    <summary>2. MIT for GPay</summary>

cURL (create GPay MIT)

    curl --location --request POST 'http://localhost:8080/payments' \
        --header 'Content-Type: application/json' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_Z6hI0pxQyHsH240jY8lyalrGGJGyZBtjWhFrxxCmbvEdc7KywJRANdBXFzZ8XO2G' \
        --data-raw '{"amount":100,"currency":"EUR","confirm":true,"capture_method":"automatic","capture_on":"2022-09-10T10:11:12Z","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","email":"guest@example.com","name":"John Doe","phone":"999999999","profile_id":"pro_9tMbnzk3iyggEiTQDwZi","phone_country_code":"+65","description":"Its my first payment request","authentication_type":"no_three_ds","return_url":"https://hyperswitch.io","off_session":true,"recurring_details":{"type":"payment_method_id","data":"pm_7fdNeTCaPqNvsn5ws3V1"},"statement_descriptor_name":"joseph","statement_descriptor_suffix":"JS","metadata":{"udf1":"value1","new_customer":"true","login_date":"2019-09-10T10:11:12Z"},"browser_info":{"ip_address":"129.0.0.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","accept_header":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","language":"en-US","color_depth":32,"screen_height":1117,"screen_width":1728,"time_zone":-330,"java_enabled":true,"java_script_enabled":true}}'

Response

    {"payment_id":"pay_5LvOZ6RQsFmyQqDvaqXh","merchant_id":"merchant_1737699414","status":"succeeded","amount":6500,"net_amount":6500,"shipping_cost":null,"amount_capturable":0,"amount_received":6500,"connector":"worldpay","client_secret":"pay_5LvOZ6RQsFmyQqDvaqXh_secret_njW4m0eWv4WWrYHXyUws","created":"2025-01-24T06:49:49.063Z","currency":"USD","customer_id":"cus_IoFeOlGhEeD54AbBdvxI","customer":{"id":"cus_IoFeOlGhEeD54AbBdvxI","name":"John Doe","email":"guest@example.com","phone":"999999999","phone_country_code":"+65"},"description":"Its my first payment request","refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":null,"off_session":true,"capture_on":null,"capture_method":"automatic","payment_method":"card","payment_method_data":{"card":{"last4":"0000","card_type":null,"card_network":null,"card_issuer":null,"card_issuing_country":null,"card_isin":"491761","card_extended_bin":null,"card_exp_month":"03","card_exp_year":"2030","card_holder_name":"John US","payment_checks":null,"authentication_data":null},"billing":null},"payment_token":null,"shipping":null,"billing":null,"order_details":null,"email":"guest@example.com","name":"John Doe","phone":"999999999","return_url":"https://hyperswitch.io/","authentication_type":"three_ds","statement_descriptor_name":"joseph","statement_descriptor_suffix":"JS","next_action":null,"cancellation_reason":null,"error_code":null,"error_message":null,"unified_code":null,"unified_message":null,"payment_experience":null,"payment_method_type":null,"connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":{"customer_id":"cus_IoFeOlGhEeD54AbBdvxI","created_at":1737701389,"expires":1737704989,"secret":"epk_37a0d95869a44072afca52b6a53523b0"},"manual_retry_allowed":false,"connector_transaction_id":"eyJrIjoiazNhYjYzMiIsImxpbmtWZXJzaW9uIjoiNi4wLjAifQ==.sN:g8wd64bwkbrp0md+bPxcanBnk2zLdsIqSa1pR99GGg8fCNQpPLoWNslSzWNPFBM5Tpa8tW7EFI5onKINsgChMHeJVoeH2lrBWCRyjZYT6h+lbqfJa+1BSoKFSY8HLWG3iYvLMl12v8Akq6Pt+SKmRV:l4OVG3XzCOZGpobnymfgF9Uk2Www3mSVoKRxeIXIe9pic4l22Rveu3MW0qp:7+4GYJYOg3e9WdLnxDKf8zDOVuNV9Smp3TrKAPuNF+l9HY8h4r+1y1WBHupQz59qPpv59wMMnZCI15w9voaKGUgn8jvCNhmdUlN6uDEfAu3+Gpx8cadeYO0VLI6Wl9IlaVI4eDFRFhVVWboq417XA0B7A7omqvwyPr9UpXP4WEW0OwEozD:UT7vKzbOBIqfC+WwXVvDoxGmrxlJztOw0Zye5zF6oXedJ3PRFO1S38DZNrYIkRNlWpYaVeOJiIYYJegfV4WMVmEHXUV1JsgVeJ7ye7vUhLQaQWH669jc7KxCb6UloO7ZTj7Q+18PY5jSOT91RpDIiNOKkj:oboIAbw=","frm_message":null,"metadata":{"udf1":"value1","login_date":"2019-09-10T10:11:12Z","new_customer":"true"},"connector_metadata":null,"feature_metadata":null,"reference_id":"92b96418-ccfc-4a41-b882-c196f2d17d91","payment_link":null,"profile_id":"pro_7kIKHNtq6xvKHlBfazbc","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":"mca_c38WWereiWnpVCtrDTmH","incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-01-24T07:04:49.062Z","fingerprint":null,"browser_info":{"language":"en-US","time_zone":-330,"ip_address":"129.0.0.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","color_depth":32,"java_enabled":true,"screen_width":1728,"accept_header":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","screen_height":1117,"java_script_enabled":true},"payment_method_id":"pm_19peBlu9TYmWO2bASPQL","payment_method_status":"active","updated":"2025-01-24T06:49:51.258Z","split_payments":null,"frm_metadata":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":null}

</details>

<details>
    <summary>3. Zero amount mandate through PayPal (CIT)</summary>

cURL (create a payment link)

    curl --location --request POST 'http://localhost:8080/payments' \
        --header 'Content-Type: application/json' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_Z6hI0pxQyHsH240jY8lyalrGGJGyZBtjWhFrxxCmbvEdc7KywJRANdBXFzZ8XO2G' \
        --data '{"customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","profile_id":"pro_9tMbnzk3iyggEiTQDwZi","customer_acceptance":{"acceptance_type":"online","accepted_at":"1963-05-03T04:07:52.723Z","online":{"ip_address":"127.0.0.1","user_agent":"amet irure esse"}},"amount":0,"currency":"EUR","payment_link":true,"setup_future_usage":"off_session","description":"This is my description of why this payment was requested.","capture_method":"automatic","session_expiry":100000,"return_url":"https://example.com","payment_link_config":{"theme":"#0E103D","logo":"https://hyperswitch.io/favicon.ico","seller_name":"Hyperswitch Inc."}}'

Response

    {"payment_id":"pay_eSstvDXVT0iKWsdKIkTw","merchant_id":"merchant_1739349514","status":"requires_payment_method","amount":0,"net_amount":0,"shipping_cost":null,"amount_capturable":0,"amount_received":null,"connector":null,"client_secret":"pay_eSstvDXVT0iKWsdKIkTw_secret_y5hDfv9Woup0YGv0ZvzZ","created":"2025-02-12T10:02:55.258Z","currency":"EUR","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","customer":{"id":"cus_zO4rCUYOsXWOdZb4Tb8f","name":"John Doe","email":"guest@example.com","phone":"999999999","phone_country_code":"+65"},"description":"This is my description of why this payment was requested.","refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":"off_session","off_session":null,"capture_on":null,"capture_method":"automatic","payment_method":null,"payment_method_data":null,"payment_token":null,"shipping":null,"billing":null,"order_details":null,"email":"guest@example.com","name":"John Doe","phone":"999999999","return_url":"https://example.com/","authentication_type":null,"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":null,"connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":{"customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","created_at":1739354575,"expires":1739358175,"secret":"epk_4c4915a65d3b450286ce3e9ec0a494d4"},"manual_retry_allowed":null,"connector_transaction_id":null,"frm_message":null,"metadata":null,"connector_metadata":null,"feature_metadata":null,"reference_id":null,"payment_link":{"link":"http://localhost:8080/payment_link/merchant_1739349514/pay_eSstvDXVT0iKWsdKIkTw?locale=en","secure_link":null,"payment_link_id":"plink_REQTjbWTbPsP4R8fMdsA"},"profile_id":"pro_9tMbnzk3iyggEiTQDwZi","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":null,"incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-02-13T13:49:35.254Z","fingerprint":null,"browser_info":null,"payment_method_id":null,"payment_method_status":null,"updated":"2025-02-12T10:02:55.271Z","split_payments":null,"frm_metadata":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":null}

cURL (retrieve payment_method_id)

    curl --location --request GET 'http://localhost:8080/payments/pay_eSstvDXVT0iKWsdKIkTw?force_sync=true' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_Z6hI0pxQyHsH240jY8lyalrGGJGyZBtjWhFrxxCmbvEdc7KywJRANdBXFzZ8XO2G'

Response

    {"payment_id":"pay_eSstvDXVT0iKWsdKIkTw","merchant_id":"merchant_1739349514","status":"succeeded","amount":0,"net_amount":0,"shipping_cost":null,"amount_capturable":0,"amount_received":0,"connector":"novalnet","client_secret":"pay_eSstvDXVT0iKWsdKIkTw_secret_y5hDfv9Woup0YGv0ZvzZ","created":"2025-02-12T10:02:55.258Z","currency":"EUR","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","customer":{"id":"cus_zO4rCUYOsXWOdZb4Tb8f","name":"John Doe","email":"guest@example.com","phone":"999999999","phone_country_code":"+65"},"description":"This is my description of why this payment was requested.","refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":"off_session","off_session":null,"capture_on":null,"capture_method":"automatic","payment_method":"wallet","payment_method_data":{"wallet":{},"billing":null},"payment_token":null,"shipping":null,"billing":null,"order_details":null,"email":"guest@example.com","name":"John Doe","phone":"999999999","return_url":"https://example.com/","authentication_type":"no_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":"redirect_to_url","payment_method_type":"paypal","connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":null,"manual_retry_allowed":false,"connector_transaction_id":"15146800034821188","frm_message":null,"metadata":null,"connector_metadata":null,"feature_metadata":null,"reference_id":"15146800034821188","payment_link":{"link":"http://localhost:8080/payment_link/merchant_1739349514/pay_eSstvDXVT0iKWsdKIkTw?locale=en","secure_link":null,"payment_link_id":"plink_REQTjbWTbPsP4R8fMdsA"},"profile_id":"pro_9tMbnzk3iyggEiTQDwZi","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":"mca_VSzA7Xp292ZhnZFVAzXk","incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-02-13T13:49:35.254Z","fingerprint":null,"browser_info":{"os_type":"macOS","language":"en-US","time_zone":-330,"ip_address":"::1","os_version":"10.15.7","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Safari/605.1.15","color_depth":24,"device_model":"Macintosh","java_enabled":true,"screen_width":1728,"accept_header":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","screen_height":1117,"accept_language":"en-US,en;q=0.9","java_script_enabled":true},"payment_method_id":"pm_xOKqXFkPih09U60Md7a9","payment_method_status":"active","updated":"2025-02-12T10:04:11.573Z","split_payments":null,"frm_metadata":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":null}

</details>

<details>
    <summary>4. MIT for PayPal</summary>

cURL (create PayPal MIT)

    curl --location --request POST 'http://localhost:8080/payments' \
        --header 'Content-Type: application/json' \
        --header 'Accept: application/json' \
        --header 'api-key: dev_Z6hI0pxQyHsH240jY8lyalrGGJGyZBtjWhFrxxCmbvEdc7KywJRANdBXFzZ8XO2G' \
        --data-raw '{"amount":100,"currency":"EUR","confirm":true,"capture_method":"automatic","capture_on":"2022-09-10T10:11:12Z","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","email":"guest@example.com","name":"John Doe","phone":"999999999","profile_id":"pro_9tMbnzk3iyggEiTQDwZi","phone_country_code":"+65","description":"Its my first payment request","authentication_type":"no_three_ds","return_url":"https://hyperswitch.io","off_session":true,"recurring_details":{"type":"payment_method_id","data":"pm_xOKqXFkPih09U60Md7a9"},"statement_descriptor_name":"joseph","statement_descriptor_suffix":"JS","metadata":{"udf1":"value1","new_customer":"true","login_date":"2019-09-10T10:11:12Z"},"browser_info":{"ip_address":"129.0.0.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","accept_header":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","language":"en-US","color_depth":32,"screen_height":1117,"screen_width":1728,"time_zone":-330,"java_enabled":true,"java_script_enabled":true}}'

Response

    {"payment_id":"pay_0NCUSdZA36EEALDTtMEf","merchant_id":"merchant_1739349514","status":"succeeded","amount":100,"net_amount":100,"shipping_cost":null,"amount_capturable":0,"amount_received":100,"connector":"novalnet","client_secret":"pay_0NCUSdZA36EEALDTtMEf_secret_0en976XGc0HB37cHdfN8","created":"2025-02-12T10:05:39.834Z","currency":"EUR","customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","customer":{"id":"cus_zO4rCUYOsXWOdZb4Tb8f","name":"John Doe","email":"guest@example.com","phone":"999999999","phone_country_code":"+65"},"description":"Its my first payment request","refunds":null,"disputes":null,"mandate_id":null,"mandate_data":null,"setup_future_usage":null,"off_session":true,"capture_on":null,"capture_method":"automatic","payment_method":"wallet","payment_method_data":null,"payment_token":null,"shipping":null,"billing":null,"order_details":null,"email":"guest@example.com","name":"John Doe","phone":"999999999","return_url":"https://hyperswitch.io/","authentication_type":"no_three_ds","statement_descriptor_name":"joseph","statement_descriptor_suffix":"JS","next_action":null,"cancellation_reason":null,"error_code":null,"error_message":null,"unified_code":null,"unified_message":null,"payment_experience":null,"payment_method_type":"paypal","connector_label":null,"business_country":null,"business_label":"default","business_sub_label":null,"allowed_payment_method_types":null,"ephemeral_key":{"customer_id":"cus_zO4rCUYOsXWOdZb4Tb8f","created_at":1739354739,"expires":1739358339,"secret":"epk_b6fb3fbc14bd44b287d75d7f29406aa9"},"manual_retry_allowed":false,"connector_transaction_id":"15146800034912664","frm_message":null,"metadata":{"udf1":"value1","login_date":"2019-09-10T10:11:12Z","new_customer":"true"},"connector_metadata":null,"feature_metadata":null,"reference_id":"15146800034912664","payment_link":null,"profile_id":"pro_9tMbnzk3iyggEiTQDwZi","surcharge_details":null,"attempt_count":1,"merchant_decision":null,"merchant_connector_id":"mca_VSzA7Xp292ZhnZFVAzXk","incremental_authorization_allowed":null,"authorization_count":null,"incremental_authorizations":null,"external_authentication_details":null,"external_3ds_authentication_attempted":false,"expires_on":"2025-02-12T10:20:39.834Z","fingerprint":null,"browser_info":{"language":"en-US","time_zone":-330,"ip_address":"129.0.0.1","user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36","color_depth":32,"java_enabled":true,"screen_width":1728,"accept_header":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8","screen_height":1117,"java_script_enabled":true},"payment_method_id":"pm_xOKqXFkPih09U60Md7a9","payment_method_status":"active","updated":"2025-02-12T10:05:43.065Z","split_payments":null,"frm_metadata":null,"merchant_order_reference_id":null,"order_tax_amount":null,"connector_mandate_id":"VVBV24y20uF-D20uND14oV24y-12m14oJ00aZ16qZ20uRZTTZ18s20u18s18s151"}

</details>


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