fix(connector): [noon] sync with reference_id (#2544)

This commit is contained in:
SamraatBansal
2023-10-12 12:22:48 +05:30
committed by GitHub
parent 9f446bc174
commit 9ef60e425d
10 changed files with 45 additions and 10 deletions

View File

@ -9,7 +9,6 @@ use error_stack::{IntoReport, ResultExt};
use masking::PeekInterface;
use transformers as noon;
use super::utils::PaymentsSyncRequestData;
use crate::{
configs::settings,
connector::utils as connector_utils,
@ -276,10 +275,19 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
req: &types::PaymentsSyncRouterData,
connectors: &settings::Connectors,
) -> CustomResult<String, errors::ConnectorError> {
let connector_transaction_id = req.request.get_connector_transaction_id()?;
//Added as a fix for past payments before the given timestamp we can reconcile using payment_id
let cutoff_timestamp: i64 = 1697023800;
let reference_id = if req.request.payment_attempt_created_at_as_utc < cutoff_timestamp {
req.payment_id.clone()
} else {
req.attempt_id.clone()
};
Ok(format!(
"{}payment/v1/order/{connector_transaction_id}",
self.base_url(connectors)
"{}payment/v1/order/getbyreference/{}",
self.base_url(connectors),
reference_id
))
}
@ -569,9 +577,9 @@ impl ConnectorIntegration<api::RSync, types::RefundsData, types::RefundsResponse
connectors: &settings::Connectors,
) -> CustomResult<String, errors::ConnectorError> {
Ok(format!(
"{}payment/v1/order/{}",
"{}payment/v1/order/getbyreference/{}",
self.base_url(connectors),
req.request.connector_transaction_id
req.attempt_id
))
}

View File

@ -4,8 +4,7 @@ use serde::{Deserialize, Serialize};
use crate::{
connector::utils::{
self as conn_utils, CardData, PaymentsAuthorizeRequestData, RefundsRequestData, RouterData,
WalletData,
self as conn_utils, CardData, PaymentsAuthorizeRequestData, RouterData, WalletData,
},
core::errors,
services,
@ -438,6 +437,7 @@ impl<F, T>
pub struct NoonActionTransaction {
amount: String,
currency: diesel_models::enums::Currency,
transaction_reference: Option<String>,
}
#[derive(Debug, Serialize)]
@ -466,6 +466,7 @@ impl TryFrom<&types::PaymentsCaptureRouterData> for NoonPaymentsActionRequest {
item.request.currency,
)?,
currency: item.request.currency,
transaction_reference: None,
};
Ok(Self {
api_operation: NoonApiOperations::Capture,
@ -507,6 +508,7 @@ impl<F> TryFrom<&types::RefundsRouterData<F>> for NoonPaymentsActionRequest {
item.request.currency,
)?,
currency: item.request.currency,
transaction_reference: Some(item.request.refund_id.clone()),
};
Ok(Self {
api_operation: NoonApiOperations::Refund,
@ -570,9 +572,11 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, RefundResponse>>
}
#[derive(Default, Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct NoonRefundResponseTransactions {
id: String,
status: RefundStatus,
transaction_reference: Option<String>,
}
#[derive(Default, Debug, Deserialize)]
@ -592,13 +596,19 @@ impl TryFrom<types::RefundsResponseRouterData<api::RSync, RefundSyncResponse>>
fn try_from(
item: types::RefundsResponseRouterData<api::RSync, RefundSyncResponse>,
) -> Result<Self, Self::Error> {
let connector_refund_id = item.data.request.get_connector_refund_id()?;
let noon_transaction: &NoonRefundResponseTransactions = item
.response
.result
.transactions
.iter()
.find(|transaction| transaction.id == connector_refund_id)
.find(|transaction| {
transaction
.transaction_reference
.clone()
.map_or(false, |transaction_instance| {
transaction_instance == item.data.request.refund_id
})
})
.ok_or(errors::ConnectorError::ResponseHandlingFailed)?;
Ok(Self {

View File

@ -1050,6 +1050,11 @@ impl<F: Clone> TryFrom<PaymentAdditionalData<'_, F>> for types::PaymentsSyncData
),
None => types::SyncRequestType::SinglePaymentSync,
},
payment_attempt_created_at_as_utc: payment_data
.payment_attempt
.created_at
.assume_utc()
.unix_timestamp(),
})
}
}

View File

@ -476,6 +476,9 @@ pub struct PaymentsSyncData {
pub connector_meta: Option<serde_json::Value>,
pub sync_type: SyncRequestType,
pub mandate_id: Option<api_models::payments::MandateIds>,
//This is being added as a temporary fix, will be deprecated before or by v1.65.0
// #2628
pub payment_attempt_created_at_as_utc: i64,
}
#[derive(Debug, Default, Clone)]

View File

@ -108,6 +108,7 @@ async fn should_sync_authorized_payment() {
capture_method: Some(diesel_models::enums::CaptureMethod::Manual),
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta: None,
payment_attempt_created_at_as_utc: 0,
}),
None,
)
@ -222,6 +223,7 @@ async fn should_sync_auto_captured_payment() {
capture_method: Some(enums::CaptureMethod::Automatic),
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta: None,
payment_attempt_created_at_as_utc: 0,
}),
None,
)

View File

@ -153,6 +153,7 @@ async fn should_sync_authorized_payment() {
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta: None,
mandate_id: None,
payment_attempt_created_at_as_utc: 0,
}),
get_default_payment_info(),
)

View File

@ -123,6 +123,7 @@ async fn should_sync_authorized_payment() {
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta,
mandate_id: None,
payment_attempt_created_at_as_utc: 0,
}),
None,
)

View File

@ -140,6 +140,7 @@ async fn should_sync_authorized_payment() {
capture_method: None,
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta,
payment_attempt_created_at_as_utc: 0,
}),
get_default_payment_info(),
)
@ -336,6 +337,7 @@ async fn should_sync_auto_captured_payment() {
capture_method: Some(enums::CaptureMethod::Automatic),
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta,
payment_attempt_created_at_as_utc: 0,
}),
get_default_payment_info(),
)

View File

@ -942,6 +942,7 @@ impl Default for PaymentSyncType {
capture_method: None,
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta: None,
payment_attempt_created_at_as_utc: 0,
};
Self(data)
}

View File

@ -102,6 +102,7 @@ async fn should_sync_authorized_payment() {
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta: None,
mandate_id: None,
payment_attempt_created_at_as_utc: 0,
}),
None,
)
@ -216,6 +217,7 @@ async fn should_sync_auto_captured_payment() {
sync_type: types::SyncRequestType::SinglePaymentSync,
connector_meta: None,
mandate_id: None,
payment_attempt_created_at_as_utc: 0,
}),
None,
)