feat(connector): accept connector_transaction_id in error_response of connector flows for Trustpay (#3060)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
AkshayaFoiger
2023-12-07 14:54:16 +05:30
committed by GitHub
parent b6838c4d1a
commit f53b090db8
2 changed files with 22 additions and 25 deletions

View File

@ -137,9 +137,11 @@ impl ConnectorCommon for Trustpay {
message: option_error_code_message message: option_error_code_message
.map(|error_code_message| error_code_message.error_code) .map(|error_code_message| error_code_message.error_code)
.unwrap_or(consts::NO_ERROR_MESSAGE.to_string()), .unwrap_or(consts::NO_ERROR_MESSAGE.to_string()),
reason: reason.or(response_data.description), reason: reason
.or(response_data.description)
.or(response_data.payment_description),
attempt_status: None, attempt_status: None,
connector_transaction_id: None, connector_transaction_id: response_data.instance_id,
}) })
} }
Err(error_msg) => { Err(error_msg) => {
@ -363,19 +365,7 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
&self, &self,
res: Response, res: Response,
) -> CustomResult<ErrorResponse, errors::ConnectorError> { ) -> CustomResult<ErrorResponse, errors::ConnectorError> {
let response: trustpay::TrustPayTransactionStatusErrorResponse = res self.build_error_response(res)
.response
.parse_struct("trustpay transaction status ErrorResponse")
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
Ok(ErrorResponse {
status_code: res.status_code,
code: response.status.to_string(),
// message vary for the same code, so relying on code alone as it is unique
message: response.status.to_string(),
reason: Some(response.payment_description),
attempt_status: None,
connector_transaction_id: None,
})
} }
fn handle_response( fn handle_response(

View File

@ -722,13 +722,13 @@ fn handle_cards_response(
reason: msg, reason: msg,
status_code, status_code,
attempt_status: None, attempt_status: None,
connector_transaction_id: None, connector_transaction_id: Some(response.instance_id.clone()),
}) })
} else { } else {
None None
}; };
let payment_response_data = types::PaymentsResponseData::TransactionResponse { let payment_response_data = types::PaymentsResponseData::TransactionResponse {
resource_id: types::ResponseId::ConnectorTransactionId(response.instance_id), resource_id: types::ResponseId::ConnectorTransactionId(response.instance_id.clone()),
redirection_data, redirection_data,
mandate_reference: None, mandate_reference: None,
connector_metadata: None, connector_metadata: None,
@ -825,14 +825,24 @@ fn handle_bank_redirects_sync_response(
reason: reason_info.reason.reject_reason, reason: reason_info.reason.reject_reason,
status_code, status_code,
attempt_status: None, attempt_status: None,
connector_transaction_id: None, connector_transaction_id: Some(
response
.payment_information
.references
.payment_request_id
.clone(),
),
}) })
} else { } else {
None None
}; };
let payment_response_data = types::PaymentsResponseData::TransactionResponse { let payment_response_data = types::PaymentsResponseData::TransactionResponse {
resource_id: types::ResponseId::ConnectorTransactionId( resource_id: types::ResponseId::ConnectorTransactionId(
response.payment_information.references.payment_request_id, response
.payment_information
.references
.payment_request_id
.clone(),
), ),
redirection_data: None, redirection_data: None,
mandate_reference: None, mandate_reference: None,
@ -1637,16 +1647,13 @@ pub struct Errors {
} }
#[derive(Default, Debug, Serialize, Deserialize, PartialEq)] #[derive(Default, Debug, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct TrustpayErrorResponse { pub struct TrustpayErrorResponse {
pub status: i64, pub status: i64,
pub description: Option<String>, pub description: Option<String>,
pub errors: Option<Vec<Errors>>, pub errors: Option<Vec<Errors>>,
} pub instance_id: Option<String>,
pub payment_description: Option<String>,
#[derive(Deserialize)]
pub struct TrustPayTransactionStatusErrorResponse {
pub status: i64,
pub payment_description: String,
} }
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]