Bug: [FEATURE] Implementing iDEAL and Giropay payment methods with Multisafe



### Feature Description

Add iDEAL and Giropay payment processors in [Multisafepay](https://docs.hyperswitch.io/hyperswitch-cloud/connectors/available-connectors/multisafepay) connector.

Whole description can be found in #4143 discussion.

### Possible Implementation


## Proposal: **Implementing iDEAL and Giropay payment methods with Multisafe** #4143

### Objective
Add iDEAL and Giropay payment processors in [Multisafepay](https://docs.hyperswitch.io/hyperswitch-cloud/connectors/available-connectors/multisafepay) connector. 
### Background
Currently multisafepay provides various payment processors from Banking Methods, BNPL, Credit and Debit cards, Prepaid cards and Wallets segment. From these hyperswitch's multisafepay connector provides support for credit cards and debit cards, mendate payements, GooglePay, Paypal and Klarna only. iDEAL and Giropay are from "Banking Methods" category. 
#### iDeal
iDeal has direct and re-directed flow which is showed below:
![iDeal payment-flow](https://github.com/juspay/hyperswitch/assets/52617262/6356d5cf-e955-4dad-a7c7-2008b8286bfa)

**direct**:  given **iDEAL issuer code** user customer will be directly redirected to the bank’s 
page
**redirect:** Redirect customer to payment’s page to select their bank.
#### Giropay
giropay has only redirect flow which is exactly same flow as iDEAL’s redirect flow.
![Giropay payment-flow](https://github.com/juspay/hyperswitch/assets/52617262/c4cf915d-ccb4-4062-9595-3a283b56f70b)

### Approach
For iDeal deciding direct or re-direct payment type:
If bank name is provided in `PaymentMethodData` then direct path should be used otherwise redirect.  If direct flow is selected then in `MultisafepayPaymentsRequest` ’s `gateway_info` must have **`issuer_id`** field. 

List of iDEAL issuers and respective code is given below ([source](https://docs.multisafepay.com/reference/listidealissuers))

| Code | Description           |
| ---- | --------------------- |
| 0031 | ABN AMRO              |
| 0761 | ASN Bank              |
| 4371 | bunq                  |
| 1235 | Handelsbanken         |
| 9927 | Nationale Nederlanden |
| 9926 | N26                   |
| 0721 | ING                   |
| 0801 | Knab                  |
| 0021 | Rabobank              |
| 0771 | Regio Bank            |
| 1099 | Revolut               |
| 0751 | SNS Bank              |
| 0511 | Triodos Bank          |
| 0161 | Van Lanschot Bankiers |
| 0806 | Yoursafe              |
Only these banks should be allowed in `PaymentMethodData` for iDEAL.
#### Implementation 

All the changes will be in `connector/multisafepay.rs` file and in the enums and traits for request object

- Add `Ideal` and `Giropay` in `Gateway` enum
- changes in `impl TryFrom<&CheckoutRouterData<&T>> for MultisafepayPaymentsRequest`
    - for `payment_type` : add pattern for redirect “giropay” and “iDeal” and direct “iDeal” payments
        
    - for `gateway` : add `BankRedirectData::Ideal` and `BankRedirectData::Geropay` pattern
        
    - for `gateway_info`: Only for direct “iDeal” payments,
        
        - `issuer_id` : get issuer id from the table above
	    There are also optional `gateway_info` fields for modifying payment behaviours like **`allow_change_amount` , `min_amount` and `max_amount`** which are related to QR code payment in direct flop.

### Have you spent some time checking if this feature request 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/config/deployments/integration_test.toml b/config/deployments/integration_test.toml
index a42a6a8c323..738edcbda84 100644
--- a/config/deployments/integration_test.toml
+++ b/config/deployments/integration_test.toml
@@ -4,11 +4,12 @@ eps.adyen.banks = "bank_austria,bawag_psk_ag,dolomitenbank,easybank_ag,erste_ban
 eps.stripe.banks = "arzte_und_apotheker_bank,austrian_anadi_bank_ag,bank_austria,bankhaus_carl_spangler,bankhaus_schelhammer_und_schattera_ag,bawag_psk_ag,bks_bank_ag,brull_kallmus_bank_ag,btv_vier_lander_bank,capital_bank_grawe_gruppe_ag,dolomitenbank,easybank_ag,erste_bank_und_sparkassen,hypo_alpeadriabank_international_ag,hypo_noe_lb_fur_niederosterreich_u_wien,hypo_oberosterreich_salzburg_steiermark,hypo_tirol_bank_ag,hypo_vorarlberg_bank_ag,hypo_bank_burgenland_aktiengesellschaft,marchfelder_bank,oberbank_ag,raiffeisen_bankengruppe_osterreich,schoellerbank_ag,sparda_bank_wien,volksbank_gruppe,volkskreditbank_ag,vr_bank_braunau"
 ideal.adyen.banks = "abn_amro,asn_bank,bunq,ing,knab,n26,nationale_nederlanden,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot,yoursafe"
 ideal.stripe.banks = "abn_amro,asn_bank,bunq,handelsbanken,ing,knab,moneyou,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot"
+ideal.multisafepay.banks = "abn_amro, asn_bank, bunq, handelsbanken, nationale_nederlanden, n26, ing, knab, rabobank, regiobank, revolut, sns_bank,triodos_bank, van_lanschot, yoursafe"
 online_banking_czech_republic.adyen.banks = "ceska_sporitelna,komercni_banka,platnosc_online_karta_platnicza"
 online_banking_fpx.adyen.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
 online_banking_poland.adyen.banks = "blik_psp,place_zipko,m_bank,pay_with_ing,santander_przelew24,bank_pekaosa,bank_millennium,pay_with_alior_bank,banki_spoldzielcze,pay_with_inteligo,bnp_paribas_poland,bank_nowy_sa,credit_agricole,pay_with_bos,pay_with_citi_handlowy,pay_with_plus_bank,toyota_bank,velo_bank,e_transfer_pocztowy24"
 online_banking_slovakia.adyen.banks = "e_platby_vub,postova_banka,sporo_pay,tatra_pay,viamo"
-online_banking_thailand.adyen.banks = "bangkok_bank,krungsri_bank,krung_thai_bank,the_siam_commercial_bank,kasikorn_bank"
+online_banking_thailand.adyen.banks = "bangkok_bank,krungsrgiri_bank,krung_thai_bank,the_siam_commercial_bank,kasikorn_bank"
 open_banking_uk.adyen.banks = "aib,bank_of_scotland,danske_bank,first_direct,first_trust,halifax,lloyds,monzo,nat_west,nationwide_bank,royal_bank_of_scotland,starling,tsb_bank,tesco_bank,ulster_bank,barclays,hsbc_bank,revolut,santander_przelew24,open_bank_success,open_bank_failure,open_bank_cancelled"
 przelewy24.stripe.banks = "alior_bank,bank_millennium,bank_nowy_bfg_sa,bank_pekao_sa,banki_spbdzielcze,blik,bnp_paribas,boz,citi,credit_agricole,e_transfer_pocztowy24,getin_bank,idea_bank,inteligo,mbank_mtransfer,nest_przelew,noble_pay,pbac_z_ipko,plus_bank,santander_przelew24,toyota_bank,volkswagen_bank"
 
@@ -137,10 +138,9 @@ pay_later.klarna.connector_list = "adyen"                       # Mandate suppor
 wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica"         # Mandate supported payment method type and connector for wallets
 wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica"             # Mandate supported payment method type and connector for wallets
 wallet.paypal.connector_list = "adyen"                          # Mandate supported payment method type and connector for wallets
-bank_redirect.ideal.connector_list = "stripe,adyen,globalpay"   # Mandate supported payment method type and connector for bank_redirect
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay"   # Mandate supported payment method type and connector for bank_redirect
 bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"  # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.giropay.connector_list = "adyen,globalpay"        # Mandate supported payment method type and connector for bank_redirect
-
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay"        # Mandate supported payment method type and connector for bank_redirect
 
 [mandates.update_mandate_supported]
 card.credit = { connector_list = "cybersource" }            # Update Mandate supported payment method type and connector for card 
diff --git a/config/deployments/production.toml b/config/deployments/production.toml
index 0cc74067337..b4e02172dfc 100644
--- a/config/deployments/production.toml
+++ b/config/deployments/production.toml
@@ -4,6 +4,7 @@ eps.adyen.banks = "bank_austria,bawag_psk_ag,dolomitenbank,easybank_ag,erste_ban
 eps.stripe.banks = "arzte_und_apotheker_bank,austrian_anadi_bank_ag,bank_austria,bankhaus_carl_spangler,bankhaus_schelhammer_und_schattera_ag,bawag_psk_ag,bks_bank_ag,brull_kallmus_bank_ag,btv_vier_lander_bank,capital_bank_grawe_gruppe_ag,dolomitenbank,easybank_ag,erste_bank_und_sparkassen,hypo_alpeadriabank_international_ag,hypo_noe_lb_fur_niederosterreich_u_wien,hypo_oberosterreich_salzburg_steiermark,hypo_tirol_bank_ag,hypo_vorarlberg_bank_ag,hypo_bank_burgenland_aktiengesellschaft,marchfelder_bank,oberbank_ag,raiffeisen_bankengruppe_osterreich,schoellerbank_ag,sparda_bank_wien,volksbank_gruppe,volkskreditbank_ag,vr_bank_braunau"
 ideal.adyen.banks = "abn_amro,asn_bank,bunq,ing,knab,n26,nationale_nederlanden,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot,yoursafe"
 ideal.stripe.banks = "abn_amro,asn_bank,bunq,handelsbanken,ing,knab,moneyou,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot"
+ideal.multisafepay.banks = "abn_amro, asn_bank, bunq, handelsbanken, nationale_nederlanden, n26, ing, knab, rabobank, regiobank, revolut, sns_bank,triodos_bank, van_lanschot, yoursafe"
 online_banking_czech_republic.adyen.banks = "ceska_sporitelna,komercni_banka,platnosc_online_karta_platnicza"
 online_banking_fpx.adyen.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
 online_banking_poland.adyen.banks = "blik_psp,place_zipko,m_bank,pay_with_ing,santander_przelew24,bank_pekaosa,bank_millennium,pay_with_alior_bank,banki_spoldzielcze,pay_with_inteligo,bnp_paribas_poland,bank_nowy_sa,credit_agricole,pay_with_bos,pay_with_citi_handlowy,pay_with_plus_bank,toyota_bank,velo_bank,e_transfer_pocztowy24"
@@ -137,9 +138,9 @@ pay_later.klarna.connector_list = "adyen"                       # Mandate suppor
 wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica"         # Mandate supported payment method type and connector for wallets
 wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica"             # Mandate supported payment method type and connector for wallets
 wallet.paypal.connector_list = "adyen"                          # Mandate supported payment method type and connector for wallets
-bank_redirect.ideal.connector_list = "stripe,adyen,globalpay"   # Mandate supported payment method type and connector for bank_redirect
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay"   # Mandate supported payment method type and connector for bank_redirect
 bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"  # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.giropay.connector_list = "adyen,globalpay"        # Mandate supported payment method type and connector for bank_redirect
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay"        # Mandate supported payment method type and connector for bank_redirect
 
 [mandates.update_mandate_supported]
 card.credit = { connector_list = "cybersource" }            # Update Mandate supported payment method type and connector for card 
diff --git a/config/deployments/sandbox.toml b/config/deployments/sandbox.toml
index a61ad70eccf..180cf56db4d 100644
--- a/config/deployments/sandbox.toml
+++ b/config/deployments/sandbox.toml
@@ -4,6 +4,7 @@ eps.adyen.banks = "bank_austria,bawag_psk_ag,dolomitenbank,easybank_ag,erste_ban
 eps.stripe.banks = "arzte_und_apotheker_bank,austrian_anadi_bank_ag,bank_austria,bankhaus_carl_spangler,bankhaus_schelhammer_und_schattera_ag,bawag_psk_ag,bks_bank_ag,brull_kallmus_bank_ag,btv_vier_lander_bank,capital_bank_grawe_gruppe_ag,dolomitenbank,easybank_ag,erste_bank_und_sparkassen,hypo_alpeadriabank_international_ag,hypo_noe_lb_fur_niederosterreich_u_wien,hypo_oberosterreich_salzburg_steiermark,hypo_tirol_bank_ag,hypo_vorarlberg_bank_ag,hypo_bank_burgenland_aktiengesellschaft,marchfelder_bank,oberbank_ag,raiffeisen_bankengruppe_osterreich,schoellerbank_ag,sparda_bank_wien,volksbank_gruppe,volkskreditbank_ag,vr_bank_braunau"
 ideal.adyen.banks = "abn_amro,asn_bank,bunq,ing,knab,n26,nationale_nederlanden,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot,yoursafe"
 ideal.stripe.banks = "abn_amro,asn_bank,bunq,handelsbanken,ing,knab,moneyou,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot"
+ideal.multisafepay.banks = "abn_amro, asn_bank, bunq, handelsbanken, nationale_nederlanden, n26, ing, knab, rabobank, regiobank, revolut, sns_bank,triodos_bank, van_lanschot, yoursafe"
 online_banking_czech_republic.adyen.banks = "ceska_sporitelna,komercni_banka,platnosc_online_karta_platnicza"
 online_banking_fpx.adyen.banks = "affin_bank,agro_bank,alliance_bank,am_bank,bank_islam,bank_muamalat,bank_rakyat,bank_simpanan_nasional,cimb_bank,hong_leong_bank,hsbc_bank,kuwait_finance_house,maybank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"
 online_banking_poland.adyen.banks = "blik_psp,place_zipko,m_bank,pay_with_ing,santander_przelew24,bank_pekaosa,bank_millennium,pay_with_alior_bank,banki_spoldzielcze,pay_with_inteligo,bnp_paribas_poland,bank_nowy_sa,credit_agricole,pay_with_bos,pay_with_citi_handlowy,pay_with_plus_bank,toyota_bank,velo_bank,e_transfer_pocztowy24"
@@ -137,9 +138,9 @@ pay_later.klarna.connector_list = "adyen"                       # Mandate suppor
 wallet.apple_pay.connector_list = "stripe,adyen,cybersource,noon,bankofamerica"         # Mandate supported payment method type and connector for wallets
 wallet.google_pay.connector_list = "stripe,adyen,cybersource,bankofamerica"             # Mandate supported payment method type and connector for wallets
 wallet.paypal.connector_list = "adyen"                          # Mandate supported payment method type and connector for wallets
-bank_redirect.ideal.connector_list = "stripe,adyen,globalpay"   # Mandate supported payment method type and connector for bank_redirect
+bank_redirect.ideal.connector_list = "stripe,adyen,globalpay,multisafepay"   # Mandate supported payment method type and connector for bank_redirect
 bank_redirect.sofort.connector_list = "stripe,adyen,globalpay"  # Mandate supported payment method type and connector for bank_redirect
-bank_redirect.giropay.connector_list = "adyen,globalpay"        # Mandate supported payment method type and connector for bank_redirect
+bank_redirect.giropay.connector_list = "adyen,globalpay,multisafepay"        # Mandate supported payment method type and connector for bank_redirect
 
 [mandates.update_mandate_supported]
 card.credit = { connector_list = "cybersource" }            # Update Mandate supported payment method type and connector for card 
diff --git a/config/development.toml b/config/development.toml
index 95cadf56617..a742edcf727 100644
--- a/config/development.toml
+++ b/config/development.toml
@@ -281,6 +281,7 @@ adyen = { banks = "bank_austria,bawag_psk_ag,dolomitenbank,easybank_ag,erste_ban
 [bank_config.ideal]
 stripe = { banks = "abn_amro,asn_bank,bunq,handelsbanken,ing,knab,moneyou,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot" }
 adyen = { banks = "abn_amro,asn_bank,bunq,ing,knab,n26,nationale_nederlanden,rabobank,regiobank,revolut,sns_bank,triodos_bank,van_lanschot, yoursafe" }
+multisafepay = { banks="abn_amro, asn_bank, bunq, handelsbanken, nationale_nederlanden, n26, ing, knab, rabobank, regiobank, revolut, sns_bank,triodos_bank, van_lanschot, yoursafe" }
 
 [bank_config.online_banking_czech_republic]
 adyen = { banks = "ceska_sporitelna,komercni_banka,platnosc_online_karta_platnicza" }
@@ -533,9 +534,9 @@ card.debit = { connector_list = "stripe,adyen,authorizedotnet,cybersource,global
 bank_debit.ach = { connector_list = "gocardless" }
 bank_debit.becs = { connector_list = "gocardless" }
 bank_debit.sepa = { connector_list = "gocardless" }
-bank_redirect.ideal = { connector_list = "stripe,adyen,globalpay" }
+bank_redirect.ideal = { connector_list = "stripe,adyen,globalpay,multisafepay" }
 bank_redirect.sofort = { connector_list = "stripe,adyen,globalpay" }
-bank_redirect.giropay = { connector_list = "adyen,globalpay" }
+bank_redirect.giropay = { connector_list = "adyen,globalpay,multisafepay" }
 
 [mandates.update_mandate_supported]
 card.credit = { connector_list = "cybersource" }
diff --git a/crates/router/src/connector/multisafepay/transformers.rs b/crates/router/src/connector/multisafepay/transformers.rs
index d3aadcd0607..49e4c516265 100644
--- a/crates/router/src/connector/multisafepay/transformers.rs
+++ b/crates/router/src/connector/multisafepay/transformers.rs
@@ -1,3 +1,4 @@
+use api_models::enums::BankNames;
 use common_enums::AttemptStatus;
 use common_utils::pii::{Email, IpAddress};
 use masking::ExposeInterface;
@@ -52,6 +53,8 @@ pub enum Gateway {
     Klarna,
     Googlepay,
     Paypal,
+    Ideal,
+    Giropay,
 }
 
 #[serde_with::skip_serializing_none]
@@ -162,6 +165,7 @@ pub enum GatewayInfo {
     Card(CardInfo),
     Wallet(WalletInfo),
     PayLater(PayLaterInfo),
+    BankRedirect(BankRedirectInfo),
 }
 
 #[derive(Clone, Debug, Eq, PartialEq, Serialize)]
@@ -170,6 +174,207 @@ pub enum WalletInfo {
     GooglePay(GpayInfo),
 }
 
+#[derive(Clone, Debug, Eq, PartialEq, Serialize)]
+#[serde(untagged)]
+pub enum BankRedirectInfo {
+    Ideal(IdealInfo),
+}
+
+#[derive(Debug, Clone, Serialize, Eq, PartialEq)]
+pub struct IdealInfo {
+    pub issuer_id: MultisafepayBankNames,
+}
+
+#[derive(Debug, Clone, Serialize, Eq, PartialEq)]
+pub enum MultisafepayBankNames {
+    #[serde(rename = "0031")]
+    AbnAmro,
+    #[serde(rename = "0761")]
+    AsnBank,
+    #[serde(rename = "4371")]
+    Bunq,
+    #[serde(rename = "0721")]
+    Ing,
+    #[serde(rename = "0801")]
+    Knab,
+    #[serde(rename = "9926")]
+    N26,
+    #[serde(rename = "9927")]
+    NationaleNederlanden,
+    #[serde(rename = "0021")]
+    Rabobank,
+    #[serde(rename = "0771")]
+    Regiobank,
+    #[serde(rename = "1099")]
+    Revolut,
+    #[serde(rename = "0751")]
+    SnsBank,
+    #[serde(rename = "0511")]
+    TriodosBank,
+    #[serde(rename = "0161")]
+    VanLanschot,
+    #[serde(rename = "0806")]
+    Yoursafe,
+    #[serde(rename = "1235")]
+    Handelsbanken,
+}
+
+impl TryFrom<&BankNames> for MultisafepayBankNames {
+    type Error = error_stack::Report<errors::ConnectorError>;
+    fn try_from(bank: &BankNames) -> Result<Self, Self::Error> {
+        match bank {
+            BankNames::AbnAmro => Ok(Self::AbnAmro),
+            BankNames::AsnBank => Ok(Self::AsnBank),
+            BankNames::Bunq => Ok(Self::Bunq),
+            BankNames::Ing => Ok(Self::Ing),
+            BankNames::Knab => Ok(Self::Knab),
+            BankNames::N26 => Ok(Self::N26),
+            BankNames::NationaleNederlanden => Ok(Self::NationaleNederlanden),
+            BankNames::Rabobank => Ok(Self::Rabobank),
+            BankNames::Regiobank => Ok(Self::Regiobank),
+            BankNames::Revolut => Ok(Self::Revolut),
+            BankNames::SnsBank => Ok(Self::SnsBank),
+            BankNames::TriodosBank => Ok(Self::TriodosBank),
+            BankNames::VanLanschot => Ok(Self::VanLanschot),
+            BankNames::Yoursafe => Ok(Self::Yoursafe),
+            BankNames::Handelsbanken => Ok(Self::Handelsbanken),
+            BankNames::AmericanExpress
+            | BankNames::AffinBank
+            | BankNames::AgroBank
+            | BankNames::AllianceBank
+            | BankNames::AmBank
+            | BankNames::BankOfAmerica
+            | BankNames::BankIslam
+            | BankNames::BankMuamalat
+            | BankNames::BankRakyat
+            | BankNames::BankSimpananNasional
+            | BankNames::Barclays
+            | BankNames::BlikPSP
+            | BankNames::CapitalOne
+            | BankNames::Chase
+            | BankNames::Citi
+            | BankNames::CimbBank
+            | BankNames::Discover
+            | BankNames::NavyFederalCreditUnion
+            | BankNames::PentagonFederalCreditUnion
+            | BankNames::SynchronyBank
+            | BankNames::WellsFargo
+            | BankNames::HongLeongBank
+            | BankNames::HsbcBank
+            | BankNames::KuwaitFinanceHouse
+            | BankNames::Moneyou
+            | BankNames::ArzteUndApothekerBank
+            | BankNames::AustrianAnadiBankAg
+            | BankNames::BankAustria
+            | BankNames::Bank99Ag
+            | BankNames::BankhausCarlSpangler
+            | BankNames::BankhausSchelhammerUndSchatteraAg
+            | BankNames::BankMillennium
+            | BankNames::BankPEKAOSA
+            | BankNames::BawagPskAg
+            | BankNames::BksBankAg
+            | BankNames::BrullKallmusBankAg
+            | BankNames::BtvVierLanderBank
+            | BankNames::CapitalBankGraweGruppeAg
+            | BankNames::CeskaSporitelna
+            | BankNames::Dolomitenbank
+            | BankNames::EasybankAg
+            | BankNames::EPlatbyVUB
+            | BankNames::ErsteBankUndSparkassen
+            | BankNames::FrieslandBank
+            | BankNames::HypoAlpeadriabankInternationalAg
+            | BankNames::HypoNoeLbFurNiederosterreichUWien
+            | BankNames::HypoOberosterreichSalzburgSteiermark
+            | BankNames::HypoTirolBankAg
+            | BankNames::HypoVorarlbergBankAg
+            | BankNames::HypoBankBurgenlandAktiengesellschaft
+            | BankNames::KomercniBanka
+            | BankNames::MBank
+            | BankNames::MarchfelderBank
+            | BankNames::Maybank
+            | BankNames::OberbankAg
+            | BankNames::OsterreichischeArzteUndApothekerbank
+            | BankNames::OcbcBank
+            | BankNames::PayWithING
+            | BankNames::PlaceZIPKO
+            | BankNames::PlatnoscOnlineKartaPlatnicza
+            | BankNames::PosojilnicaBankEGen
+            | BankNames::PostovaBanka
+            | BankNames::PublicBank
+            | BankNames::RaiffeisenBankengruppeOsterreich
+            | BankNames::RhbBank
+            | BankNames::SchelhammerCapitalBankAg
+            | BankNames::StandardCharteredBank
+            | BankNames::SchoellerbankAg
+            | BankNames::SpardaBankWien
+            | BankNames::SporoPay
+            | BankNames::SantanderPrzelew24
+            | BankNames::TatraPay
+            | BankNames::Viamo
+            | BankNames::VolksbankGruppe
+            | BankNames::VolkskreditbankAg
+            | BankNames::VrBankBraunau
+            | BankNames::UobBank
+            | BankNames::PayWithAliorBank
+            | BankNames::BankiSpoldzielcze
+            | BankNames::PayWithInteligo
+            | BankNames::BNPParibasPoland
+            | BankNames::BankNowySA
+            | BankNames::CreditAgricole
+            | BankNames::PayWithBOS
+            | BankNames::PayWithCitiHandlowy
+            | BankNames::PayWithPlusBank
+            | BankNames::ToyotaBank
+            | BankNames::VeloBank
+            | BankNames::ETransferPocztowy24
+            | BankNames::PlusBank
+            | BankNames::EtransferPocztowy24
+            | BankNames::BankiSpbdzielcze
+            | BankNames::BankNowyBfgSa
+            | BankNames::GetinBank
+            | BankNames::Blik
+            | BankNames::NoblePay
+            | BankNames::IdeaBank
+            | BankNames::EnveloBank
+            | BankNames::NestPrzelew
+            | BankNames::MbankMtransfer
+            | BankNames::Inteligo
+            | BankNames::PbacZIpko
+            | BankNames::BnpParibas
+            | BankNames::BankPekaoSa
+            | BankNames::VolkswagenBank
+            | BankNames::AliorBank
+            | BankNames::Boz
+            | BankNames::BangkokBank
+            | BankNames::KrungsriBank
+            | BankNames::KrungThaiBank
+            | BankNames::TheSiamCommercialBank
+            | BankNames::KasikornBank
+            | BankNames::OpenBankSuccess
+            | BankNames::OpenBankFailure
+            | BankNames::OpenBankCancelled
+            | BankNames::Aib
+            | BankNames::BankOfScotland
+            | BankNames::DanskeBank
+            | BankNames::FirstDirect
+            | BankNames::FirstTrust
+            | BankNames::Halifax
+            | BankNames::Lloyds
+            | BankNames::Monzo
+            | BankNames::NatWest
+            | BankNames::NationwideBank
+            | BankNames::RoyalBankOfScotland
+            | BankNames::Starling
+            | BankNames::TsbBank
+            | BankNames::TescoBank
+            | BankNames::UlsterBank => Err(Into::into(errors::ConnectorError::NotSupported {
+                message: String::from("BankRedirect"),
+                connector: "Multisafepay",
+            })),
+        }
+    }
+}
+
 #[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
 pub struct DeliveryObject {
     first_name: Secret<String>,
@@ -300,6 +505,29 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>>
                     utils::get_unimplemented_payment_method_error_message("multisafepay"),
                 ))?,
             },
+            domain::PaymentMethodData::BankRedirect(ref bank_data) => match bank_data {
+                domain::BankRedirectData::Giropay { .. } => Type::Redirect,
+                domain::BankRedirectData::Ideal { .. } => Type::Direct,
+                domain::BankRedirectData::BancontactCard { .. }
+                | domain::BankRedirectData::Bizum { .. }
+                | domain::BankRedirectData::Blik { .. }
+                | domain::BankRedirectData::Eps { .. }
+                | domain::BankRedirectData::Interac { .. }
+                | domain::BankRedirectData::OnlineBankingCzechRepublic { .. }
+                | domain::BankRedirectData::OnlineBankingFinland { .. }
+                | domain::BankRedirectData::OnlineBankingPoland { .. }
+                | domain::BankRedirectData::OnlineBankingSlovakia { .. }
+                | domain::BankRedirectData::OpenBankingUk { .. }
+                | domain::BankRedirectData::Przelewy24 { .. }
+                | domain::BankRedirectData::Sofort { .. }
+                | domain::BankRedirectData::Trustly { .. }
+                | domain::BankRedirectData::OnlineBankingFpx { .. }
+                | domain::BankRedirectData::OnlineBankingThailand { .. } => {
+                    Err(errors::ConnectorError::NotImplemented(
+                        utils::get_unimplemented_payment_method_error_message("multisafepay"),
+                    ))?
+                }
+            },
             domain::PaymentMethodData::PayLater(ref _paylater) => Type::Redirect,
             _ => Type::Redirect,
         };
@@ -339,13 +567,35 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>>
                     utils::get_unimplemented_payment_method_error_message("multisafepay"),
                 ))?,
             }),
+            domain::PaymentMethodData::BankRedirect(ref bank_data) => Some(match bank_data {
+                domain::BankRedirectData::Giropay { .. } => Gateway::Giropay,
+                domain::BankRedirectData::Ideal { .. } => Gateway::Ideal,
+                domain::BankRedirectData::BancontactCard { .. }
+                | domain::BankRedirectData::Bizum { .. }
+                | domain::BankRedirectData::Blik { .. }
+                | domain::BankRedirectData::Eps { .. }
+                | domain::BankRedirectData::Interac { .. }
+                | domain::BankRedirectData::OnlineBankingCzechRepublic { .. }
+                | domain::BankRedirectData::OnlineBankingFinland { .. }
+                | domain::BankRedirectData::OnlineBankingPoland { .. }
+                | domain::BankRedirectData::OnlineBankingSlovakia { .. }
+                | domain::BankRedirectData::OpenBankingUk { .. }
+                | domain::BankRedirectData::Przelewy24 { .. }
+                | domain::BankRedirectData::Sofort { .. }
+                | domain::BankRedirectData::Trustly { .. }
+                | domain::BankRedirectData::OnlineBankingFpx { .. }
+                | domain::BankRedirectData::OnlineBankingThailand { .. } => {
+                    Err(errors::ConnectorError::NotImplemented(
+                        utils::get_unimplemented_payment_method_error_message("multisafepay"),
+                    ))?
+                }
+            }),
             domain::PaymentMethodData::PayLater(domain::PayLaterData::KlarnaRedirect {}) => {
                 Some(Gateway::Klarna)
             }
             domain::PaymentMethodData::MandatePayment => None,
             domain::PaymentMethodData::CardRedirect(_)
             | domain::PaymentMethodData::PayLater(_)
-            | domain::PaymentMethodData::BankRedirect(_)
             | domain::PaymentMethodData::BankDebit(_)
             | domain::PaymentMethodData::BankTransfer(_)
             | domain::PaymentMethodData::Crypto(_)
@@ -493,9 +743,37 @@ impl TryFrom<&MultisafepayRouterData<&types::PaymentsAuthorizeRouterData>>
                     }),
                 }))
             }
