mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-29 17:19:15 +08:00
fix(connector): handle unexpected error response from bluesnap connector (#7120)
Co-authored-by: Anurag Singh <anurag.singh.001@Anurag-Singh-WPMHJ5619X.local> Co-authored-by: Gnanasundari24 <118818938+Gnanasundari24@users.noreply.github.com>
This commit is contained in:
@ -11,7 +11,7 @@ use common_utils::{
|
|||||||
request::{Method, Request, RequestBuilder, RequestContent},
|
request::{Method, Request, RequestBuilder, RequestContent},
|
||||||
types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector},
|
types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector},
|
||||||
};
|
};
|
||||||
use error_stack::{report, ResultExt};
|
use error_stack::{report, Report, ResultExt};
|
||||||
use hyperswitch_domain_models::{
|
use hyperswitch_domain_models::{
|
||||||
router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
|
router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData},
|
||||||
router_flow_types::{
|
router_flow_types::{
|
||||||
@ -55,9 +55,9 @@ use crate::{
|
|||||||
utils::{
|
utils::{
|
||||||
construct_not_supported_error_report, convert_amount,
|
construct_not_supported_error_report, convert_amount,
|
||||||
get_error_code_error_message_based_on_priority, get_header_key_value, get_http_header,
|
get_error_code_error_message_based_on_priority, get_header_key_value, get_http_header,
|
||||||
to_connector_meta_from_secret, to_currency_lower_unit, ConnectorErrorType,
|
handle_json_response_deserialization_failure, to_connector_meta_from_secret,
|
||||||
ConnectorErrorTypeMapping, ForeignTryFrom, PaymentsAuthorizeRequestData,
|
to_currency_lower_unit, ConnectorErrorType, ConnectorErrorTypeMapping, ForeignTryFrom,
|
||||||
RefundsRequestData, RouterData as _,
|
PaymentsAuthorizeRequestData, RefundsRequestData, RouterData as _,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -132,18 +132,21 @@ impl ConnectorCommon for Bluesnap {
|
|||||||
event_builder: Option<&mut ConnectorEvent>,
|
event_builder: Option<&mut ConnectorEvent>,
|
||||||
) -> CustomResult<ErrorResponse, errors::ConnectorError> {
|
) -> CustomResult<ErrorResponse, errors::ConnectorError> {
|
||||||
logger::debug!(bluesnap_error_response=?res);
|
logger::debug!(bluesnap_error_response=?res);
|
||||||
let response: bluesnap::BluesnapErrors = res
|
let response_data: Result<
|
||||||
.response
|
bluesnap::BluesnapErrors,
|
||||||
.parse_struct("BluesnapErrorResponse")
|
Report<common_utils::errors::ParsingError>,
|
||||||
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
|
> = res.response.parse_struct("BluesnapErrors");
|
||||||
|
|
||||||
|
match response_data {
|
||||||
|
Ok(response) => {
|
||||||
event_builder.map(|i| i.set_error_response_body(&response));
|
event_builder.map(|i| i.set_error_response_body(&response));
|
||||||
router_env::logger::info!(connector_response=?response);
|
router_env::logger::info!(connector_response=?response);
|
||||||
|
|
||||||
let response_error_message = match response {
|
let response_error_message = match response {
|
||||||
bluesnap::BluesnapErrors::Payment(error_response) => {
|
bluesnap::BluesnapErrors::Payment(error_response) => {
|
||||||
let error_list = error_response.message.clone();
|
let error_list = error_response.message.clone();
|
||||||
let option_error_code_message = get_error_code_error_message_based_on_priority(
|
let option_error_code_message =
|
||||||
|
get_error_code_error_message_based_on_priority(
|
||||||
self.clone(),
|
self.clone(),
|
||||||
error_list.into_iter().map(|errors| errors.into()).collect(),
|
error_list.into_iter().map(|errors| errors.into()).collect(),
|
||||||
);
|
);
|
||||||
@ -201,6 +204,13 @@ impl ConnectorCommon for Bluesnap {
|
|||||||
};
|
};
|
||||||
Ok(response_error_message)
|
Ok(response_error_message)
|
||||||
}
|
}
|
||||||
|
Err(error_msg) => {
|
||||||
|
event_builder.map(|event| event.set_error(serde_json::json!({"error": res.response.escape_ascii().to_string(), "status_code": res.status_code})));
|
||||||
|
router_env::logger::error!(deserialization_error =? error_msg);
|
||||||
|
handle_json_response_deserialization_failure(res, "bluesnap")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ConnectorValidation for Bluesnap {
|
impl ConnectorValidation for Bluesnap {
|
||||||
|
|||||||
Reference in New Issue
Block a user