mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 00:49:42 +08:00
feat(ucs): transmit merchant order reference id to unified connector service (#9352)
This commit is contained in:
@ -2780,7 +2780,7 @@ pub(crate) async fn payments_create_and_confirm_intent(
|
||||
merchant_context: domain::MerchantContext,
|
||||
profile: domain::Profile,
|
||||
request: payments_api::PaymentsRequest,
|
||||
mut header_payload: HeaderPayload,
|
||||
header_payload: HeaderPayload,
|
||||
) -> RouterResponse<payments_api::PaymentsResponse> {
|
||||
use hyperswitch_domain_models::{
|
||||
payments::PaymentIntentData, router_flow_types::PaymentCreateIntent,
|
||||
@ -4568,7 +4568,7 @@ where
|
||||
customer,
|
||||
&merchant_connector_account_type_details,
|
||||
None,
|
||||
None,
|
||||
Some(header_payload),
|
||||
)
|
||||
.await?;
|
||||
|
||||
@ -4766,7 +4766,7 @@ where
|
||||
&None,
|
||||
&merchant_connector_account_type_details,
|
||||
None,
|
||||
None,
|
||||
Some(header_payload.clone()),
|
||||
)
|
||||
.await?;
|
||||
|
||||
@ -5113,7 +5113,7 @@ where
|
||||
customer,
|
||||
&merchant_connector_account,
|
||||
merchant_recipient_data,
|
||||
None,
|
||||
Some(header_payload.clone()),
|
||||
)
|
||||
.await?;
|
||||
|
||||
@ -5278,7 +5278,7 @@ where
|
||||
&None,
|
||||
&merchant_connector_account,
|
||||
None,
|
||||
None,
|
||||
Some(header_payload.clone()),
|
||||
)
|
||||
.await?;
|
||||
|
||||
@ -5402,7 +5402,7 @@ where
|
||||
&None,
|
||||
&merchant_connector_account,
|
||||
None,
|
||||
None,
|
||||
Some(header_payload.clone()),
|
||||
)
|
||||
.await?;
|
||||
|
||||
@ -5978,7 +5978,7 @@ where
|
||||
customer,
|
||||
&merchant_connector_account,
|
||||
None,
|
||||
None,
|
||||
Some(header_payload.clone()),
|
||||
)
|
||||
.await?;
|
||||
|
||||
@ -6100,7 +6100,7 @@ where
|
||||
customer,
|
||||
&merchant_connector_account,
|
||||
None,
|
||||
None,
|
||||
Some(header_payload.clone()),
|
||||
)
|
||||
.await?;
|
||||
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use common_enums as enums;
|
||||
use common_types::payments as common_payments_types;
|
||||
use common_utils::{id_type, ucs_types};
|
||||
use error_stack::ResultExt;
|
||||
use hyperswitch_domain_models::errors::api_error_response::ApiErrorResponse;
|
||||
#[cfg(feature = "v2")]
|
||||
@ -853,9 +856,20 @@ async fn call_unified_connector_service_authorize(
|
||||
build_unified_connector_service_auth_metadata(merchant_connector_account, merchant_context)
|
||||
.change_context(ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Failed to construct request metadata")?;
|
||||
let merchant_order_reference_id = router_data
|
||||
.header_payload
|
||||
.as_ref()
|
||||
.and_then(|payload| payload.x_reference_id.clone())
|
||||
.map(|id| id_type::PaymentReferenceId::from_str(id.as_str()))
|
||||
.transpose()
|
||||
.inspect_err(|err| logger::warn!(error=?err, "Invalid Merchant ReferenceId found"))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(ucs_types::UcsReferenceId::Payment);
|
||||
let headers_builder = state
|
||||
.get_grpc_headers_ucs()
|
||||
.external_vault_proxy_metadata(None);
|
||||
.external_vault_proxy_metadata(None)
|
||||
.merchant_reference_id(merchant_order_reference_id);
|
||||
let updated_router_data = Box::pin(ucs_logging_wrapper(
|
||||
router_data.clone(),
|
||||
state,
|
||||
@ -926,9 +940,20 @@ async fn call_unified_connector_service_repeat_payment(
|
||||
build_unified_connector_service_auth_metadata(merchant_connector_account, merchant_context)
|
||||
.change_context(ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Failed to construct request metadata")?;
|
||||
let merchant_order_reference_id = router_data
|
||||
.header_payload
|
||||
.as_ref()
|
||||
.and_then(|payload| payload.x_reference_id.clone())
|
||||
.map(|id| id_type::PaymentReferenceId::from_str(id.as_str()))
|
||||
.transpose()
|
||||
.inspect_err(|err| logger::warn!(error=?err, "Invalid Merchant ReferenceId found"))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(ucs_types::UcsReferenceId::Payment);
|
||||
let headers_builder = state
|
||||
.get_grpc_headers_ucs()
|
||||
.external_vault_proxy_metadata(None);
|
||||
.external_vault_proxy_metadata(None)
|
||||
.merchant_reference_id(merchant_order_reference_id);
|
||||
let updated_router_data = Box::pin(ucs_logging_wrapper(
|
||||
router_data.clone(),
|
||||
state,
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use common_enums as enums;
|
||||
use common_utils::{id_type, ucs_types, ucs_types::UcsReferenceId};
|
||||
use error_stack::ResultExt;
|
||||
use hyperswitch_domain_models::errors::api_error_response::ApiErrorResponse;
|
||||
#[cfg(feature = "v2")]
|
||||
@ -393,9 +396,20 @@ impl Feature<api::ExternalVaultProxy, types::ExternalVaultProxyPaymentsData>
|
||||
)
|
||||
.change_context(ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Failed to construct external vault proxy metadata")?;
|
||||
let merchant_order_reference_id = self
|
||||
.header_payload
|
||||
.as_ref()
|
||||
.and_then(|payload| payload.x_reference_id.clone())
|
||||
.map(|id| id_type::PaymentReferenceId::from_str(id.as_str()))
|
||||
.transpose()
|
||||
.inspect_err(|err| logger::warn!(error=?err, "Invalid Merchant ReferenceId found"))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(ucs_types::UcsReferenceId::Payment);
|
||||
let headers_builder = state
|
||||
.get_grpc_headers_ucs()
|
||||
.external_vault_proxy_metadata(Some(external_vault_proxy_metadata));
|
||||
.external_vault_proxy_metadata(Some(external_vault_proxy_metadata))
|
||||
.merchant_reference_id(merchant_order_reference_id);
|
||||
let updated_router_data = Box::pin(ucs_logging_wrapper(
|
||||
self.clone(),
|
||||
state,
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
use std::{collections::HashMap, str::FromStr};
|
||||
|
||||
use async_trait::async_trait;
|
||||
use common_utils::{id_type, ucs_types};
|
||||
use error_stack::ResultExt;
|
||||
use masking::Secret;
|
||||
use unified_connector_service_client::payments as payments_grpc;
|
||||
@ -266,9 +267,20 @@ impl Feature<api::PSync, types::PaymentsSyncData>
|
||||
)
|
||||
.change_context(ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Failed to construct request metadata")?;
|
||||
let merchant_reference_id = self
|
||||
.header_payload
|
||||
.as_ref()
|
||||
.and_then(|payload| payload.x_reference_id.clone())
|
||||
.map(|id| id_type::PaymentReferenceId::from_str(id.as_str()))
|
||||
.transpose()
|
||||
.inspect_err(|err| logger::warn!(error=?err, "Invalid Merchant ReferenceId found"))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(ucs_types::UcsReferenceId::Payment);
|
||||
let header_payload = state
|
||||
.get_grpc_headers_ucs()
|
||||
.external_vault_proxy_metadata(None);
|
||||
.external_vault_proxy_metadata(None)
|
||||
.merchant_reference_id(merchant_reference_id);
|
||||
let updated_router_data = Box::pin(ucs_logging_wrapper(
|
||||
self.clone(),
|
||||
state,
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
use std::str::FromStr;
|
||||
|
||||
use async_trait::async_trait;
|
||||
use common_types::payments as common_payments_types;
|
||||
use common_utils::{id_type, ucs_types};
|
||||
use error_stack::ResultExt;
|
||||
use router_env::logger;
|
||||
use unified_connector_service_client::payments as payments_grpc;
|
||||
@ -282,9 +285,20 @@ impl Feature<api::SetupMandate, types::SetupMandateRequestData> for types::Setup
|
||||
)
|
||||
.change_context(ApiErrorResponse::InternalServerError)
|
||||
.attach_printable("Failed to construct request metadata")?;
|
||||
let merchant_reference_id = self
|
||||
.header_payload
|
||||
.as_ref()
|
||||
.and_then(|payload| payload.x_reference_id.clone())
|
||||
.map(|id| id_type::PaymentReferenceId::from_str(id.as_str()))
|
||||
.transpose()
|
||||
.inspect_err(|err| logger::warn!(error=?err, "Invalid Merchant ReferenceId found"))
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(ucs_types::UcsReferenceId::Payment);
|
||||
let header_payload = state
|
||||
.get_grpc_headers_ucs()
|
||||
.external_vault_proxy_metadata(None);
|
||||
.external_vault_proxy_metadata(None)
|
||||
.merchant_reference_id(merchant_reference_id);
|
||||
let updated_router_data = Box::pin(ucs_logging_wrapper(
|
||||
self.clone(),
|
||||
state,
|
||||
|
||||
@ -655,7 +655,7 @@ pub async fn construct_external_vault_proxy_payment_router_data<'a>(
|
||||
authentication_data: None,
|
||||
customer_acceptance: None,
|
||||
split_payments: None,
|
||||
merchant_order_reference_id: None,
|
||||
merchant_order_reference_id: payment_data.payment_intent.merchant_reference_id.clone(),
|
||||
integrity_object: None,
|
||||
shipping_cost: payment_data.payment_intent.amount_details.shipping_cost,
|
||||
additional_payment_method_data: None,
|
||||
|
||||
@ -775,6 +775,7 @@ pub async fn call_unified_connector_service_for_webhook(
|
||||
merchant_context.get_merchant_account().get_id().clone(),
|
||||
))
|
||||
.external_vault_proxy_metadata(None)
|
||||
.merchant_reference_id(None)
|
||||
.build();
|
||||
|
||||
// Make UCS call - client availability already verified
|
||||
|
||||
@ -291,7 +291,13 @@ impl
|
||||
.request
|
||||
.request_extended_authorization
|
||||
.map(|request_extended_authorization| request_extended_authorization.is_true()),
|
||||
merchant_order_reference_id: router_data.request.merchant_order_reference_id.clone(),
|
||||
merchant_order_reference_id: router_data
|
||||
.request
|
||||
.merchant_order_reference_id
|
||||
.as_ref()
|
||||
.map(|merchant_order_reference_id| {
|
||||
merchant_order_reference_id.get_string_repr().to_string()
|
||||
}),
|
||||
shipping_cost: router_data
|
||||
.request
|
||||
.shipping_cost
|
||||
|
||||
@ -98,6 +98,8 @@ pub mod headers {
|
||||
pub const X_CONNECTOR_HTTP_STATUS_CODE: &str = "connector_http_status_code";
|
||||
#[cfg(feature = "v2")]
|
||||
pub const X_CONNECTOR_HTTP_STATUS_CODE: &str = "x-connector-http-status-code";
|
||||
|
||||
pub const X_REFERENCE_ID: &str = "X-Reference-Id";
|
||||
}
|
||||
|
||||
pub mod pii {
|
||||
|
||||
@ -24,6 +24,7 @@ use crate::{
|
||||
headers::{
|
||||
ACCEPT_LANGUAGE, BROWSER_NAME, X_APP_ID, X_CLIENT_PLATFORM, X_CLIENT_SOURCE,
|
||||
X_CLIENT_VERSION, X_MERCHANT_DOMAIN, X_PAYMENT_CONFIRM_SOURCE, X_REDIRECT_URI,
|
||||
X_REFERENCE_ID,
|
||||
},
|
||||
services::authentication::get_header_value_by_key,
|
||||
types::{
|
||||
@ -1339,6 +1340,8 @@ impl ForeignTryFrom<&HeaderMap> for hyperswitch_domain_models::payments::HeaderP
|
||||
|
||||
let x_redirect_uri =
|
||||
get_header_value_by_key(X_REDIRECT_URI.into(), headers)?.map(|val| val.to_string());
|
||||
let x_reference_id =
|
||||
get_header_value_by_key(X_REFERENCE_ID.into(), headers)?.map(|val| val.to_string());
|
||||
|
||||
Ok(Self {
|
||||
payment_confirm_source,
|
||||
@ -1351,6 +1354,7 @@ impl ForeignTryFrom<&HeaderMap> for hyperswitch_domain_models::payments::HeaderP
|
||||
locale,
|
||||
x_app_id,
|
||||
x_redirect_uri,
|
||||
x_reference_id,
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -1427,6 +1431,8 @@ impl ForeignTryFrom<&HeaderMap> for hyperswitch_domain_models::payments::HeaderP
|
||||
|
||||
let x_redirect_uri =
|
||||
get_header_value_by_key(X_REDIRECT_URI.into(), headers)?.map(|val| val.to_string());
|
||||
let x_reference_id =
|
||||
get_header_value_by_key(X_REFERENCE_ID.into(), headers)?.map(|val| val.to_string());
|
||||
|
||||
Ok(Self {
|
||||
payment_confirm_source,
|
||||
@ -1439,6 +1445,7 @@ impl ForeignTryFrom<&HeaderMap> for hyperswitch_domain_models::payments::HeaderP
|
||||
locale,
|
||||
x_app_id,
|
||||
x_redirect_uri,
|
||||
x_reference_id,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user