feat(core): add merchant order reference id (#5197)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
SamraatBansal
2024-07-04 18:15:05 +05:30
committed by GitHub
parent 755d968c95
commit f4665d2f4a
22 changed files with 135 additions and 1 deletions

View File

@ -179,6 +179,7 @@ pub struct AdyenPaymentRequest<'a> {
line_items: Option<Vec<LineItem>>,
channel: Option<Channel>,
metadata: Option<pii::SecretSerdeValue>,
merchant_order_reference: Option<String>,
}
#[derive(Debug, Serialize)]
@ -2610,6 +2611,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
})
}
}
@ -2672,6 +2674,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
})
}
}
@ -2725,6 +2728,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
};
Ok(request)
}
@ -2779,6 +2783,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
};
Ok(request)
}
@ -2829,6 +2834,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
};
Ok(request)
}
@ -2879,6 +2885,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
};
Ok(request)
}
@ -2939,6 +2946,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
})
}
}
@ -3034,6 +3042,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
})
}
}
@ -3109,6 +3118,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
})
}
}
@ -3167,6 +3177,7 @@ impl<'a>
shopper_statement: item.router_data.request.statement_descriptor.clone(),
shopper_ip: item.router_data.request.get_ip_address_as_optional(),
metadata: item.router_data.request.metadata.clone(),
merchant_order_reference: item.router_data.request.merchant_order_reference_id.clone(),
})
}
}

View File

@ -78,6 +78,7 @@ pub struct KlarnaPaymentsRequest {
purchase_country: enums::CountryAlpha2,
purchase_currency: enums::Currency,
merchant_reference1: Option<String>,
merchant_reference2: Option<String>,
shipping_address: Option<KlarnaShippingAddress>,
}
@ -213,6 +214,7 @@ impl TryFrom<&KlarnaRouterData<&types::PaymentsAuthorizeRouterData>> for KlarnaP
})
.collect(),
merchant_reference1: Some(item.router_data.connector_request_reference_id.clone()),
merchant_reference2: item.router_data.request.merchant_order_reference_id.clone(),
auto_capture: request.is_auto_capture()?,
shipping_address: get_address_info(item.router_data.get_optional_shipping())
.transpose()?,

View File

@ -397,7 +397,7 @@ impl TryFrom<&PaypalRouterData<&types::PaymentsAuthorizeRouterData>> for PaypalP
let purchase_units = vec![PurchaseUnitRequest {
reference_id: Some(connector_request_reference_id.clone()),
custom_id: Some(connector_request_reference_id.clone()),
custom_id: item.router_data.request.merchant_order_reference_id.clone(),
invoice_id: Some(connector_request_reference_id),
amount,
payee,

View File

@ -3136,6 +3136,7 @@ mod tests {
charges: None,
frm_metadata: None,
customer_details: None,
merchant_order_reference_id: None,
};
let req_cs = Some("1".to_string());
assert!(authenticate_client_secret(req_cs.as_ref(), &payment_intent).is_ok());
@ -3196,6 +3197,7 @@ mod tests {
charges: None,
frm_metadata: None,
customer_details: None,
merchant_order_reference_id: None,
};
let req_cs = Some("1".to_string());
assert!(authenticate_client_secret(req_cs.as_ref(), &payment_intent,).is_err())
@ -3255,6 +3257,7 @@ mod tests {
charges: None,
frm_metadata: None,
customer_details: None,
merchant_order_reference_id: None,
};
let req_cs = Some("1".to_string());
assert!(authenticate_client_secret(req_cs.as_ref(), &payment_intent).is_err())

View File

@ -1262,6 +1262,7 @@ impl<F: Clone> UpdateTracker<F, PaymentData<F>, api::PaymentsRequest> for Paymen
request_external_three_ds_authentication: None,
frm_metadata: m_frm_metadata,
customer_details,
merchant_order_reference_id: None,
},
&m_key_store,
storage_scheme,

View File

@ -1117,6 +1117,7 @@ impl PaymentCreate {
charges,
frm_metadata: request.frm_metadata.clone(),
customer_details,
merchant_order_reference_id: request.merchant_order_reference_id.clone(),
})
}

View File

@ -372,6 +372,11 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
.request_external_three_ds_authentication
.or(payment_intent.request_external_three_ds_authentication);
payment_intent.merchant_order_reference_id = request
.merchant_order_reference_id
.clone()
.or(payment_intent.merchant_order_reference_id);
Self::populate_payment_attempt_with_request(&mut payment_attempt, request);
let creds_identifier = request
@ -707,6 +712,11 @@ impl<F: Clone> UpdateTracker<F, PaymentData<F>, api::PaymentsRequest> for Paymen
let metadata = payment_data.payment_intent.metadata.clone();
let frm_metadata = payment_data.payment_intent.frm_metadata.clone();
let session_expiry = payment_data.payment_intent.session_expiry;
let merchant_order_reference_id = payment_data
.payment_intent
.merchant_order_reference_id
.clone();
payment_data.payment_intent = state
.store
.update_payment_intent(
@ -736,6 +746,7 @@ impl<F: Clone> UpdateTracker<F, PaymentData<F>, api::PaymentsRequest> for Paymen
.request_external_three_ds_authentication,
frm_metadata,
customer_details,
merchant_order_reference_id,
},
key_store,
storage_scheme,

View File

@ -880,6 +880,7 @@ where
.set_updated(Some(payment_intent.modified_at))
.set_charges(charges_response)
.set_frm_metadata(payment_intent.frm_metadata)
.set_merchant_order_reference_id(payment_intent.merchant_order_reference_id)
.to_owned(),
headers,
))
@ -1305,6 +1306,11 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
None => None,
};
let merchant_order_reference_id = payment_data
.payment_intent
.merchant_order_reference_id
.clone();
Ok(Self {
payment_method_data: From::from(
payment_method_data.get_required_value("payment_method_data")?,
@ -1350,6 +1356,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsAuthoriz
.transpose()?,
customer_acceptance: payment_data.customer_acceptance,
charges,
merchant_order_reference_id,
integrity_object: None,
})
}

View File

@ -789,6 +789,7 @@ impl ForeignFrom<&SetupMandateRouterData> for PaymentsAuthorizeData {
authentication_data: None,
customer_acceptance: data.request.customer_acceptance.clone(),
charges: None, // TODO: allow charges on mandates?
merchant_order_reference_id: None,
integrity_object: None,
}
}

View File

@ -55,6 +55,7 @@ impl VerifyConnectorData {
authentication_data: None,
customer_acceptance: None,
charges: None,
merchant_order_reference_id: None,
integrity_object: None,
}
}

View File

@ -226,6 +226,7 @@ pub async fn generate_sample_data(
charges: None,
frm_metadata: Default::default(),
customer_details: None,
merchant_order_reference_id: Default::default(),
};
let payment_attempt = PaymentAttemptBatchNew {
attempt_id: attempt_id.clone(),

View File

@ -937,6 +937,7 @@ impl Default for PaymentAuthorizeType {
customer_acceptance: None,
charges: None,
integrity_object: None,
merchant_order_reference_id: None,
};
Self(data)
}