diff --git a/config/config.example.toml b/config/config.example.toml index 8318a8c7f3..c352ac83ac 100644 --- a/config/config.example.toml +++ b/config/config.example.toml @@ -319,6 +319,11 @@ payout_eligibility = true # Defaults the eligibility of a payout method to tru [pm_filters.adyen] online_banking_fpx = {country = "MY", currency = "MYR"} +online_banking_thailand = {country = "TH", currency = "THB"} [bank_config.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,may_bank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"} \ No newline at end of file +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,may_bank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"} + + +[bank_config.online_banking_thailand] +adyen = {banks = "bangkok_bank,krungsri_bank,krung_thai_bank,the_siam_commercial_bank,kasikorn_bank"} \ No newline at end of file diff --git a/config/development.toml b/config/development.toml index 4dfe1ef37e..694beb54ad 100644 --- a/config/development.toml +++ b/config/development.toml @@ -197,6 +197,9 @@ stripe = { banks = "alior_bank,bank_millennium,bank_nowy_bfg_sa,bank_pekao_sa,ba [bank_config.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,may_bank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"} +[bank_config.online_banking_thailand] +adyen = {banks = "bangkok_bank,krungsri_bank,krung_thai_bank,the_siam_commercial_bank,kasikorn_bank"} + [pm_filters.default] google_pay = { country = "AL,DZ,AS,AO,AG,AR,AU,AT,AZ,BH,BY,BE,BR,BG,CA,CL,CO,HR,CZ,DK,DO,EG,EE,FI,FR,DE,GR,HK,HU,IN,ID,IE,IL,IT,JP,JO,KZ,KE,KW,LV,LB,LT,LU,MY,MX,NL,NZ,NO,OM,PK,PA,PE,PH,PL,PT,QA,RO,RU,SA,SG,SK,ZA,ES,LK,SE,CH,TW,TH,TR,UA,AE,GB,US,UY,VN" } apple_pay = { country = "AU,CN,HK,JP,MO,MY,NZ,SG,TW,AM,AT,AZ,BY,BE,BG,HR,CY,CZ,DK,EE,FO,FI,FR,GE,DE,GR,GL,GG,HU,IS,IE,IM,IT,KZ,JE,LV,LI,LT,LU,MT,MD,MC,ME,NL,NO,PL,PT,RO,SM,RS,SK,SI,ES,SE,CH,UA,GB,AR,CO,CR,BR,MX,PE,BH,IL,JO,KW,PS,QA,SA,AE,CA,UM,US", currency = "AUD,CHF,CAD,EUR,GBP,HKD,SGD,USD" } @@ -254,6 +257,7 @@ kakao_pay = {country = "KR", currency = "KRW"} momo = {country = "VN", currency = "VND"} gcash = {country = "PH", currency = "PHP"} online_banking_fpx = {country = "MY", currency = "MYR"} +online_banking_thailand = {country = "TH", currency = "THB"} [pm_filters.braintree] paypal = { currency = "AUD,BRL,CAD,CNY,CZK,DKK,EUR,HKD,HUF,ILS,JPY,MYR,MXN,TWD,NZD,NOK,PHP,PLN,GBP,RUB,SGD,SEK,CHF,THB,USD" } diff --git a/config/docker_compose.toml b/config/docker_compose.toml index dce7e6fe8d..19478f7d12 100644 --- a/config/docker_compose.toml +++ b/config/docker_compose.toml @@ -202,6 +202,10 @@ payout_eligibility = true [pm_filters.adyen] online_banking_fpx = {country = "MY", currency = "MYR"} +online_banking_thailand = {country = "TH", currency = "THB"} [bank_config.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,may_bank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"} \ No newline at end of file +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,may_bank,ocbc_bank,public_bank,rhb_bank,standard_chartered_bank,uob_bank"} + +[bank_config.online_banking_thailand] +adyen = {banks = "bangkok_bank,krungsri_bank,krung_thai_bank,the_siam_commercial_bank,kasikorn_bank"} \ No newline at end of file diff --git a/crates/api_models/src/enums.rs b/crates/api_models/src/enums.rs index f9d150aaa5..9f6e9617ad 100644 --- a/crates/api_models/src/enums.rs +++ b/crates/api_models/src/enums.rs @@ -395,6 +395,11 @@ pub enum BankNames { VolkswagenBank, AliorBank, Boz, + BangkokBank, + KrungsriBank, + KrungThaiBank, + TheSiamCommercialBank, + KasikornBank, } #[derive( diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs index 8bf06db045..c9de0ceb53 100644 --- a/crates/api_models/src/payments.rs +++ b/crates/api_models/src/payments.rs @@ -860,6 +860,10 @@ pub enum BankRedirectData { #[schema(value_type = BankNames)] issuer: api_enums::BankNames, }, + OnlineBankingThailand { + #[schema(value_type = BankNames)] + issuer: api_enums::BankNames, + }, } #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)] diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index 2c473f7372..3c40aa1145 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -584,6 +584,7 @@ pub enum PaymentMethodType { MobilePay, Momo, Multibanco, + OnlineBankingThailand, OnlineBankingCzechRepublic, OnlineBankingFinland, OnlineBankingFpx, diff --git a/crates/common_enums/src/transformers.rs b/crates/common_enums/src/transformers.rs index f12ba807df..1ec390fa05 100644 --- a/crates/common_enums/src/transformers.rs +++ b/crates/common_enums/src/transformers.rs @@ -1569,6 +1569,7 @@ impl From for PaymentMethod { PaymentMethodType::OnlineBankingCzechRepublic => Self::BankRedirect, PaymentMethodType::OnlineBankingFinland => Self::BankRedirect, PaymentMethodType::OnlineBankingFpx => Self::BankRedirect, + PaymentMethodType::OnlineBankingThailand => Self::BankRedirect, PaymentMethodType::OnlineBankingPoland => Self::BankRedirect, PaymentMethodType::OnlineBankingSlovakia => Self::BankRedirect, PaymentMethodType::PayBright => Self::PayLater, diff --git a/crates/diesel_models/src/enums.rs b/crates/diesel_models/src/enums.rs index 36a3e9f67a..5ba1912b6d 100644 --- a/crates/diesel_models/src/enums.rs +++ b/crates/diesel_models/src/enums.rs @@ -306,4 +306,9 @@ pub enum BankNames { RhbBank, StandardCharteredBank, UobBank, + BangkokBank, + KrungsriBank, + KrungThaiBank, + TheSiamCommercialBank, + KasikornBank, } diff --git a/crates/router/src/connector/adyen/transformers.rs b/crates/router/src/connector/adyen/transformers.rs index dbb48f60bc..bffe1cc849 100644 --- a/crates/router/src/connector/adyen/transformers.rs +++ b/crates/router/src/connector/adyen/transformers.rs @@ -329,6 +329,8 @@ pub enum AdyenPaymentMethod<'a> { OnlineBankingSlovakia(Box), #[serde(rename = "molpay_ebanking_fpx_MY")] OnlineBankingFpx(Box), + #[serde(rename = "molpay_ebanking_TH")] + OnlineBankingThailand(Box), PayBright(Box), Sofort(Box), Trustly(Box), @@ -559,7 +561,13 @@ pub struct OnlineBankingSlovakiaData { #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct OnlineBankingFpxData { - issuer: AdyenIssuerID, + issuer: OnlineBankingFpxIssuer, +} + +#[derive(Debug, Clone, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct OnlineBankingThailandData { + issuer: OnlineBankingThailandIssuer, } #[derive(Debug, Clone, Serialize)] @@ -590,7 +598,7 @@ impl TryFrom<&api_enums::BankNames> for OnlineBankingSlovakiaBanks { } } -impl TryFrom<&api_enums::BankNames> for AdyenIssuerID { +impl TryFrom<&api_enums::BankNames> for OnlineBankingFpxIssuer { type Error = Error; fn try_from(bank_name: &api_enums::BankNames) -> Result { match bank_name { @@ -621,6 +629,24 @@ impl TryFrom<&api_enums::BankNames> for AdyenIssuerID { } } +impl TryFrom<&api_enums::BankNames> for OnlineBankingThailandIssuer { + type Error = Error; + fn try_from(bank_name: &api_enums::BankNames) -> Result { + match bank_name { + api::enums::BankNames::BangkokBank => Ok(Self::Bangkokbank), + api::enums::BankNames::KrungsriBank => Ok(Self::Krungsribank), + api::enums::BankNames::KrungThaiBank => Ok(Self::Krungthaibank), + api::enums::BankNames::TheSiamCommercialBank => Ok(Self::Siamcommercialbank), + api::enums::BankNames::KasikornBank => Ok(Self::Kbank), + _ => Err(errors::ConnectorError::NotSupported { + message: String::from("BankRedirect"), + connector: "Adyen", + payment_experience: api_enums::PaymentExperience::RedirectToUrl.to_string(), + })?, + } + } +} + #[derive(Debug, Clone, Serialize)] #[serde(rename_all = "camelCase")] pub struct BlikRedirectionData { @@ -827,6 +853,8 @@ pub enum PaymentType { OnlineBankingSlovakia, #[serde(rename = "molpay_ebanking_fpx_MY")] OnlineBankingFpx, + #[serde(rename = "molpay_ebanking_TH")] + OnlineBankingThailand, PayBright, Paypal, Scheme, @@ -850,7 +878,7 @@ pub enum PaymentType { #[derive(Debug, Eq, PartialEq, Serialize, Clone)] #[serde(rename_all = "snake_case")] -pub enum AdyenIssuerID { +pub enum OnlineBankingFpxIssuer { FpxAbb, FpxAgrobank, FpxAbmb, @@ -871,6 +899,20 @@ pub enum AdyenIssuerID { FpxUob, } +#[derive(Debug, Eq, PartialEq, Serialize, Clone)] +pub enum OnlineBankingThailandIssuer { + #[serde(rename = "molpay_bangkokbank")] + Bangkokbank, + #[serde(rename = "molpay_krungsribank")] + Krungsribank, + #[serde(rename = "molpay_krungthaibank")] + Krungthaibank, + #[serde(rename = "molpay_siamcommercialbank")] + Siamcommercialbank, + #[serde(rename = "molpay_kbank")] + Kbank, +} + pub struct AdyenTestBankNames<'a>(&'a str); impl<'a> TryFrom<&api_enums::BankNames> for AdyenTestBankNames<'a> { @@ -1561,7 +1603,12 @@ impl<'a> TryFrom<&api_models::payments::BankRedirectData> for AdyenPaymentMethod ), api_models::payments::BankRedirectData::OnlineBankingFpx { issuer } => Ok( AdyenPaymentMethod::OnlineBankingFpx(Box::new(OnlineBankingFpxData { - issuer: AdyenIssuerID::try_from(issuer)?, + issuer: OnlineBankingFpxIssuer::try_from(issuer)?, + })), + ), + api_models::payments::BankRedirectData::OnlineBankingThailand { issuer } => Ok( + AdyenPaymentMethod::OnlineBankingThailand(Box::new(OnlineBankingThailandData { + issuer: OnlineBankingThailandIssuer::try_from(issuer)?, })), ), api_models::payments::BankRedirectData::Sofort { .. } => Ok( diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index 97e42fd3f8..525c045388 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -194,6 +194,7 @@ impl ForeignFrom for api_enums::PaymentMethod { | api_enums::PaymentMethodType::Eps | api_enums::PaymentMethodType::BancontactCard | api_enums::PaymentMethodType::Blik + | api_enums::PaymentMethodType::OnlineBankingThailand | api_enums::PaymentMethodType::OnlineBankingCzechRepublic | api_enums::PaymentMethodType::OnlineBankingFinland | api_enums::PaymentMethodType::OnlineBankingFpx diff --git a/crates/router/tests/connectors/adyen_uk_ui.rs b/crates/router/tests/connectors/adyen_uk_ui.rs index 6cf4aa2782..2482326aaf 100644 --- a/crates/router/tests/connectors/adyen_uk_ui.rs +++ b/crates/router/tests/connectors/adyen_uk_ui.rs @@ -576,6 +576,23 @@ async fn should_make_adyen_online_banking_fpx_payment( Ok(()) } +async fn should_make_adyen_online_banking_thailand_payment( + web_driver: WebDriver, +) -> Result<(), WebDriverError> { + let conn = AdyenSeleniumTest {}; + conn.make_redirection_payment( + web_driver, + vec![ + Event::Trigger(Trigger::Goto(&format!("{CHEKOUT_BASE_URL}/saved/184"))), + Event::Trigger(Trigger::Click(By::Id("card-submit-btn"))), + Event::Trigger(Trigger::Click(By::Css("button[value='authorised']"))), + Event::Assert(Assert::IsPresent("succeeded")), + ], + ) + .await?; + Ok(()) +} + #[test] #[serial] #[ignore] @@ -749,3 +766,11 @@ fn should_make_adyen_dana_payment_test() { fn should_make_adyen_online_banking_fpx_payment_test() { tester!(should_make_adyen_online_banking_fpx_payment); } + +#[test] +#[serial] +fn should_make_adyen_online_banking_thailand_payment_test() { + tester!(should_make_adyen_online_banking_thailand_payment); +} + +// https://hs-payments-test.netlify.app/paypal-redirect?amount=70.00&country=US¤cy=USD&mandate_data[customer_acceptance][acceptance_type]=offline&mandate_data[customer_acceptance][accepted_at]=1963-05-03T04:07:52.723Z&mandate_data[customer_acceptance][online][ip_address]=127.0.0.1&mandate_data[customer_acceptance][online][user_agent]=amet%20irure%20esse&mandate_data[mandate_type][multi_use][amount]=700&mandate_data[mandate_type][multi_use][currency]=USD&apikey=dev_uFpxA0r6jjbVaxHSY3X0BZLL3erDUzvg3i51abwB1Bknu3fdiPxw475DQgnByn1z diff --git a/openapi/openapi_spec.json b/openapi/openapi_spec.json index ab2e1b1ccd..e1a40ba791 100644 --- a/openapi/openapi_spec.json +++ b/openapi/openapi_spec.json @@ -2711,7 +2711,12 @@ "bank_pekao_sa", "volkswagen_bank", "alior_bank", - "boz" + "boz", + "bangkok_bank", + "krungsri_bank", + "krung_thai_bank", + "the_siam_commercial_bank", + "kasikorn_bank" ] }, "BankRedirectBilling": { @@ -3089,6 +3094,25 @@ } } } + }, + { + "type": "object", + "required": [ + "online_banking_thailand" + ], + "properties": { + "online_banking_thailand": { + "type": "object", + "required": [ + "issuer" + ], + "properties": { + "issuer": { + "$ref": "#/components/schemas/BankNames" + } + } + } + } } ] }, @@ -7188,6 +7212,7 @@ "mobile_pay", "momo", "multibanco", + "online_banking_thailand", "online_banking_czech_republic", "online_banking_finland", "online_banking_fpx",