mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 17:19:15 +08:00
refactor(router): restructure Samsung Pay connector wallet details (#6089)
This commit is contained in:
@ -4922,19 +4922,36 @@ pub struct GpaySessionTokenData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct SamsungPaySessionTokenData {
|
#[serde(rename_all = "snake_case")]
|
||||||
#[serde(rename = "samsung_pay")]
|
pub enum SamsungPayCombinedMetadata {
|
||||||
pub data: SamsungPayMetadata,
|
// This is to support the Samsung Pay decryption flow with application credentials,
|
||||||
|
// where the private key, certificates, or any other information required for decryption
|
||||||
|
// will be obtained from the environment variables.
|
||||||
|
ApplicationCredentials(SamsungPayApplicationCredentials),
|
||||||
|
MerchantCredentials(SamsungPayMerchantCredentials),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct SamsungPayMetadata {
|
pub struct SamsungPaySessionTokenData {
|
||||||
|
#[serde(rename = "samsung_pay")]
|
||||||
|
pub data: SamsungPayCombinedMetadata,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
|
pub struct SamsungPayMerchantCredentials {
|
||||||
pub service_id: String,
|
pub service_id: String,
|
||||||
pub merchant_display_name: String,
|
pub merchant_display_name: String,
|
||||||
pub merchant_business_country: api_enums::CountryAlpha2,
|
pub merchant_business_country: api_enums::CountryAlpha2,
|
||||||
pub allowed_brands: Vec<String>,
|
pub allowed_brands: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
|
pub struct SamsungPayApplicationCredentials {
|
||||||
|
pub merchant_display_name: String,
|
||||||
|
pub merchant_business_country: api_enums::CountryAlpha2,
|
||||||
|
pub allowed_brands: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct PaypalSdkMetaData {
|
pub struct PaypalSdkMetaData {
|
||||||
pub client_id: String,
|
pub client_id: String,
|
||||||
|
|||||||
@ -502,7 +502,7 @@ fn create_samsung_pay_session_token(
|
|||||||
router_data: &types::PaymentsSessionRouterData,
|
router_data: &types::PaymentsSessionRouterData,
|
||||||
header_payload: api_models::payments::HeaderPayload,
|
header_payload: api_models::payments::HeaderPayload,
|
||||||
) -> RouterResult<types::PaymentsSessionRouterData> {
|
) -> RouterResult<types::PaymentsSessionRouterData> {
|
||||||
let samsung_pay_wallet_details = router_data
|
let samsung_pay_session_token_data = router_data
|
||||||
.connector_wallets_details
|
.connector_wallets_details
|
||||||
.clone()
|
.clone()
|
||||||
.parse_value::<payment_types::SamsungPaySessionTokenData>("SamsungPaySessionTokenData")
|
.parse_value::<payment_types::SamsungPaySessionTokenData>("SamsungPaySessionTokenData")
|
||||||
@ -527,18 +527,30 @@ fn create_samsung_pay_session_token(
|
|||||||
.get_required_value("samsung pay domain")
|
.get_required_value("samsung pay domain")
|
||||||
.attach_printable("Failed to get domain for samsung pay session call")?;
|
.attach_printable("Failed to get domain for samsung pay session call")?;
|
||||||
|
|
||||||
|
let samsung_pay_wallet_details = match samsung_pay_session_token_data.data {
|
||||||
|
payment_types::SamsungPayCombinedMetadata::MerchantCredentials(
|
||||||
|
samsung_pay_merchant_credentials,
|
||||||
|
) => samsung_pay_merchant_credentials,
|
||||||
|
payment_types::SamsungPayCombinedMetadata::ApplicationCredentials(
|
||||||
|
_samsung_pay_application_credentials,
|
||||||
|
) => Err(errors::ApiErrorResponse::NotSupported {
|
||||||
|
message: "Samsung Pay decryption flow with application credentials is not implemented"
|
||||||
|
.to_owned(),
|
||||||
|
})?,
|
||||||
|
};
|
||||||
|
|
||||||
Ok(types::PaymentsSessionRouterData {
|
Ok(types::PaymentsSessionRouterData {
|
||||||
response: Ok(types::PaymentsResponseData::SessionResponse {
|
response: Ok(types::PaymentsResponseData::SessionResponse {
|
||||||
session_token: payment_types::SessionToken::SamsungPay(Box::new(
|
session_token: payment_types::SessionToken::SamsungPay(Box::new(
|
||||||
payment_types::SamsungPaySessionTokenResponse {
|
payment_types::SamsungPaySessionTokenResponse {
|
||||||
version: "2".to_string(),
|
version: "2".to_string(),
|
||||||
service_id: samsung_pay_wallet_details.data.service_id,
|
service_id: samsung_pay_wallet_details.service_id,
|
||||||
order_number: router_data.payment_id.clone(),
|
order_number: router_data.payment_id.clone(),
|
||||||
merchant_payment_information:
|
merchant_payment_information:
|
||||||
payment_types::SamsungPayMerchantPaymentInformation {
|
payment_types::SamsungPayMerchantPaymentInformation {
|
||||||
name: samsung_pay_wallet_details.data.merchant_display_name,
|
name: samsung_pay_wallet_details.merchant_display_name,
|
||||||
url: merchant_domain,
|
url: merchant_domain,
|
||||||
country_code: samsung_pay_wallet_details.data.merchant_business_country,
|
country_code: samsung_pay_wallet_details.merchant_business_country,
|
||||||
},
|
},
|
||||||
amount: payment_types::SamsungPayAmountDetails {
|
amount: payment_types::SamsungPayAmountDetails {
|
||||||
amount_format: payment_types::SamsungPayAmountFormat::FormatTotalPriceOnly,
|
amount_format: payment_types::SamsungPayAmountFormat::FormatTotalPriceOnly,
|
||||||
@ -546,7 +558,7 @@ fn create_samsung_pay_session_token(
|
|||||||
total_amount: samsung_pay_amount,
|
total_amount: samsung_pay_amount,
|
||||||
},
|
},
|
||||||
protocol: payment_types::SamsungPayProtocolType::Protocol3ds,
|
protocol: payment_types::SamsungPayProtocolType::Protocol3ds,
|
||||||
allowed_brands: samsung_pay_wallet_details.data.allowed_brands,
|
allowed_brands: samsung_pay_wallet_details.allowed_brands,
|
||||||
},
|
},
|
||||||
)),
|
)),
|
||||||
}),
|
}),
|
||||||
|
|||||||
Reference in New Issue
Block a user