From 25a73c29a4c4715a54862dd6a28c875fd3752f63 Mon Sep 17 00:00:00 2001 From: Arjun Karthik Date: Wed, 8 Nov 2023 20:31:07 +0530 Subject: [PATCH] fix: [mollie] locale validation irrespective of auth type (#2814) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .../src/connector/mollie/transformers.rs | 55 +++++++------------ crates/router/src/connector/utils.rs | 12 ++++ 2 files changed, 31 insertions(+), 36 deletions(-) diff --git a/crates/router/src/connector/mollie/transformers.rs b/crates/router/src/connector/mollie/transformers.rs index 3c23c9f1d3..b77077ae70 100644 --- a/crates/router/src/connector/mollie/transformers.rs +++ b/crates/router/src/connector/mollie/transformers.rs @@ -9,8 +9,8 @@ use url::Url; use crate::{ connector::utils::{ - self, AddressDetailsData, BrowserInformationData, CardData, PaymentsAuthorizeRequestData, - RouterData, + self, AddressDetailsData, BrowserInformationData, CardData, + PaymentMethodTokenizationRequestData, PaymentsAuthorizeRequestData, RouterData, }, core::errors, services, types, @@ -62,7 +62,7 @@ pub struct MolliePaymentsRequest { locale: Option, #[serde(flatten)] payment_method_data: PaymentMethodData, - metadata: Option, + metadata: Option, sequence_type: SequenceType, mandate_id: Option, } @@ -148,8 +148,10 @@ pub struct Address { pub country: api_models::enums::CountryAlpha2, } -pub struct MollieBrowserInfo { - language: String, +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct MollieMetadata { + pub order_id: String, } impl TryFrom<&MollieRouterData<&types::PaymentsAuthorizeRouterData>> for MolliePaymentsRequest { @@ -216,7 +218,9 @@ impl TryFrom<&MollieRouterData<&types::PaymentsAuthorizeRouterData>> for MollieP webhook_url: "".to_string(), locale: None, payment_method_data, - metadata: None, + metadata: Some(MollieMetadata { + order_id: item.router_data.connector_request_reference_id.clone(), + }), sequence_type: SequenceType::Oneoff, mandate_id: None, }) @@ -287,12 +291,7 @@ impl TryFrom<&types::TokenizationRouterData> for MollieCardTokenRequest { let card_expiry_date = ccard.get_card_expiry_month_year_2_digit_with_delimiter("/".to_owned()); let card_cvv = ccard.card_cvc; - let browser_info = get_browser_info(item)?; - let locale = browser_info - .ok_or(errors::ConnectorError::MissingRequiredField { - field_name: "browser_info.language", - })? - .language; + let locale = item.request.get_browser_info()?.get_language()?; let testmode = item.test_mode .ok_or(errors::ConnectorError::MissingRequiredField { @@ -386,24 +385,6 @@ fn get_address_details( Ok(address_details) } -fn get_browser_info( - item: &types::TokenizationRouterData, -) -> Result, error_stack::Report> { - if matches!(item.auth_type, enums::AuthenticationType::ThreeDs) { - item.request - .browser_info - .as_ref() - .map(|info| { - Ok(MollieBrowserInfo { - language: info.get_language()?, - }) - }) - .transpose() - } else { - Ok(None) - } -} - #[derive(Debug, Deserialize)] #[serde(rename_all = "camelCase")] pub struct MolliePaymentsResponse { @@ -411,7 +392,7 @@ pub struct MolliePaymentsResponse { pub id: String, pub amount: Amount, pub description: Option, - pub metadata: Option, + pub metadata: Option, pub status: MolliePaymentStatus, pub is_cancelable: Option, pub sequence_type: SequenceType, @@ -544,12 +525,12 @@ impl Ok(Self { status: enums::AttemptStatus::from(item.response.status), response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(item.response.id), + resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()), redirection_data: url, mandate_reference: None, connector_metadata: None, network_txn_id: None, - connector_response_reference_id: None, + connector_response_reference_id: Some(item.response.id), }), ..item.data }) @@ -561,6 +542,7 @@ impl pub struct MollieRefundRequest { amount: Amount, description: Option, + metadata: Option, } impl TryFrom<&MollieRouterData<&types::RefundsRouterData>> for MollieRefundRequest { @@ -575,6 +557,9 @@ impl TryFrom<&MollieRouterData<&types::RefundsRouterData>> for MollieRefun Ok(Self { amount, description: item.router_data.request.reason.to_owned(), + metadata: Some(MollieMetadata { + order_id: item.router_data.request.refund_id.clone(), + }), }) } } @@ -589,7 +574,7 @@ pub struct RefundResponse { settlement_amount: Option, status: MollieRefundStatus, description: Option, - metadata: serde_json::Value, + metadata: Option, payment_id: String, #[serde(rename = "_links")] links: Links, @@ -642,6 +627,4 @@ pub struct ErrorResponse { pub title: Option, pub detail: String, pub field: Option, - #[serde(rename = "_links")] - pub links: Option, } diff --git a/crates/router/src/connector/utils.rs b/crates/router/src/connector/utils.rs index 3a8cae3a63..8600fe8021 100644 --- a/crates/router/src/connector/utils.rs +++ b/crates/router/src/connector/utils.rs @@ -292,6 +292,18 @@ pub trait PaymentsAuthorizeRequestData { fn get_ip_address_as_optional(&self) -> Option>; } +pub trait PaymentMethodTokenizationRequestData { + fn get_browser_info(&self) -> Result; +} + +impl PaymentMethodTokenizationRequestData for types::PaymentMethodTokenizationData { + fn get_browser_info(&self) -> Result { + self.browser_info + .clone() + .ok_or_else(missing_field_err("browser_info")) + } +} + impl PaymentsAuthorizeRequestData for types::PaymentsAuthorizeData { fn is_auto_capture(&self) -> Result { match self.capture_method {