mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-28 04:04:55 +08:00
feat(router): pass fields to indicate if the customer address details to be connector from wallets (#5210)
This commit is contained in:
@ -14287,6 +14287,16 @@
|
||||
"type": "boolean",
|
||||
"description": "flag to indicate whether to perform external 3ds authentication",
|
||||
"example": true
|
||||
},
|
||||
"collect_shipping_details_from_wallets": {
|
||||
"type": "boolean",
|
||||
"description": "flag that indicates whether to collect shipping details from wallets or from the customer",
|
||||
"nullable": true
|
||||
},
|
||||
"collect_billing_details_from_wallets": {
|
||||
"type": "boolean",
|
||||
"description": "flag that indicates whether to collect billing details from wallets or from the customer",
|
||||
"nullable": true
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -795,6 +795,12 @@ pub struct PaymentMethodListResponse {
|
||||
/// flag to indicate whether to perform external 3ds authentication
|
||||
#[schema(example = true)]
|
||||
pub request_external_three_ds_authentication: bool,
|
||||
|
||||
/// flag that indicates whether to collect shipping details from wallets or from the customer
|
||||
pub collect_shipping_details_from_wallets: Option<bool>,
|
||||
|
||||
/// flag that indicates whether to collect billing details from wallets or from the customer
|
||||
pub collect_billing_details_from_wallets: Option<bool>,
|
||||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Hash, Debug, serde::Deserialize, ToSchema)]
|
||||
|
||||
@ -2703,14 +2703,14 @@ pub async fn list_payment_methods(
|
||||
if let Some((payment_attempt, payment_intent, business_profile)) = payment_attempt
|
||||
.as_ref()
|
||||
.zip(payment_intent)
|
||||
.zip(business_profile)
|
||||
.zip(business_profile.as_ref())
|
||||
.map(|((pa, pi), bp)| (pa, pi, bp))
|
||||
{
|
||||
Box::pin(call_surcharge_decision_management(
|
||||
state,
|
||||
&merchant_account,
|
||||
&key_store,
|
||||
&business_profile,
|
||||
business_profile,
|
||||
payment_attempt,
|
||||
payment_intent,
|
||||
billing_address,
|
||||
@ -2720,6 +2720,14 @@ pub async fn list_payment_methods(
|
||||
} else {
|
||||
api_surcharge_decision_configs::MerchantSurchargeConfigs::default()
|
||||
};
|
||||
|
||||
let collect_shipping_details_from_wallets = business_profile
|
||||
.as_ref()
|
||||
.and_then(|bp| bp.collect_shipping_details_from_wallet_connector);
|
||||
|
||||
let collect_billing_details_from_wallets = business_profile
|
||||
.as_ref()
|
||||
.and_then(|bp| bp.collect_billing_details_from_wallet_connector);
|
||||
Ok(services::ApplicationResponse::Json(
|
||||
api::PaymentMethodListResponse {
|
||||
redirect_url: merchant_account.return_url,
|
||||
@ -2756,6 +2764,8 @@ pub async fn list_payment_methods(
|
||||
.unwrap_or_default(),
|
||||
currency,
|
||||
request_external_three_ds_authentication,
|
||||
collect_shipping_details_from_wallets,
|
||||
collect_billing_details_from_wallets,
|
||||
},
|
||||
))
|
||||
}
|
||||
|
||||
@ -170,6 +170,7 @@ async fn create_applepay_session_token(
|
||||
connector.connector_name.to_string(),
|
||||
delayed_response,
|
||||
payment_types::NextActionCall::Confirm,
|
||||
header_payload,
|
||||
)
|
||||
} else {
|
||||
// Get the apple pay metadata
|
||||
@ -345,8 +346,8 @@ async fn create_applepay_session_token(
|
||||
)?;
|
||||
|
||||
let apple_pay_session_response = match (
|
||||
header_payload.browser_name,
|
||||
header_payload.x_client_platform,
|
||||
header_payload.browser_name.clone(),
|
||||
header_payload.x_client_platform.clone(),
|
||||
) {
|
||||
(Some(common_enums::BrowserName::Safari), Some(common_enums::ClientPlatform::Web))
|
||||
| (None, None) => {
|
||||
@ -406,6 +407,7 @@ async fn create_applepay_session_token(
|
||||
connector.connector_name.to_string(),
|
||||
delayed_response,
|
||||
payment_types::NextActionCall::Confirm,
|
||||
header_payload,
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -489,6 +491,7 @@ fn create_apple_pay_session_response(
|
||||
connector_name: String,
|
||||
delayed_response: bool,
|
||||
next_action: payment_types::NextActionCall,
|
||||
header_payload: api_models::payments::HeaderPayload,
|
||||
) -> RouterResult<types::PaymentsSessionRouterData> {
|
||||
match session_response {
|
||||
Some(response) => Ok(types::PaymentsSessionRouterData {
|
||||
@ -508,7 +511,22 @@ fn create_apple_pay_session_response(
|
||||
}),
|
||||
..router_data.clone()
|
||||
}),
|
||||
None => Ok(types::PaymentsSessionRouterData {
|
||||
None => {
|
||||
match (
|
||||
header_payload.browser_name,
|
||||
header_payload.x_client_platform,
|
||||
) {
|
||||
(
|
||||
Some(common_enums::BrowserName::Safari),
|
||||
Some(common_enums::ClientPlatform::Web),
|
||||
)
|
||||
| (None, None) => Ok(types::PaymentsSessionRouterData {
|
||||
response: Ok(types::PaymentsResponseData::SessionResponse {
|
||||
session_token: payment_types::SessionToken::NoSessionTokenReceived,
|
||||
}),
|
||||
..router_data.clone()
|
||||
}),
|
||||
_ => Ok(types::PaymentsSessionRouterData {
|
||||
response: Ok(types::PaymentsResponseData::SessionResponse {
|
||||
session_token: payment_types::SessionToken::ApplePay(Box::new(
|
||||
payment_types::ApplepaySessionTokenResponse {
|
||||
@ -526,6 +544,8 @@ fn create_apple_pay_session_response(
|
||||
..router_data.clone()
|
||||
}),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn create_gpay_session_token(
|
||||
|
||||
Reference in New Issue
Block a user