feat(router): Add support for passing the domain dynamically in the session call (#5347)

This commit is contained in:
Shankar Singh C
2024-07-17 22:43:51 +05:30
committed by GitHub
parent 2d204c9f73
commit 67bfb1cfec
4 changed files with 58 additions and 11 deletions

View File

@ -210,6 +210,7 @@ async fn create_applepay_session_token(
apple_pay_merchant_cert_key,
apple_pay_merchant_identifier,
merchant_business_country,
merchant_configured_domain_optional,
) = match apple_pay_metadata {
payment_types::ApplepaySessionTokenMetadata::ApplePayCombined(
apple_pay_combined_metadata,
@ -232,7 +233,7 @@ async fn create_applepay_session_token(
let apple_pay_session_request = get_session_request_for_simplified_apple_pay(
merchant_identifier.clone(),
session_token_data,
session_token_data.clone(),
);
let apple_pay_merchant_cert = state
@ -256,6 +257,7 @@ async fn create_applepay_session_token(
apple_pay_merchant_cert_key,
merchant_identifier,
merchant_business_country,
Some(session_token_data.initiative_context),
)
}
payment_types::ApplePayCombinedMetadata::Manual {
@ -264,8 +266,10 @@ async fn create_applepay_session_token(
} => {
logger::info!("Apple pay manual flow");
let apple_pay_session_request =
get_session_request_for_manual_apple_pay(session_token_data.clone());
let apple_pay_session_request = get_session_request_for_manual_apple_pay(
session_token_data.clone(),
header_payload.x_merchant_domain.clone(),
);
let merchant_business_country = session_token_data.merchant_business_country;
@ -276,6 +280,7 @@ async fn create_applepay_session_token(
session_token_data.certificate_keys,
session_token_data.merchant_identifier,
merchant_business_country,
session_token_data.initiative_context,
)
}
},
@ -284,6 +289,7 @@ async fn create_applepay_session_token(
let apple_pay_session_request = get_session_request_for_manual_apple_pay(
apple_pay_metadata.session_token_data.clone(),
header_payload.x_merchant_domain.clone(),
);
let merchant_business_country = apple_pay_metadata
@ -299,6 +305,7 @@ async fn create_applepay_session_token(
.clone(),
apple_pay_metadata.session_token_data.merchant_identifier,
merchant_business_country,
apple_pay_metadata.session_token_data.initiative_context,
)
}
};
@ -383,9 +390,9 @@ async fn create_applepay_session_token(
.attach_printable("Failed to obtain apple pay session request")?;
let applepay_session_request = build_apple_pay_session_request(
state,
apple_pay_session_request,
apple_pay_merchant_cert,
apple_pay_merchant_cert_key,
apple_pay_session_request.clone(),
apple_pay_merchant_cert.clone(),
apple_pay_merchant_cert_key.clone(),
)?;
let response = services::call_connector_api(
@ -395,10 +402,43 @@ async fn create_applepay_session_token(
)
.await;
// logging the error if present in session call response
log_session_response_if_error(&response);
let updated_response = match (
response.as_ref().ok(),
header_payload.x_merchant_domain.clone(),
) {
(Some(Err(error)), Some(_)) => {
logger::error!(
"Retry apple pay session call with the merchant configured domain {error:?}"
);
let merchant_configured_domain = merchant_configured_domain_optional
.ok_or(errors::ApiErrorResponse::InternalServerError)
.attach_printable(
"Failed to get initiative_context for apple pay session call retry",
)?;
let apple_pay_retry_session_request =
payment_types::ApplepaySessionRequest {
initiative_context: merchant_configured_domain,
..apple_pay_session_request
};
let applepay_retry_session_request = build_apple_pay_session_request(
state,
apple_pay_retry_session_request,
apple_pay_merchant_cert,
apple_pay_merchant_cert_key,
)?;
services::call_connector_api(
state,
applepay_retry_session_request,
"create_apple_pay_session_token",
)
.await
}
_ => response,
};
response
// logging the error if present in session call response
log_session_response_if_error(&updated_response);
updated_response
.ok()
.and_then(|apple_pay_res| {
apple_pay_res
@ -454,6 +494,7 @@ fn get_session_request_for_simplified_apple_pay(
fn get_session_request_for_manual_apple_pay(
session_token_data: payment_types::SessionTokenInfo,
merchant_domain: Option<String>,
) -> RouterResult<payment_types::ApplepaySessionRequest> {
let initiative_context = session_token_data
.initiative_context
@ -463,7 +504,7 @@ fn get_session_request_for_manual_apple_pay(
merchant_identifier: session_token_data.merchant_identifier.clone(),
display_name: session_token_data.display_name.clone(),
initiative: session_token_data.initiative.to_string(),
initiative_context,
initiative_context: merchant_domain.unwrap_or(initiative_context),
})
}