Skip to content

Commit

Permalink
fix(connector): [AUTHORIZEDOTNET] Fix status mapping (#3845)
Browse files Browse the repository at this point in the history
  • Loading branch information
deepanshu-iiitu authored Feb 27, 2024
1 parent cd82228 commit f4d0e2b
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 35 deletions.
44 changes: 28 additions & 16 deletions crates/router/src/connector/authorizedotnet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ use transformers as authorizedotnet;

use crate::{
configs::settings,
connector::utils as connector_utils,
connector::{
utils as connector_utils,
utils::{PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData},
},
consts,
core::{
errors::{self, CustomResult},
Expand Down Expand Up @@ -216,11 +219,14 @@ impl ConnectorIntegration<api::Capture, types::PaymentsCaptureData, types::Payme
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);

types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
types::RouterData::try_from((
types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
},
true,
))
}

fn get_error_response(
Expand Down Expand Up @@ -405,11 +411,14 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);

types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
types::RouterData::try_from((
types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
},
data.request.is_auto_capture()?,
))
}

fn get_error_response(
Expand Down Expand Up @@ -783,11 +792,14 @@ impl
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
event_builder.map(|i| i.set_response_body(&response));
router_env::logger::info!(connector_response=?response);
types::RouterData::try_from(types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
})
types::RouterData::try_from((
types::ResponseRouterData {
response,
data: data.clone(),
http_code: res.status_code,
},
data.request.is_auto_capture()?,
))
}

fn get_error_response(
Expand Down
57 changes: 38 additions & 19 deletions crates/router/src/connector/authorizedotnet/transformers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use crate::{
connector::utils::{self, CardData, PaymentsSyncRequestData, RefundsRequestData, WalletData},
core::errors,
services,
types::{self, api, storage::enums},
types::{self, api, storage::enums, transformers::ForeignFrom},
utils::OptionExt,
};

Expand Down Expand Up @@ -258,8 +258,8 @@ struct TransactionVoidOrCaptureRequest {
#[serde(rename_all = "camelCase")]
pub struct AuthorizedotnetPaymentsRequest {
merchant_authentication: AuthorizedotnetAuthType,
ref_id: Option<String>,
transaction_request: TransactionRequest,
ref_id: String,
}

#[derive(Debug, Serialize)]
Expand Down Expand Up @@ -326,12 +326,16 @@ impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>>

let merchant_authentication =
AuthorizedotnetAuthType::try_from(&item.router_data.connector_auth_type)?;

let ref_id = if item.router_data.connector_request_reference_id.len() <= 20 {
Some(item.router_data.connector_request_reference_id.clone())
} else {
None
};
Ok(Self {
create_transaction_request: AuthorizedotnetPaymentsRequest {
merchant_authentication,
ref_id,
transaction_request,
ref_id: item.router_data.connector_request_reference_id.clone(),
},
})
}
Expand Down Expand Up @@ -413,10 +417,16 @@ pub enum AuthorizedotnetRefundStatus {
HeldForReview,
}

impl From<AuthorizedotnetPaymentStatus> for enums::AttemptStatus {
fn from(item: AuthorizedotnetPaymentStatus) -> Self {
impl ForeignFrom<(AuthorizedotnetPaymentStatus, bool)> for enums::AttemptStatus {
fn foreign_from((item, auto_capture): (AuthorizedotnetPaymentStatus, bool)) -> Self {
match item {
AuthorizedotnetPaymentStatus::Approved => Self::Pending,
AuthorizedotnetPaymentStatus::Approved => {
if auto_capture {
Self::Charged
} else {
Self::Authorized
}
}
AuthorizedotnetPaymentStatus::Declined | AuthorizedotnetPaymentStatus::Error => {
Self::Failure
}
Expand Down Expand Up @@ -536,35 +546,44 @@ pub enum AuthorizedotnetVoidStatus {
impl From<AuthorizedotnetVoidStatus> for enums::AttemptStatus {
fn from(item: AuthorizedotnetVoidStatus) -> Self {
match item {
AuthorizedotnetVoidStatus::Approved => Self::VoidInitiated,
AuthorizedotnetVoidStatus::Declined | AuthorizedotnetVoidStatus::Error => Self::Failure,
AuthorizedotnetVoidStatus::HeldForReview => Self::Pending,
AuthorizedotnetVoidStatus::Approved => Self::Voided,
AuthorizedotnetVoidStatus::Declined | AuthorizedotnetVoidStatus::Error => {
Self::VoidFailed
}
AuthorizedotnetVoidStatus::HeldForReview => Self::VoidInitiated,
}
}
}

impl<F, T>
TryFrom<
TryFrom<(
types::ResponseRouterData<
F,
AuthorizedotnetPaymentsResponse,
T,
types::PaymentsResponseData,
>,
> for types::RouterData<F, T, types::PaymentsResponseData>
bool,
)> for types::RouterData<F, T, types::PaymentsResponseData>
{
type Error = error_stack::Report<errors::ConnectorError>;
fn try_from(
item: types::ResponseRouterData<
F,
AuthorizedotnetPaymentsResponse,
T,
types::PaymentsResponseData,
>,
(item, is_auto_capture): (
types::ResponseRouterData<
F,
AuthorizedotnetPaymentsResponse,
T,
types::PaymentsResponseData,
>,
bool,
),
) -> Result<Self, Self::Error> {
match &item.response.transaction_response {
Some(TransactionResponse::AuthorizedotnetTransactionResponse(transaction_response)) => {
let status = enums::AttemptStatus::from(transaction_response.response_code.clone());
let status = enums::AttemptStatus::foreign_from((
transaction_response.response_code.clone(),
is_auto_capture,
));
let error = transaction_response.errors.as_ref().and_then(|errors| {
errors.iter().next().map(|error| types::ErrorResponse {
code: error.error_code.clone(),
Expand Down

0 comments on commit f4d0e2b

Please sign in to comment.