Skip to content

Commit

Permalink
feat(connector): [BOA/Cyb] Include merchant metadata in capture and v…
Browse files Browse the repository at this point in the history
…oid requests (#3308)
  • Loading branch information
deepanshu-iiitu authored Jan 11, 2024
1 parent 4f9c04b commit 5a5400c
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 0 deletions.
15 changes: 15 additions & 0 deletions crates/router/src/connector/bankofamerica/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -988,6 +988,8 @@ pub struct OrderInformation {
pub struct BankOfAmericaCaptureRequest {
order_information: OrderInformation,
client_reference_information: ClientReferenceInformation,
#[serde(skip_serializing_if = "Option::is_none")]
merchant_defined_information: Option<Vec<MerchantDefinedInformation>>,
}

impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCaptureRouterData>>
Expand All @@ -997,6 +999,10 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCaptureRouterData>>
fn try_from(
value: &BankOfAmericaRouterData<&types::PaymentsCaptureRouterData>,
) -> Result<Self, Self::Error> {
let merchant_defined_information =
value.router_data.request.metadata.clone().map(|metadata| {
Vec::<MerchantDefinedInformation>::foreign_from(metadata.peek().to_owned())
});
Ok(Self {
order_information: OrderInformation {
amount_details: Amount {
Expand All @@ -1007,6 +1013,7 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCaptureRouterData>>
client_reference_information: ClientReferenceInformation {
code: Some(value.router_data.connector_request_reference_id.clone()),
},
merchant_defined_information,
})
}
}
Expand All @@ -1016,6 +1023,9 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCaptureRouterData>>
pub struct BankOfAmericaVoidRequest {
client_reference_information: ClientReferenceInformation,
reversal_information: ReversalInformation,
#[serde(skip_serializing_if = "Option::is_none")]
merchant_defined_information: Option<Vec<MerchantDefinedInformation>>,
// The connector documentation does not mention the merchantDefinedInformation field for Void requests. But this has been still added because it works!
}

#[derive(Debug, Serialize)]
Expand All @@ -1032,6 +1042,10 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCancelRouterData>>
fn try_from(
value: &BankOfAmericaRouterData<&types::PaymentsCancelRouterData>,
) -> Result<Self, Self::Error> {
let merchant_defined_information =
value.router_data.request.metadata.clone().map(|metadata| {
Vec::<MerchantDefinedInformation>::foreign_from(metadata.peek().to_owned())
});
Ok(Self {
client_reference_information: ClientReferenceInformation {
code: Some(value.router_data.connector_request_reference_id.clone()),
Expand All @@ -1054,6 +1068,7 @@ impl TryFrom<&BankOfAmericaRouterData<&types::PaymentsCancelRouterData>>
field_name: "Cancellation Reason",
})?,
},
merchant_defined_information,
})
}
}
Expand Down
23 changes: 23 additions & 0 deletions crates/router/src/connector/cybersource/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -837,6 +837,9 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsAuthorizeRouterData>>
pub struct CybersourcePaymentsCaptureRequest {
processing_information: ProcessingInformation,
order_information: OrderInformationWithBill,
client_reference_information: ClientReferenceInformation,
#[serde(skip_serializing_if = "Option::is_none")]
merchant_defined_information: Option<Vec<MerchantDefinedInformation>>,
}

#[derive(Debug, Serialize)]
Expand All @@ -853,6 +856,10 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsCaptureRouterData>>
fn try_from(
item: &CybersourceRouterData<&types::PaymentsCaptureRouterData>,
) -> Result<Self, Self::Error> {
let merchant_defined_information =
item.router_data.request.metadata.clone().map(|metadata| {
Vec::<MerchantDefinedInformation>::foreign_from(metadata.peek().to_owned())
});
Ok(Self {
processing_information: ProcessingInformation {
capture_options: Some(CaptureOptions {
Expand All @@ -873,6 +880,10 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsCaptureRouterData>>
},
bill_to: None,
},
client_reference_information: ClientReferenceInformation {
code: Some(item.router_data.connector_request_reference_id.clone()),
},
merchant_defined_information,
})
}
}
Expand Down Expand Up @@ -918,6 +929,9 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsIncrementalAuthorizationRout
pub struct CybersourceVoidRequest {
client_reference_information: ClientReferenceInformation,
reversal_information: ReversalInformation,
#[serde(skip_serializing_if = "Option::is_none")]
merchant_defined_information: Option<Vec<MerchantDefinedInformation>>,
// The connector documentation does not mention the merchantDefinedInformation field for Void requests. But this has been still added because it works!
}

#[derive(Debug, Serialize)]
Expand All @@ -932,6 +946,10 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsCancelRouterData>> for Cyber
fn try_from(
value: &CybersourceRouterData<&types::PaymentsCancelRouterData>,
) -> Result<Self, Self::Error> {
let merchant_defined_information =
value.router_data.request.metadata.clone().map(|metadata| {
Vec::<MerchantDefinedInformation>::foreign_from(metadata.peek().to_owned())
});
Ok(Self {
client_reference_information: ClientReferenceInformation {
code: Some(value.router_data.connector_request_reference_id.clone()),
Expand All @@ -954,6 +972,7 @@ impl TryFrom<&CybersourceRouterData<&types::PaymentsCancelRouterData>> for Cyber
field_name: "Cancellation Reason",
})?,
},
merchant_defined_information,
})
}
}
Expand Down Expand Up @@ -1591,6 +1610,7 @@ impl<F>
#[serde(rename_all = "camelCase")]
pub struct CybersourceRefundRequest {
order_information: OrderInformation,
client_reference_information: ClientReferenceInformation,
}

impl<F> TryFrom<&CybersourceRouterData<&types::RefundsRouterData<F>>> for CybersourceRefundRequest {
Expand All @@ -1605,6 +1625,9 @@ impl<F> TryFrom<&CybersourceRouterData<&types::RefundsRouterData<F>>> for Cybers
currency: item.router_data.request.currency,
},
},
client_reference_information: ClientReferenceInformation {
code: Some(item.router_data.request.refund_id.clone()),
},
})
}
}
Expand Down
2 changes: 2 additions & 0 deletions crates/router/src/core/payments/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1223,6 +1223,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsCaptureD
None => None,
},
browser_info,
metadata: payment_data.payment_intent.metadata,
})
}
}
Expand Down Expand Up @@ -1257,6 +1258,7 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsCancelDa
cancellation_reason: payment_data.payment_attempt.cancellation_reason,
connector_meta: payment_data.payment_attempt.connector_metadata,
browser_info,
metadata: payment_data.payment_intent.metadata,
})
}
}
Expand Down
4 changes: 4 additions & 0 deletions crates/router/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,8 @@ pub struct PaymentsCaptureData {
pub multiple_capture_data: Option<MultipleCaptureRequestData>,
pub connector_meta: Option<serde_json::Value>,
pub browser_info: Option<BrowserInformation>,
pub metadata: Option<pii::SecretSerdeValue>,
// This metadata is used to store the metadata shared during the payment intent request.
}

#[derive(Debug, Clone, Default)]
Expand Down Expand Up @@ -542,6 +544,8 @@ pub struct PaymentsCancelData {
pub cancellation_reason: Option<String>,
pub connector_meta: Option<serde_json::Value>,
pub browser_info: Option<BrowserInformation>,
pub metadata: Option<pii::SecretSerdeValue>,
// This metadata is used to store the metadata shared during the payment intent request.
}

#[derive(Debug, Default, Clone)]
Expand Down

0 comments on commit 5a5400c

Please sign in to comment.