fix(payments): add connector metadata parsing and order category to payment router data (#9825)

This commit is contained in:
Ayush Anand
2025-10-16 15:11:40 +05:30
committed by GitHub
parent bd85334544
commit 6f045d84f1
8 changed files with 72 additions and 45 deletions

View File

@ -370,7 +370,13 @@ impl<F: Clone> UpdateTracker<F, payments::PaymentIntentData<F>, PaymentsUpdateIn
order_details: intent.order_details,
allowed_payment_method_types: intent.allowed_payment_method_types,
metadata: intent.metadata,
connector_metadata: intent.connector_metadata,
connector_metadata: intent
.connector_metadata
.map(|cm| cm.encode_to_value())
.transpose()
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed to serialize connector_metadata")?
.map(masking::Secret::new),
feature_metadata: intent.feature_metadata,
payment_link_config: intent.payment_link_config,
request_incremental_authorization: Some(intent.request_incremental_authorization),

View File

@ -7,6 +7,7 @@ use api_models::payments::{
MandateIds, NetworkDetails, RequestSurchargeDetails,
};
use common_enums::{Currency, RequestIncrementalAuthorization};
#[cfg(feature = "v1")]
use common_utils::{
consts::X_HS_LATENCY,
fp_utils, pii,
@ -15,6 +16,15 @@ use common_utils::{
StringMajorUnitForConnector,
},
};
#[cfg(feature = "v2")]
use common_utils::{
ext_traits::Encode,
fp_utils, pii,
types::{
self as common_utils_type, AmountConvertor, MinorUnit, StringMajorUnit,
StringMajorUnitForConnector,
},
};
use diesel_models::{
ephemeral_key,
payment_attempt::{
@ -377,6 +387,14 @@ pub async fn construct_payment_router_data_for_authorize<'a>(
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed to parse AdditionalPaymentData from payment_data.payment_attempt.payment_method_data")?;
let connector_metadata = payment_data.payment_intent.connector_metadata.clone();
let order_category = connector_metadata.as_ref().and_then(|cm| {
cm.noon
.as_ref()
.and_then(|noon| noon.order_category.clone())
});
// TODO: few fields are repeated in both routerdata and request
let request = types::PaymentsAuthorizeData {
payment_method_data: payment_data
@ -403,7 +421,7 @@ pub async fn construct_payment_router_data_for_authorize<'a>(
customer_name: None,
payment_experience: None,
order_details: None,
order_category: None,
order_category,
session_token: None,
enrolled_for_3ds: true,
related_transaction_id: None,

View File

@ -304,10 +304,9 @@ pub async fn construct_refund_router_data<'a, F>(
.attach_printable("Failed to get optional customer id")?;
let braintree_metadata = payment_intent
.get_optional_connector_metadata()
.change_context(errors::ApiErrorResponse::InternalServerError)
.attach_printable("Failed parsing ConnectorMetadata")?
.and_then(|cm| cm.braintree);
.connector_metadata
.as_ref()
.and_then(|cm| cm.braintree.clone());
let merchant_account_id = braintree_metadata
.as_ref()

View File

@ -143,7 +143,7 @@ pub struct KafkaPaymentIntent<'a> {
pub order_details: Option<&'a Vec<Secret<OrderDetailsWithAmount>>>,
pub allowed_payment_method_types: Option<&'a Vec<common_enums::PaymentMethodType>>,
pub connector_metadata: Option<&'a Secret<Value>>,
pub connector_metadata: Option<&'a api_models::payments::ConnectorMetadata>,
pub payment_link_id: Option<&'a String>,
pub updated_by: &'a String,
pub surcharge_applicable: Option<bool>,

View File

@ -96,7 +96,7 @@ pub struct KafkaPaymentIntentEvent<'a> {
pub order_details: Option<&'a Vec<Secret<OrderDetailsWithAmount>>>,
pub allowed_payment_method_types: Option<&'a Vec<common_enums::PaymentMethodType>>,
pub connector_metadata: Option<&'a Secret<Value>>,
pub connector_metadata: Option<&'a api_models::payments::ConnectorMetadata>,
pub payment_link_id: Option<&'a String>,
pub updated_by: &'a String,
pub surcharge_applicable: Option<bool>,