feat(connector): [Adyen] implement Online Banking Thailand for Adyen (#1585)

Co-authored-by: Sangamesh Kulkarni <59434228+Sangamesh26@users.noreply.github.com>
This commit is contained in:
AkshayaFoiger
2023-07-20 22:42:28 +05:30
committed by GitHub
parent 78ce8f7563
commit 0c3cf05ffc
12 changed files with 134 additions and 7 deletions

View File

@ -319,6 +319,11 @@ payout_eligibility = true # Defaults the eligibility of a payout method to tru
[pm_filters.adyen] [pm_filters.adyen]
online_banking_fpx = {country = "MY", currency = "MYR"} online_banking_fpx = {country = "MY", currency = "MYR"}
online_banking_thailand = {country = "TH", currency = "THB"}
[bank_config.online_banking_fpx] [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"} 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"}

View File

@ -197,6 +197,9 @@ stripe = { banks = "alior_bank,bank_millennium,bank_nowy_bfg_sa,bank_pekao_sa,ba
[bank_config.online_banking_fpx] [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"} 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] [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" } 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" } 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"} momo = {country = "VN", currency = "VND"}
gcash = {country = "PH", currency = "PHP"} gcash = {country = "PH", currency = "PHP"}
online_banking_fpx = {country = "MY", currency = "MYR"} online_banking_fpx = {country = "MY", currency = "MYR"}
online_banking_thailand = {country = "TH", currency = "THB"}
[pm_filters.braintree] [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" } 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" }

View File

@ -202,6 +202,10 @@ payout_eligibility = true
[pm_filters.adyen] [pm_filters.adyen]
online_banking_fpx = {country = "MY", currency = "MYR"} online_banking_fpx = {country = "MY", currency = "MYR"}
online_banking_thailand = {country = "TH", currency = "THB"}
[bank_config.online_banking_fpx] [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"} 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"}

View File

@ -395,6 +395,11 @@ pub enum BankNames {
VolkswagenBank, VolkswagenBank,
AliorBank, AliorBank,
Boz, Boz,
BangkokBank,
KrungsriBank,
KrungThaiBank,
TheSiamCommercialBank,
KasikornBank,
} }
#[derive( #[derive(

View File

@ -860,6 +860,10 @@ pub enum BankRedirectData {
#[schema(value_type = BankNames)] #[schema(value_type = BankNames)]
issuer: api_enums::BankNames, issuer: api_enums::BankNames,
}, },
OnlineBankingThailand {
#[schema(value_type = BankNames)]
issuer: api_enums::BankNames,
},
} }
#[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)] #[derive(Debug, Clone, Eq, PartialEq, serde::Deserialize, serde::Serialize, ToSchema)]

View File

