mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 01:57:45 +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
	 Shankar Singh C
					Shankar Singh C