+            domain::PaymentMethodData::BankRedirect(ref bank_redirect_data) => {
+                match bank_redirect_data {
+                    domain::BankRedirectData::Ideal { bank_name, .. } => Some(
+                        GatewayInfo::BankRedirect(BankRedirectInfo::Ideal(IdealInfo {
+                            issuer_id: MultisafepayBankNames::try_from(&bank_name.ok_or(
+                                errors::ConnectorError::MissingRequiredField {
+                                    field_name: "ideal.bank_name",
+                                },
+                            )?)?,
+                        })),
+                    ),
+                    domain::BankRedirectData::BancontactCard { .. }
+                    | domain::BankRedirectData::Bizum { .. }
+                    | domain::BankRedirectData::Blik { .. }
+                    | domain::BankRedirectData::Eps { .. }
+                    | domain::BankRedirectData::Giropay { .. }
+                    | domain::BankRedirectData::Interac { .. }
+                    | domain::BankRedirectData::OnlineBankingCzechRepublic { .. }
+                    | domain::BankRedirectData::OnlineBankingFinland { .. }
+                    | domain::BankRedirectData::OnlineBankingPoland { .. }
+                    | domain::BankRedirectData::OnlineBankingSlovakia { .. }
+                    | domain::BankRedirectData::OpenBankingUk { .. }
+                    | domain::BankRedirectData::Przelewy24 { .. }
+                    | domain::BankRedirectData::Sofort { .. }
+                    | domain::BankRedirectData::Trustly { .. }
+                    | domain::BankRedirectData::OnlineBankingFpx { .. }
+                    | domain::BankRedirectData::OnlineBankingThailand { .. } => None,
+                }
+            }
             domain::PaymentMethodData::MandatePayment => None,
             domain::PaymentMethodData::CardRedirect(_)