@ -584,6 +584,7 @@ pub enum PaymentMethodType {
MobilePay, MobilePay,
Momo, Momo,
Multibanco, Multibanco,
OnlineBankingThailand,
OnlineBankingCzechRepublic, OnlineBankingCzechRepublic,
OnlineBankingFinland, OnlineBankingFinland,
OnlineBankingFpx, OnlineBankingFpx,

View File

@ -1569,6 +1569,7 @@ impl From<PaymentMethodType> for PaymentMethod {
PaymentMethodType::OnlineBankingCzechRepublic => Self::BankRedirect, PaymentMethodType::OnlineBankingCzechRepublic => Self::BankRedirect,
PaymentMethodType::OnlineBankingFinland => Self::BankRedirect, PaymentMethodType::OnlineBankingFinland => Self::BankRedirect,
PaymentMethodType::OnlineBankingFpx => Self::BankRedirect, PaymentMethodType::OnlineBankingFpx => Self::BankRedirect,
PaymentMethodType::OnlineBankingThailand => Self::BankRedirect,
PaymentMethodType::OnlineBankingPoland => Self::BankRedirect, PaymentMethodType::OnlineBankingPoland => Self::BankRedirect,
PaymentMethodType::OnlineBankingSlovakia => Self::BankRedirect, PaymentMethodType::OnlineBankingSlovakia => Self::BankRedirect,
PaymentMethodType::PayBright => Self::PayLater, PaymentMethodType::PayBright => Self::PayLater,

View File

@ -306,4 +306,9 @@ pub enum BankNames {
RhbBank, RhbBank,
StandardCharteredBank, StandardCharteredBank,
UobBank, UobBank,
BangkokBank,
KrungsriBank,
KrungThaiBank,
TheSiamCommercialBank,
KasikornBank,
} }

View File

@ -329,6 +329,8 @@ pub enum AdyenPaymentMethod<'a> {
OnlineBankingSlovakia(Box<OnlineBankingSlovakiaData>), OnlineBankingSlovakia(Box<OnlineBankingSlovakiaData>),
#[serde(rename = "molpay_ebanking_fpx_MY")] #[serde(rename = "molpay_ebanking_fpx_MY")]
OnlineBankingFpx(Box<OnlineBankingFpxData>), OnlineBankingFpx(Box<OnlineBankingFpxData>),
#[serde(rename = "molpay_ebanking_TH")]
OnlineBankingThailand(Box<OnlineBankingThailandData>),
PayBright(Box<PayBrightData>), PayBright(Box<PayBrightData>),
Sofort(Box<BankRedirectionPMData>), Sofort(Box<BankRedirectionPMData>),
Trustly(Box<BankRedirectionPMData>), Trustly(Box<BankRedirectionPMData>),
@ -559,7 +561,13 @@ pub struct OnlineBankingSlovakiaData {
#[derive(Debug, Clone, Serialize)] #[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct OnlineBankingFpxData { pub struct OnlineBankingFpxData {
issuer: AdyenIssuerID, issuer: OnlineBankingFpxIssuer,
}
#[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct OnlineBankingThailandData {
issuer: OnlineBankingThailandIssuer,
} }
#[derive(Debug, Clone, Serialize)] #[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; type Error = Error;
fn try_from(bank_name: &api_enums::BankNames) -> Result<Self, Self::Error> { fn try_from(bank_name: &api_enums::BankNames) -> Result<Self, Self::Error> {
match bank_name { 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<Self, Self::Error> {
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)] #[derive(Debug, Clone, Serialize)]
#[serde(rename_all = "camelCase")] #[serde(rename_all = "camelCase")]
pub struct BlikRedirectionData { pub struct BlikRedirectionData {
@ -827,6 +853,8 @@ pub enum PaymentType {
OnlineBankingSlovakia, OnlineBankingSlovakia,
#[serde(rename = "molpay_ebanking_fpx_MY")] #[serde(rename = "molpay_ebanking_fpx_MY")]
OnlineBankingFpx, OnlineBankingFpx,
#[serde(rename = "molpay_ebanking_TH")]
OnlineBankingThailand,
PayBright, PayBright,
Paypal, Paypal,
Scheme, Scheme,
@ -850,7 +878,7 @@ pub enum PaymentType {
#[derive(Debug, Eq, PartialEq, Serialize, Clone)] #[derive(Debug, Eq, PartialEq, Serialize, Clone)]
#[serde(rename_all = "snake_case")] #[serde(rename_all = "snake_case")]
pub enum AdyenIssuerID { pub enum OnlineBankingFpxIssuer {
FpxAbb, FpxAbb,
FpxAgrobank, FpxAgrobank,
FpxAbmb, FpxAbmb,
@ -871,6 +899,20 @@ pub enum AdyenIssuerID {
FpxUob, 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); pub struct AdyenTestBankNames<'a>(&'a str);
impl<'a> TryFrom<&api_enums::BankNames> for AdyenTestBankNames<'a> { 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( api_models::payments::BankRedirectData::OnlineBankingFpx { issuer } => Ok(
AdyenPaymentMethod::OnlineBankingFpx(Box::new(OnlineBankingFpxData { 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( api_models::payments::BankRedirectData::Sofort { .. } => Ok(

View File

@ -194,6 +194,7 @@ impl ForeignFrom<api_enums::PaymentMethodType> for api_enums::PaymentMethod {
| api_enums::PaymentMethodType::Eps | api_enums::PaymentMethodType::Eps
| api_enums::PaymentMethodType::BancontactCard | api_enums::PaymentMethodType::BancontactCard
| api_enums::PaymentMethodType::Blik | api_enums::PaymentMethodType::Blik
| api_enums::PaymentMethodType::OnlineBankingThailand
| api_enums::PaymentMethodType::OnlineBankingCzechRepublic | api_enums::PaymentMethodType::OnlineBankingCzechRepublic
| api_enums::PaymentMethodType::OnlineBankingFinland | api_enums::PaymentMethodType::OnlineBankingFinland
| api_enums::PaymentMethodType::OnlineBankingFpx | api_enums::PaymentMethodType::OnlineBankingFpx

View File

@ -576,6 +576,23 @@ async fn should_make_adyen_online_banking_fpx_payment(
Ok(()) 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] #[test]
#[serial] #[serial]
#[ignore] #[ignore]
@ -749,3 +766,11 @@ fn should_make_adyen_dana_payment_test() {
fn should_make_adyen_online_banking_fpx_payment_test() { fn should_make_adyen_online_banking_fpx_payment_test() {
tester!(should_make_adyen_online_banking_fpx_payment); 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&currency=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

View File

@ -2711,7 +2711,12 @@
"bank_pekao_sa", "bank_pekao_sa",
"volkswagen_bank", "volkswagen_bank",
"alior_bank", "alior_bank",
"boz" "boz",
"bangkok_bank",
"krungsri_bank",
"krung_thai_bank",
"the_siam_commercial_bank",
"kasikorn_bank"
] ]
}, },
"BankRedirectBilling": { "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", "mobile_pay",
"momo", "momo",
"multibanco", "multibanco",
"online_banking_thailand",
"online_banking_czech_republic", "online_banking_czech_republic",
"online_banking_finland", "online_banking_finland",
"online_banking_fpx", "online_banking_fpx",