fix(connector): [Paypal] Parse response for Cards with no 3DS check (#3021)

This commit is contained in:
Sakil Mostak
2023-12-01 15:26:41 +05:30
committed by GitHub
parent 2ac5b2cd76
commit d883cd1897
2 changed files with 102 additions and 69 deletions

View File

@ -570,23 +570,26 @@ impl
.parse_struct("paypal PaypalPreProcessingResponse")
.change_context(errors::ConnectorError::ResponseDeserializationFailed)?;
match response {
// if card supports 3DS check for liability
paypal::PaypalPreProcessingResponse::PaypalLiabilityResponse(liability_response) => {
// permutation for status to continue payment
match (
response
liability_response
.payment_source
.card
.authentication_result
.three_d_secure
.enrollment_status
.as_ref(),
response
liability_response
.payment_source
.card
.authentication_result
.three_d_secure
.authentication_status
.as_ref(),
response
liability_response
.payment_source
.card
.authentication_result
@ -628,19 +631,19 @@ impl
connector_transaction_id: None,
reason: Some(format!("{} Connector Responsded with LiabilityShift: {:?}, EnrollmentStatus: {:?}, and AuthenticationStatus: {:?}",
consts::CANNOT_CONTINUE_AUTH,
response
liability_response
.payment_source
.card
.authentication_result
.liability_shift,
response
liability_response
.payment_source
.card
.authentication_result
.three_d_secure
.enrollment_status
.unwrap_or(paypal::EnrollementStatus::Null),
response
liability_response
.payment_source
.card
.authentication_result
@ -654,6 +657,24 @@ impl
}),
}
}
// if card does not supports 3DS check for liability
paypal::PaypalPreProcessingResponse::PaypalNonLiablityResponse(_) => {
Ok(types::PaymentsPreProcessingRouterData {
status: storage_enums::AttemptStatus::AuthenticationSuccessful,
response: Ok(types::PaymentsResponseData::TransactionResponse {
resource_id: types::ResponseId::NoResponseId,
redirection_data: None,
mandate_reference: None,
connector_metadata: None,
network_txn_id: None,
connector_response_reference_id: None,
incremental_authorization_allowed: None,
}),
..data.clone()
})
}
}
}
fn get_error_response(
&self,

View File

@ -926,10 +926,22 @@ pub struct PaypalThreeDsResponse {
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaypalPreProcessingResponse {
#[serde(untagged)]
pub enum PaypalPreProcessingResponse {
PaypalLiabilityResponse(PaypalLiabilityResponse),
PaypalNonLiablityResponse(PaypalNonLiablityResponse),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaypalLiabilityResponse {
pub payment_source: CardParams,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PaypalNonLiablityResponse {
payment_source: CardsData,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CardParams {
pub card: AuthResult,