feat(router): add support for Samsung Pay payment method (#5955)

This commit is contained in:
Shankar Singh C
2024-09-20 16:56:24 +05:30
committed by GitHub
parent 5335f2d21c
commit fe15cc79f5
27 changed files with 997 additions and 46 deletions

View File

@ -135,10 +135,30 @@ pub struct MifinityData {
}
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub struct SamsungPayWalletData {
/// The encrypted payment token from Samsung
pub token: Secret<String>,
pub payment_credential: SamsungPayWalletCredentials,
}
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub struct SamsungPayWalletCredentials {
pub method: Option<String>,
pub recurring_payment: Option<bool>,
pub card_brand: String,
#[serde(rename = "card_last4digits")]
pub card_last_four_digits: String,
#[serde(rename = "3_d_s")]
pub token_data: SamsungPayTokenData,
}
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
#[serde(rename_all = "snake_case")]
pub struct SamsungPayTokenData {
#[serde(rename = "type")]
pub three_ds_type: Option<String>,
pub version: String,
pub data: Secret<String>,
}
#[derive(Eq, PartialEq, Clone, Debug, serde::Deserialize, serde::Serialize)]
@ -670,9 +690,7 @@ impl From<api_models::payments::WalletData> for WalletData {
})
}
api_models::payments::WalletData::SamsungPay(samsung_pay_data) => {
Self::SamsungPay(Box::new(SamsungPayWalletData {
token: samsung_pay_data.token,
}))
Self::SamsungPay(Box::new(SamsungPayWalletData::from(samsung_pay_data)))
}
api_models::payments::WalletData::TwintRedirect {} => Self::TwintRedirect {},
api_models::payments::WalletData::VippsRedirect {} => Self::VippsRedirect {},
@ -736,6 +754,24 @@ impl From<api_models::payments::ApplePayWalletData> for ApplePayWalletData {
}
}
impl From<Box<api_models::payments::SamsungPayWalletData>> for SamsungPayWalletData {
fn from(value: Box<api_models::payments::SamsungPayWalletData>) -> Self {
Self {
payment_credential: SamsungPayWalletCredentials {
method: value.payment_credential.method,
recurring_payment: value.payment_credential.recurring_payment,
card_brand: value.payment_credential.card_brand,
card_last_four_digits: value.payment_credential.card_last_four_digits,
token_data: SamsungPayTokenData {
three_ds_type: value.payment_credential.token_data.three_ds_type,
version: value.payment_credential.token_data.version,
data: value.payment_credential.token_data.data,
},
},
}
}
}
impl From<api_models::payments::PayLaterData> for PayLaterData {
fn from(value: api_models::payments::PayLaterData) -> Self {
match value {