Skip to content

Commit 72a8e5e

Browse files
committed
consume connector error message for 2xx refund errors for Fiuu
1 parent f50c208 commit 72a8e5e

File tree

2 files changed

+91
-113
lines changed

2 files changed

+91
-113
lines changed

crates/hyperswitch_connectors/src/connectors/deutschebank/transformers.rs

Lines changed: 55 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ fn get_error_response(error_code: String, error_reason: String, status_code: u16
274274
}
275275
}
276276

277-
fn is_response_success(rc: String) -> bool {
277+
fn is_response_success(rc: &String) -> bool {
278278
rc == "0"
279279
}
280280

@@ -302,7 +302,7 @@ impl
302302
None => time::OffsetDateTime::now_utc().date().to_string(),
303303
};
304304
let response_code = item.response.rc.clone();
305-
let is_response_success = is_response_success(response_code.clone());
305+
let is_response_success = is_response_success(&response_code);
306306

307307
match (
308308
item.response.reference.clone(),
@@ -355,20 +355,15 @@ impl
355355
}),
356356
..item.data
357357
}),
358-
_ => {
359-
let error_reason = item.response.message.clone();
360-
let response = Err(get_error_response(
358+
_ => Ok(Self {
359+
status: common_enums::AttemptStatus::Failure,
360+
response: Err(get_error_response(
361361
response_code.clone(),
362-
error_reason,
362+
item.response.message.clone(),
363363
item.http_code,
364-
));
365-
366-
Ok(Self {
367-
status: common_enums::AttemptStatus::Failure,
368-
response,
369-
..item.data
370-
})
371-
}
364+
)),
365+
..item.data
366+
}),
372367
}
373368
}
374369
}
@@ -393,9 +388,7 @@ impl
393388
>,
394389
) -> Result<Self, Self::Error> {
395390
let response_code = item.response.rc.clone();
396-
let is_response_success = is_response_success(response_code.clone());
397-
398-
if is_response_success {
391+
if is_response_success(&response_code) {
399392
Ok(Self {
400393
status: match item.data.request.is_auto_capture()? {
401394
true => common_enums::AttemptStatus::Charged,
@@ -414,16 +407,13 @@ impl
414407
..item.data
415408
})
416409
} else {
417-
let error_reason = item.response.message.clone();
418-
let response = Err(get_error_response(
419-
response_code.clone(),
420-
error_reason,
421-
item.http_code,
422-
));
423-
424410
Ok(Self {
425411
status: common_enums::AttemptStatus::Failure,
426-
response,
412+
response: Err(get_error_response(
413+
response_code.clone(),
414+
item.response.message.clone(),
415+
item.http_code,
416+
)),
427417
..item.data
428418
})
429419
}
@@ -610,9 +600,7 @@ impl
610600
>,
611601
) -> Result<Self, Self::Error> {
612602
let response_code = item.response.rc.clone();
613-
let is_response_success = is_response_success(response_code.clone());
614-
615-
if is_response_success {
603+
if is_response_success(&response_code) {
616604
Ok(Self {
617605
status: match item.data.request.is_auto_capture()? {
618606
true => common_enums::AttemptStatus::Charged,
@@ -631,16 +619,13 @@ impl
631619
..item.data
632620
})
633621
} else {
634-
let error_reason = item.response.message.clone();
635-
let response = Err(get_error_response(
636-
response_code.clone(),
637-
error_reason,
638-
item.http_code,
639-
));
640-
641622
Ok(Self {
642623
status: common_enums::AttemptStatus::Failure,
643-
response,
624+
response: Err(get_error_response(
625+
response_code.clone(),
626+
item.response.message.clone(),
627+
item.http_code,
628+
)),
644629
..item.data
645630
})
646631
}
@@ -691,9 +676,7 @@ impl
691676
>,
692677
) -> Result<Self, Self::Error> {
693678
let response_code = item.response.rc.clone();
694-
let is_response_success = is_response_success(response_code.clone());
695-
696-
if is_response_success {
679+
if is_response_success(&response_code) {
697680
Ok(Self {
698681
status: common_enums::AttemptStatus::Charged,
699682
response: Ok(PaymentsResponseData::TransactionResponse {
@@ -709,16 +692,13 @@ impl
709692
..item.data
710693
})
711694
} else {
712-
let error_reason = item.response.message.clone();
713-
let response = Err(get_error_response(
714-
response_code.clone(),
715-
error_reason,
716-
item.http_code,
717-
));
718-
719695
Ok(Self {
720696
status: common_enums::AttemptStatus::Failure,
721-
response,
697+
response: Err(get_error_response(
698+
response_code.clone(),
699+
item.response.message.clone(),
700+
item.http_code,
701+
)),
722702
..item.data
723703
})
724704
}
@@ -745,9 +725,7 @@ impl
745725
>,
746726
) -> Result<Self, Self::Error> {
747727
let response_code = item.response.rc.clone();
748-
let is_response_success = is_response_success(response_code.clone());
749-
750-
let status = if is_response_success {
728+
let status = if is_response_success(&response_code) {
751729
item.response
752730
.tx_action
753731
.and_then(|tx_action| match tx_action {
@@ -769,20 +747,15 @@ impl
769747
Some(common_enums::AttemptStatus::Failure)
770748
};
771749
match status {
772-
Some(common_enums::AttemptStatus::Failure) => {
773-
let error_reason = item.response.message.clone();
774-
let response = Err(get_error_response(
750+
Some(common_enums::AttemptStatus::Failure) => Ok(Self {
751+
status: common_enums::AttemptStatus::Failure,
752+
response: Err(get_error_response(
775753
response_code.clone(),
776-
error_reason,
754+
item.response.message.clone(),
777755
item.http_code,
778-
));
779-
780-
Ok(Self {
781-
status: common_enums::AttemptStatus::Failure,
782-
response,
783-
..item.data
784-
})
785-
}
756+
)),
757+
..item.data
758+
}),
786759
Some(status) => Ok(Self {
787760
status,
788761
..item.data
@@ -814,24 +787,19 @@ impl TryFrom<PaymentsCancelResponseRouterData<DeutschebankPaymentsResponse>>
814787
item: PaymentsCancelResponseRouterData<DeutschebankPaymentsResponse>,
815788
) -> Result<Self, Self::Error> {
816789
let response_code = item.response.rc.clone();
817-
let is_response_success = is_response_success(response_code.clone());
818-
819-
if is_response_success {
790+
if is_response_success(&response_code) {
820791
Ok(Self {
821792
status: common_enums::AttemptStatus::Voided,
822793
..item.data
823794
})
824795
} else {
825-
let error_reason = item.response.message.clone();
826-
let response = Err(get_error_response(
827-
response_code.clone(),
828-
error_reason,
829-
item.http_code,
830-
));
831-
832796
Ok(Self {
833797
status: common_enums::AttemptStatus::VoidFailed,
834-
response,
798+
response: Err(get_error_response(
799+
response_code.clone(),
800+
item.response.message.clone(),
801+
item.http_code,
802+
)),
835803
..item.data
836804
})
837805
}
@@ -862,9 +830,7 @@ impl TryFrom<RefundsResponseRouterData<Execute, DeutschebankPaymentsResponse>>
862830
item: RefundsResponseRouterData<Execute, DeutschebankPaymentsResponse>,
863831
) -> Result<Self, Self::Error> {
864832
let response_code = item.response.rc.clone();
865-
let is_response_success = is_response_success(response_code.clone());
866-
867-
if is_response_success {
833+
if is_response_success(&response_code) {
868834
Ok(Self {
869835
response: Ok(RefundsResponseData {
870836
connector_refund_id: item.response.tx_id,
@@ -873,16 +839,13 @@ impl TryFrom<RefundsResponseRouterData<Execute, DeutschebankPaymentsResponse>>
873839
..item.data
874840
})
875841
} else {
876-
let error_reason = item.response.message.clone();
877-
let response = Err(get_error_response(
878-
response_code.clone(),
879-
error_reason,
880-
item.http_code,
881-
));
882-
883842
Ok(Self {
884843
status: common_enums::AttemptStatus::Failure,
885-
response,
844+
response: Err(get_error_response(
845+
response_code.clone(),
846+
item.response.message.clone(),
847+
item.http_code,
848+
)),
886849
..item.data
887850
})
888851
}
@@ -897,9 +860,7 @@ impl TryFrom<RefundsResponseRouterData<RSync, DeutschebankPaymentsResponse>>
897860
item: RefundsResponseRouterData<RSync, DeutschebankPaymentsResponse>,
898861
) -> Result<Self, Self::Error> {
899862
let response_code = item.response.rc.clone();
900-
let is_response_success = is_response_success(response_code.clone());
901-
902-
let status = if is_response_success {
863+
let status = if is_response_success(&response_code) {
903864
item.response
904865
.tx_action
905866
.and_then(|tx_action| match tx_action {
@@ -920,20 +881,15 @@ impl TryFrom<RefundsResponseRouterData<RSync, DeutschebankPaymentsResponse>>
920881
};
921882

922883
match status {
923-
Some(enums::RefundStatus::Failure) => {
924-
let error_reason = item.response.message.clone();
925-
let response = Err(get_error_response(
884+
Some(enums::RefundStatus::Failure) => Ok(Self {
885+
status: common_enums::AttemptStatus::Failure,
886+
response: Err(get_error_response(
926887
response_code.clone(),
927-
error_reason,
888+
item.response.message.clone(),
928889
item.http_code,
929-
));
930-
931-
Ok(Self {
932-
status: common_enums::AttemptStatus::Failure,
933-
response,
934-
..item.data
935-
})
936-
}
890+
)),
891+
..item.data
892+
}),
937893
Some(refund_status) => Ok(Self {
938894
response: Ok(RefundsResponseData {
939895
refund_status,

crates/hyperswitch_connectors/src/connectors/fiuu/transformers.rs

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,8 @@ pub struct FiuuRefundSuccessResponse {
991991
#[serde(rename = "RefundID")]
992992
refund_id: i64,
993993
status: String,
994+
#[serde(rename = "reason")]
995+
reason: Option<String>,
994996
}
995997
#[derive(Debug, Serialize, Deserialize)]
996998
#[serde(untagged)]
@@ -1017,20 +1019,40 @@ impl TryFrom<RefundsResponseRouterData<Execute, FiuuRefundResponse>>
10171019
}),
10181020
..item.data
10191021
}),
1020-
FiuuRefundResponse::Success(refund_data) => Ok(Self {
1021-
response: Ok(RefundsResponseData {
1022-
connector_refund_id: refund_data.refund_id.to_string(),
1023-
refund_status: match refund_data.status.as_str() {
1024-
"00" => Ok(enums::RefundStatus::Success),
1025-
"11" => Ok(enums::RefundStatus::Failure),
1026-
"22" => Ok(enums::RefundStatus::Pending),
1027-
other => Err(errors::ConnectorError::UnexpectedResponseError(
1028-
bytes::Bytes::from(other.to_owned()),
1029-
)),
1030-
}?,
1031-
}),
1032-
..item.data
1033-
}),
1022+
FiuuRefundResponse::Success(refund_data) => {
1023+
let refund_status = match refund_data.status.as_str() {
1024+
"00" => Ok(enums::RefundStatus::Success),
1025+
"11" => Ok(enums::RefundStatus::Failure),
1026+
"22" => Ok(enums::RefundStatus::Pending),
1027+
other => Err(errors::ConnectorError::UnexpectedResponseError(
1028+
bytes::Bytes::from(other.to_owned()),
1029+
)),
1030+
}?;
1031+
if refund_status == enums::RefundStatus::Failure {
1032+
Ok(Self {
1033+
response: Err(ErrorResponse {
1034+
code: refund_data.status.clone(),
1035+
message: refund_data
1036+
.reason
1037+
.clone()
1038+
.unwrap_or(consts::NO_ERROR_MESSAGE.to_string()),
1039+
reason: refund_data.reason.clone(),
1040+
status_code: item.http_code,
1041+
attempt_status: None,
1042+
connector_transaction_id: None,
1043+
}),
1044+
..item.data
1045+
})
1046+
} else {
1047+
Ok(Self {
1048+
response: Ok(RefundsResponseData {
1049+
connector_refund_id: refund_data.refund_id.to_string(),
1050+
refund_status,
1051+
}),
1052+
..item.data
1053+
})
1054+
}
1055+
}
10341056
}
10351057
}
10361058
}

0 commit comments

Comments
 (0)