mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 01:27:31 +08:00
fix: Error Mapping for Bluensap & Card Number for Airwallex (#686)
This commit is contained in:
@ -93,7 +93,9 @@ impl TryFrom<&types::PaymentsAuthorizeRouterData> for AirwallexPaymentsRequest {
|
||||
}));
|
||||
Ok(AirwallexPaymentMethod::Card(AirwallexCard {
|
||||
card: AirwallexCardDetails {
|
||||
number: ccard.card_number,
|
||||
number: ccard
|
||||
.card_number
|
||||
.map(|card| card.split_whitespace().collect()),
|
||||
expiry_month: ccard.card_exp_month.clone(),
|
||||
expiry_year: ccard.card_exp_year.clone(),
|
||||
cvc: ccard.card_cvc,
|
||||
|
||||
@ -80,25 +80,33 @@ impl ConnectorCommon for Bluesnap {
|
||||
res: Response,
|
||||
) -> CustomResult<ErrorResponse, errors::ConnectorError> {
|
||||
logger::debug!(bluesnap_error_response=?res);
|
||||
let response: bluesnap::BluesnapErrorResponse = res
|
||||
let response: bluesnap::BluesnapErrors = res
|
||||
.response
|
||||
.parse_struct("BluesnapErrorResponse")
|
||||
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
|
||||
|
||||
let response_error_message = response.message.first().map_or(
|
||||
ErrorResponse {
|
||||
let response_error_message = match response {
|
||||
bluesnap::BluesnapErrors::PaymentError(error_res) => error_res.message.first().map_or(
|
||||
ErrorResponse {
|
||||
status_code: res.status_code,
|
||||
code: consts::NO_ERROR_CODE.to_string(),
|
||||
message: consts::NO_ERROR_MESSAGE.to_string(),
|
||||
reason: None,
|
||||
},
|
||||
|error_response| ErrorResponse {
|
||||
status_code: res.status_code,
|
||||
code: error_response.code.clone(),
|
||||
message: error_response.description.clone(),
|
||||
reason: None,
|
||||
},
|
||||
),
|
||||
bluesnap::BluesnapErrors::AuthError(error_res) => ErrorResponse {
|
||||
status_code: res.status_code,
|
||||
code: consts::NO_ERROR_CODE.to_string(),
|
||||
message: consts::NO_ERROR_MESSAGE.to_string(),
|
||||
code: error_res.error_code.clone(),
|
||||
message: error_res.error_description,
|
||||
reason: None,
|
||||
},
|
||||
|error_response| ErrorResponse {
|
||||
status_code: res.status_code,
|
||||
code: error_response.code.clone(),
|
||||
message: error_response.description.clone(),
|
||||
reason: None,
|
||||
},
|
||||
);
|
||||
};
|
||||
Ok(response_error_message)
|
||||
}
|
||||
}
|
||||
|
||||
@ -325,8 +325,22 @@ pub struct ErrorDetails {
|
||||
pub description: String,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, Serialize, Deserialize, PartialEq)]
|
||||
#[derive(Default, Debug, Clone, Deserialize, PartialEq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct BluesnapErrorResponse {
|
||||
pub message: Vec<ErrorDetails>,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Clone, Deserialize, PartialEq)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct BluesnapAuthErrorResponse {
|
||||
pub error_code: String,
|
||||
pub error_description: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Deserialize, PartialEq)]
|
||||
#[serde(untagged)]
|
||||
pub enum BluesnapErrors {
|
||||
PaymentError(BluesnapErrorResponse),
|
||||
AuthError(BluesnapAuthErrorResponse),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user