diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs index fa01437e5e..e5c8ef57b2 100644 --- a/crates/router/src/core/payment_methods/cards.rs +++ b/crates/router/src/core/payment_methods/cards.rs @@ -3892,6 +3892,7 @@ pub async fn list_customer_payment_method( let mca_enabled = get_mca_status( state, &key_store, + profile_id.clone(), merchant_account.get_id(), is_connector_agnostic_mit_enabled, connector_mandate_details, @@ -3932,7 +3933,9 @@ pub async fn list_customer_payment_method( && customer.default_payment_method_id == Some(pm.payment_method_id), billing: payment_method_billing, }; - customer_pms.push(pma.to_owned()); + if requires_cvv || mca_enabled { + customer_pms.push(pma.to_owned()); + } let redis_conn = state .store @@ -4410,19 +4413,22 @@ async fn generate_saved_pm_response( .change_context(errors::ApiErrorResponse::InternalServerError) .attach_printable("Failed to deserialize to Payment Mandate Reference ")?; - let (is_connector_agnostic_mit_enabled, requires_cvv, off_session_payment_flag) = payment_info - .map(|pi| { - ( - pi.is_connector_agnostic_mit_enabled, - pi.requires_cvv, - pi.off_session_payment_flag, - ) - }) - .unwrap_or((false, false, false)); + let (is_connector_agnostic_mit_enabled, requires_cvv, off_session_payment_flag, profile_id) = + payment_info + .map(|pi| { + ( + pi.is_connector_agnostic_mit_enabled, + pi.requires_cvv, + pi.off_session_payment_flag, + pi.business_profile.map(|profile| profile.profile_id), + ) + }) + .unwrap_or((false, false, false, Default::default())); let mca_enabled = get_mca_status( state, key_store, + profile_id, merchant_account.get_id(), is_connector_agnostic_mit_enabled, connector_mandate_details, @@ -4486,6 +4492,7 @@ async fn generate_saved_pm_response( pub async fn get_mca_status( state: &routes::SessionState, key_store: &domain::MerchantKeyStore, + profile_id: Option, merchant_id: &id_type::MerchantId, is_connector_agnostic_mit_enabled: bool, connector_mandate_details: Option, @@ -4507,19 +4514,17 @@ pub async fn get_mca_status( .change_context(errors::ApiErrorResponse::MerchantConnectorAccountNotFound { id: merchant_id.get_string_repr().to_owned(), })?; - let mut mca_ids = HashSet::new(); let mcas = mcas .into_iter() - .filter(|mca| mca.disabled == Some(true)) + .filter(|mca| mca.disabled == Some(false) && profile_id.clone() == mca.profile_id) .collect::>(); for mca in mcas { mca_ids.insert(mca.get_id()); } - for mca_id in connector_mandate_details.keys() { - if !mca_ids.contains(mca_id) { + if mca_ids.contains(mca_id) { return Ok(true); } }