mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 18:17:13 +08:00 
			
		
		
		
	fix(payment_methods): set requires_cvv to false when either connector_mandate_details or network_transaction_id is present during MITs (#5331)
				
					
				
			This commit is contained in:
		| @ -3744,6 +3744,11 @@ pub async fn list_customer_payment_method( | |||||||
|     ) |     ) | ||||||
|     .await?; |     .await?; | ||||||
|  |  | ||||||
|  |     let is_connector_agnostic_mit_enabled = business_profile | ||||||
|  |         .as_ref() | ||||||
|  |         .and_then(|business_profile| business_profile.is_connector_agnostic_mit_enabled) | ||||||
|  |         .unwrap_or(false); | ||||||
|  |  | ||||||
|     for pm in resp.into_iter() { |     for pm in resp.into_iter() { | ||||||
|         let parent_payment_method_token = generate_id(consts::ID_LENGTH, "token"); |         let parent_payment_method_token = generate_id(consts::ID_LENGTH, "token"); | ||||||
|  |  | ||||||
| @ -3861,9 +3866,20 @@ pub async fn list_customer_payment_method( | |||||||
|             state, |             state, | ||||||
|             &key_store, |             &key_store, | ||||||
|             &merchant_account.merchant_id, |             &merchant_account.merchant_id, | ||||||
|  |             is_connector_agnostic_mit_enabled, | ||||||
|             connector_mandate_details, |             connector_mandate_details, | ||||||
|  |             pm.network_transaction_id.as_ref(), | ||||||
|         ) |         ) | ||||||
|         .await?; |         .await?; | ||||||
|  |  | ||||||
|  |         let requires_cvv = if is_connector_agnostic_mit_enabled { | ||||||
|  |             requires_cvv | ||||||
|  |                 && !(off_session_payment_flag | ||||||
|  |                     && (pm.connector_mandate_details.is_some() | ||||||
|  |                         || pm.network_transaction_id.is_some())) | ||||||
|  |         } else { | ||||||
|  |             requires_cvv && !(off_session_payment_flag && pm.connector_mandate_details.is_some()) | ||||||
|  |         }; | ||||||
|         // Need validation for enabled payment method ,querying MCA |         // Need validation for enabled payment method ,querying MCA | ||||||
|         let pma = api::CustomerPaymentMethod { |         let pma = api::CustomerPaymentMethod { | ||||||
|             payment_token: parent_payment_method_token.to_owned(), |             payment_token: parent_payment_method_token.to_owned(), | ||||||
| @ -3883,8 +3899,7 @@ pub async fn list_customer_payment_method( | |||||||
|             bank_transfer: payment_method_retrieval_context.bank_transfer_details, |             bank_transfer: payment_method_retrieval_context.bank_transfer_details, | ||||||
|             bank: bank_details, |             bank: bank_details, | ||||||
|             surcharge_details: None, |             surcharge_details: None, | ||||||
|             requires_cvv: requires_cvv |             requires_cvv, | ||||||
|                 && !(off_session_payment_flag && pm.connector_mandate_details.is_some()), |  | ||||||
|             last_used_at: Some(pm.last_used_at), |             last_used_at: Some(pm.last_used_at), | ||||||
|             default_payment_method_set: customer.default_payment_method_id.is_some() |             default_payment_method_set: customer.default_payment_method_id.is_some() | ||||||
|                 && customer.default_payment_method_id == Some(pm.payment_method_id), |                 && customer.default_payment_method_id == Some(pm.payment_method_id), | ||||||
| @ -3982,8 +3997,13 @@ pub async fn get_mca_status( | |||||||
|     state: &routes::SessionState, |     state: &routes::SessionState, | ||||||
|     key_store: &domain::MerchantKeyStore, |     key_store: &domain::MerchantKeyStore, | ||||||
|     merchant_id: &str, |     merchant_id: &str, | ||||||
|  |     is_connector_agnostic_mit_enabled: bool, | ||||||
|     connector_mandate_details: Option<storage::PaymentsMandateReference>, |     connector_mandate_details: Option<storage::PaymentsMandateReference>, | ||||||
|  |     network_transaction_id: Option<&String>, | ||||||
| ) -> errors::RouterResult<bool> { | ) -> errors::RouterResult<bool> { | ||||||
|  |     if is_connector_agnostic_mit_enabled && network_transaction_id.is_some() { | ||||||
|  |         return Ok(true); | ||||||
|  |     } | ||||||
|     if let Some(connector_mandate_details) = connector_mandate_details { |     if let Some(connector_mandate_details) = connector_mandate_details { | ||||||
|         let mcas = state |         let mcas = state | ||||||
|             .store |             .store | ||||||
|  | |||||||
| @ -3503,7 +3503,8 @@ pub async fn decide_multiplex_connector_for_normal_or_recurring_payment<F: Clone | |||||||
|                 let merchant_connector_id = connector_data |                 let merchant_connector_id = connector_data | ||||||
|                     .merchant_connector_id |                     .merchant_connector_id | ||||||
|                     .as_ref() |                     .as_ref() | ||||||
|                     .ok_or(errors::ApiErrorResponse::InternalServerError)?; |                     .ok_or(errors::ApiErrorResponse::InternalServerError) | ||||||
|  |                     .attach_printable("Failed to find the merchant connector id")?; | ||||||
|  |  | ||||||
|                 if is_network_transaction_id_flow( |                 if is_network_transaction_id_flow( | ||||||
|                     state, |                     state, | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Shankar Singh C
					Shankar Singh C