Skip to content

Commit 25a73c2

Browse files
fix: [mollie] locale validation irrespective of auth type (#2814)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 9ea8491 commit 25a73c2

File tree

2 files changed

+31
-36
lines changed

2 files changed

+31
-36
lines changed

crates/router/src/connector/mollie/transformers.rs

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use url::Url;
99

1010
use crate::{
1111
connector::utils::{
12-
self, AddressDetailsData, BrowserInformationData, CardData, PaymentsAuthorizeRequestData,
13-
RouterData,
12+
self, AddressDetailsData, BrowserInformationData, CardData,
13+
PaymentMethodTokenizationRequestData, PaymentsAuthorizeRequestData, RouterData,
1414
},
1515
core::errors,
1616
services, types,
@@ -62,7 +62,7 @@ pub struct MolliePaymentsRequest {
6262
locale: Option<String>,
6363
#[serde(flatten)]
6464
payment_method_data: PaymentMethodData,
65-
metadata: Option<serde_json::Value>,
65+
metadata: Option<MollieMetadata>,
6666
sequence_type: SequenceType,
6767
mandate_id: Option<String>,
6868
}
@@ -148,8 +148,10 @@ pub struct Address {
148148
pub country: api_models::enums::CountryAlpha2,
149149
}
150150

151-
pub struct MollieBrowserInfo {
152-
language: String,
151+
#[derive(Debug, Serialize, Deserialize)]
152+
#[serde(rename_all = "camelCase")]
153+
pub struct MollieMetadata {
154+
pub order_id: String,
153155
}
154156

155157
impl TryFrom<&MollieRouterData<&types::PaymentsAuthorizeRouterData>> for MolliePaymentsRequest {
@@ -216,7 +218,9 @@ impl TryFrom<&MollieRouterData<&types::PaymentsAuthorizeRouterData>> for MollieP
216218
webhook_url: "".to_string(),
217219
locale: None,
218220
payment_method_data,
219-
metadata: None,
221+
metadata: Some(MollieMetadata {
222+
order_id: item.router_data.connector_request_reference_id.clone(),
223+
}),
220224
sequence_type: SequenceType::Oneoff,
221225
mandate_id: None,
222226
})
@@ -287,12 +291,7 @@ impl TryFrom<&types::TokenizationRouterData> for MollieCardTokenRequest {
287291
let card_expiry_date =
288292
ccard.get_card_expiry_month_year_2_digit_with_delimiter("/".to_owned());
289293
let card_cvv = ccard.card_cvc;
290-
let browser_info = get_browser_info(item)?;
291-
let locale = browser_info
292-
.ok_or(errors::ConnectorError::MissingRequiredField {
293-
field_name: "browser_info.language",
294-
})?
295-
.language;
294+
let locale = item.request.get_browser_info()?.get_language()?;
296295
let testmode =
297296
item.test_mode
298297
.ok_or(errors::ConnectorError::MissingRequiredField {
@@ -386,32 +385,14 @@ fn get_address_details(
386385
Ok(address_details)
387386
}
388387

389-
fn get_browser_info(
390-
item: &types::TokenizationRouterData,
391-
) -> Result<Option<MollieBrowserInfo>, error_stack::Report<errors::ConnectorError>> {
392-
if matches!(item.auth_type, enums::AuthenticationType::ThreeDs) {
393-
item.request
394-
.browser_info
395-
.as_ref()
396-
.map(|info| {
397-
Ok(MollieBrowserInfo {
398-
language: info.get_language()?,
399-
})
400-
})
401-
.transpose()
402-
} else {
403-
Ok(None)
404-
}
405-
}
406-
407388
#[derive(Debug, Deserialize)]
408389
#[serde(rename_all = "camelCase")]
409390
pub struct MolliePaymentsResponse {
410391
pub resource: String,
411392
pub id: String,
412393
pub amount: Amount,
413394
pub description: Option<String>,
414-
pub metadata: Option<serde_json::Value>,
395+
pub metadata: Option<MollieMetadata>,
415396
pub status: MolliePaymentStatus,
416397
pub is_cancelable: Option<bool>,
417398
pub sequence_type: SequenceType,
@@ -544,12 +525,12 @@ impl<F, T>
544525
Ok(Self {
545526
status: enums::AttemptStatus::from(item.response.status),
546527
response: Ok(types::PaymentsResponseData::TransactionResponse {
547-
resource_id: types::ResponseId::ConnectorTransactionId(item.response.id),
528+
resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()),
548529
redirection_data: url,
549530
mandate_reference: None,
550531
connector_metadata: None,
551532
network_txn_id: None,
552-
connector_response_reference_id: None,
533+
connector_response_reference_id: Some(item.response.id),
553534
}),
554535
..item.data
555536
})
@@ -561,6 +542,7 @@ impl<F, T>
561542
pub struct MollieRefundRequest {
562543
amount: Amount,
563544
description: Option<String>,
545+
metadata: Option<MollieMetadata>,
564546
}
565547

566548
impl<F> TryFrom<&MollieRouterData<&types::RefundsRouterData<F>>> for MollieRefundRequest {
@@ -575,6 +557,9 @@ impl<F> TryFrom<&MollieRouterData<&types::RefundsRouterData<F>>> for MollieRefun
575557
Ok(Self {
576558
amount,
577559
description: item.router_data.request.reason.to_owned(),
560+
metadata: Some(MollieMetadata {
561+
order_id: item.router_data.request.refund_id.clone(),
562+
}),
578563
})
579564
}
580565
}
@@ -589,7 +574,7 @@ pub struct RefundResponse {
589574
settlement_amount: Option<Amount>,
590575
status: MollieRefundStatus,
591576
description: Option<String>,
592-
metadata: serde_json::Value,
577+
metadata: Option<MollieMetadata>,
593578
payment_id: String,
594579
#[serde(rename = "_links")]
595580
links: Links,
@@ -642,6 +627,4 @@ pub struct ErrorResponse {
642627
pub title: Option<String>,
643628
pub detail: String,
644629
pub field: Option<String>,
645-
#[serde(rename = "_links")]
646-
pub links: Option<Links>,
647630
}

crates/router/src/connector/utils.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,18 @@ pub trait PaymentsAuthorizeRequestData {
292292
fn get_ip_address_as_optional(&self) -> Option<Secret<String, IpAddress>>;
293293
}
294294

295+
pub trait PaymentMethodTokenizationRequestData {
296+
fn get_browser_info(&self) -> Result<types::BrowserInformation, Error>;
297+
}
298+
299+
impl PaymentMethodTokenizationRequestData for types::PaymentMethodTokenizationData {
300+
fn get_browser_info(&self) -> Result<types::BrowserInformation, Error> {
301+
self.browser_info
302+
.clone()
303+
.ok_or_else(missing_field_err("browser_info"))
304+
}
305+
}
306+
295307
impl PaymentsAuthorizeRequestData for types::PaymentsAuthorizeData {
296308
fn is_auto_capture(&self) -> Result<bool, Error> {
297309
match self.capture_method {

0 commit comments

Comments
 (0)