mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	fix(connector): [iatapay]handle empty error response in case of 401 (#4291)
Signed-off-by: chikke srujan <121822803+srujanchikke@users.noreply.github.com> Co-authored-by: AkshayaFoiger <131388445+AkshayaFoiger@users.noreply.github.com> Co-authored-by: AkshayaFoiger <akshaya.shankar@juspay.in>
This commit is contained in:
		| @ -116,6 +116,16 @@ impl ConnectorCommon for Iatapay { | |||||||
|         res: Response, |         res: Response, | ||||||
|         event_builder: Option<&mut ConnectorEvent>, |         event_builder: Option<&mut ConnectorEvent>, | ||||||
|     ) -> CustomResult<ErrorResponse, errors::ConnectorError> { |     ) -> CustomResult<ErrorResponse, errors::ConnectorError> { | ||||||
|  |         let response_error_message = if res.response.is_empty() && res.status_code == 401 { | ||||||
|  |             ErrorResponse { | ||||||
|  |                 status_code: res.status_code, | ||||||
|  |                 code: consts::NO_ERROR_CODE.to_string(), | ||||||
|  |                 message: consts::NO_ERROR_MESSAGE.to_string(), | ||||||
|  |                 reason: Some(consts::CONNECTOR_UNAUTHORIZED_ERROR.to_string()), | ||||||
|  |                 attempt_status: None, | ||||||
|  |                 connector_transaction_id: None, | ||||||
|  |             } | ||||||
|  |         } else { | ||||||
|             let response: iatapay::IatapayErrorResponse = res |             let response: iatapay::IatapayErrorResponse = res | ||||||
|                 .response |                 .response | ||||||
|                 .parse_struct("IatapayErrorResponse") |                 .parse_struct("IatapayErrorResponse") | ||||||
| @ -123,15 +133,16 @@ impl ConnectorCommon for Iatapay { | |||||||
|  |  | ||||||
|             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); | ||||||
|  |             ErrorResponse { | ||||||
|         Ok(ErrorResponse { |  | ||||||
|                 status_code: res.status_code, |                 status_code: res.status_code, | ||||||
|                 code: response.error, |                 code: response.error, | ||||||
|                 message: response.message, |                 message: response.message, | ||||||
|                 reason: response.reason, |                 reason: response.reason, | ||||||
|                 attempt_status: None, |                 attempt_status: None, | ||||||
|                 connector_transaction_id: None, |                 connector_transaction_id: None, | ||||||
|         }) |             } | ||||||
|  |         }; | ||||||
|  |         Ok(response_error_message) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| @ -245,8 +256,8 @@ impl ConnectorIntegration<api::AccessTokenAuth, types::AccessTokenRequestData, t | |||||||
|  |  | ||||||
|         Ok(ErrorResponse { |         Ok(ErrorResponse { | ||||||
|             status_code: res.status_code, |             status_code: res.status_code, | ||||||
|             code: response.error, |             code: response.error.clone(), | ||||||
|             message: response.path, |             message: response.path.unwrap_or(response.error), | ||||||
|             reason: None, |             reason: None, | ||||||
|             attempt_status: None, |             attempt_status: None, | ||||||
|             connector_transaction_id: None, |             connector_transaction_id: None, | ||||||
|  | |||||||
| @ -503,7 +503,7 @@ pub struct IatapayErrorResponse { | |||||||
| #[derive(Deserialize, Debug, Serialize)] | #[derive(Deserialize, Debug, Serialize)] | ||||||
| pub struct IatapayAccessTokenErrorResponse { | pub struct IatapayAccessTokenErrorResponse { | ||||||
|     pub error: String, |     pub error: String, | ||||||
|     pub path: String, |     pub path: Option<String>, | ||||||
| } | } | ||||||
|  |  | ||||||
| #[derive(Debug, Serialize, Deserialize)] | #[derive(Debug, Serialize, Deserialize)] | ||||||
|  | |||||||
| @ -83,7 +83,16 @@ pub async fn add_access_token< | |||||||
|             .attach_printable("DB error when accessing the access token")?; |             .attach_printable("DB error when accessing the access token")?; | ||||||
|  |  | ||||||
|         let res = match old_access_token { |         let res = match old_access_token { | ||||||
|             Some(access_token) => Ok(Some(access_token)), |             Some(access_token) => { | ||||||
|  |                 router_env::logger::debug!( | ||||||
|  |                     "Access token found in redis for merchant_id: {}, payment_id: {}, connector: {} which has expiry of: {} seconds", | ||||||
|  |                     merchant_account.merchant_id, | ||||||
|  |                     router_data.payment_id, | ||||||
|  |                     connector.connector_name, | ||||||
|  |                     access_token.expires | ||||||
|  |                 ); | ||||||
|  |                 Ok(Some(access_token)) | ||||||
|  |             } | ||||||
|             None => { |             None => { | ||||||
|                 let cloned_router_data = router_data.clone(); |                 let cloned_router_data = router_data.clone(); | ||||||
|                 let refresh_token_request_data = types::AccessTokenRequestData::try_from( |                 let refresh_token_request_data = types::AccessTokenRequestData::try_from( | ||||||
|  | |||||||
| @ -127,7 +127,7 @@ impl ProcessTrackerWorkflow<AppState> for PaymentsSyncWorkflow { | |||||||
|                     let payment_attempt_update = |                     let payment_attempt_update = | ||||||
|                         hyperswitch_domain_models::payments::payment_attempt::PaymentAttemptUpdate::ErrorUpdate { |                         hyperswitch_domain_models::payments::payment_attempt::PaymentAttemptUpdate::ErrorUpdate { | ||||||
|                             connector: None, |                             connector: None, | ||||||
|                             status: api_models::enums::AttemptStatus::AuthenticationFailed, |                             status: api_models::enums::AttemptStatus::Failure, | ||||||
|                             error_code: None, |                             error_code: None, | ||||||
|                             error_message: None, |                             error_message: None, | ||||||
|                             error_reason: Some(Some( |                             error_reason: Some(Some( | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 chikke srujan
					chikke srujan