Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(router): pass fields to indicate if the customer address details to be connector from wallets #5210

Merged
merged 3 commits into from
Jul 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions api-reference/openapi_spec.json
Original file line number Diff line number Diff line change
Expand Up @@ -14278,6 +14278,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
}
}
},
Expand Down
6 changes: 6 additions & 0 deletions crates/api_models/src/payment_methods.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)]
Expand Down
14 changes: 12 additions & 2 deletions crates/router/src/core/payment_methods/cards.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -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,
},
))
}
Expand Down
58 changes: 39 additions & 19 deletions crates/router/src/core/payments/flows/session_flow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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) => {
Expand Down Expand Up @@ -406,6 +407,7 @@ async fn create_applepay_session_token(
connector.connector_name.to_string(),
delayed_response,
payment_types::NextActionCall::Confirm,
header_payload,
)
}
}
Expand Down Expand Up @@ -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 {
Expand All @@ -508,23 +511,40 @@ fn create_apple_pay_session_response(
}),
..router_data.clone()
}),
None => Ok(types::PaymentsSessionRouterData {
response: Ok(types::PaymentsResponseData::SessionResponse {
session_token: payment_types::SessionToken::ApplePay(Box::new(
payment_types::ApplepaySessionTokenResponse {
session_token_data: None,
payment_request_data: apple_pay_payment_request,
connector: connector_name,
delayed_session_token: delayed_response,
sdk_next_action: { payment_types::SdkNextAction { next_action } },
connector_reference_id: None,
connector_sdk_public_key: None,
connector_merchant_id: None,
},
)),
}),
..router_data.clone()
}),
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 {
session_token_data: None,
payment_request_data: apple_pay_payment_request,
connector: connector_name,
delayed_session_token: delayed_response,
sdk_next_action: { payment_types::SdkNextAction { next_action } },
connector_reference_id: None,
connector_sdk_public_key: None,
connector_merchant_id: None,
},
)),
}),
..router_data.clone()
}),
}
}
}
}

Expand Down
Loading