-            | domain::PaymentMethodData::BankRedirect(_)
             | domain::PaymentMethodData::BankDebit(_)
             | domain::PaymentMethodData::BankTransfer(_)
             | domain::PaymentMethodData::Crypto(_)


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

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

## Description
<!-- Describe your changes in detail -->
Add iDEAL and Giropay payment processors in [Multisafepay](https://docs.hyperswitch.io/hyperswitch-cloud/connectors/available-connectors/multisafepay) connector.

Whole description can be found in https://github.com/juspay/hyperswitch/discussions/4143 discussion.

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

Solves the issue #4397  

## 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)?
-->
I have tested the Multisafe payment connector for Giropay and iDeal methods in Postman suit. You can find my fork of Postman's collection below. In `Payments - Create iDeal Payment` and `Payments - Create Giropay Direct` in `Quick Start` are the requests for the payments.

### iDeal
By requesting the iDeal payment method with "Ing" bank name, a redirection link can be found, redirecting to the test portal of Multisafepay, where we can see the bank name we selected. 
<img width="1166" alt="image" src="https://github.com/juspay/hyperswitch/assets/52617262/03330626-f5cf-4dae-8101-8994bb2dd273">
<img width="842" alt="image" src="https://github.com/juspay/hyperswitch/assets/52617262/2f6afb1f-0b3f-445c-8bcd-f1971cbfe82d">
Also, passing bank names not supported by iDeal raises an Error.
<img width="1212" alt="image" src="https://github.com/juspay/hyperswitch/assets/52617262/a1a80fc1-888b-48d6-934f-916b1dfa2d45">

Not Passing the bank name in the `payment_method_data` returns an error, too.
<img width="1210" alt="image" src="https://github.com/juspay/hyperswitch/assets/52617262/82b466c4-db37-4f10-8534-716509e1640b">

### Giropay
Giropay doesn't support the direct method, so it is not compulsory to enter `bank_name` into the `payment_method_data`. After a successful request to Multisafepay, We will get a redirection link to the Mutisafepay payment's page. 
<img width="1200" alt="image" src="https://github.com/juspay/hyperswitch/assets/52617262/abcaa114-7a7c-4de5-a51f-96528d7f2cab">

Mutisafepay payment page. 
<img width="829" alt="image" src="https://github.com/juspay/hyperswitch/assets/52617262/faf1107b-c0a9-4148-b4fa-835b3da8ebe1">




[<img src="https://run.pstmn.io/button.svg" alt="Run In Postman" style="width: 128px; height: 32px;">](https://app.getpostman.com/run-collection/10729153-3cd01106-4ad2-4570-a1dd-a2629eb55658?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D10729153-3cd01106-4ad2-4570-a1dd-a2629eb55658%26entityType%3Dcollection%26workspaceId%3D88823756-0d03-4feb-a41e-364916fb37b0)
## 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
- [ ] I added a [CHANGELOG](/CHANGELOG.md) entry if applicable
