diff --git a/crates/router/src/core/payments/flows/authorize_flow.rs b/crates/router/src/core/payments/flows/authorize_flow.rs index 49d30f6e87..36d40d7480 100644 --- a/crates/router/src/core/payments/flows/authorize_flow.rs +++ b/crates/router/src/core/payments/flows/authorize_flow.rs @@ -84,6 +84,7 @@ impl Feature for types::PaymentsAu resp.to_owned(), maybe_customer, merchant_account, + self.request.payment_method_type.clone(), ) .await?; diff --git a/crates/router/src/core/payments/flows/verify_flow.rs b/crates/router/src/core/payments/flows/verify_flow.rs index 274ad4fcdc..a70e4419b3 100644 --- a/crates/router/src/core/payments/flows/verify_flow.rs +++ b/crates/router/src/core/payments/flows/verify_flow.rs @@ -67,6 +67,7 @@ impl Feature for types::VerifyRouterData resp.to_owned(), maybe_customer, merchant_account, + self.request.payment_method_type.clone(), ) .await?; @@ -177,12 +178,14 @@ impl types::VerifyRouterData { .await .to_verify_failed_response()?; + let payment_method_type = self.request.payment_method_type.clone(); let pm_id = tokenization::save_payment_method( state, connector, resp.to_owned(), maybe_customer, merchant_account, + payment_method_type, ) .await?; diff --git a/crates/router/src/core/payments/helpers.rs b/crates/router/src/core/payments/helpers.rs index 6d6017f6f8..b29d89a381 100644 --- a/crates/router/src/core/payments/helpers.rs +++ b/crates/router/src/core/payments/helpers.rs @@ -729,13 +729,14 @@ where #[instrument(skip_all)] pub(crate) async fn get_payment_method_create_request( - payment_method: Option<&api::PaymentMethodData>, - payment_method_type: Option, + payment_method_data: Option<&api::PaymentMethodData>, + payment_method: Option, + payment_method_type: Option, customer: &domain::Customer, ) -> RouterResult { - match payment_method { - Some(pm_data) => match payment_method_type { - Some(payment_method_type) => match pm_data { + match payment_method_data { + Some(pm_data) => match payment_method { + Some(payment_method) => match pm_data { api::PaymentMethodData::Card(card) => { let card_detail = api::CardDetail { card_number: card.card_number.clone(), @@ -745,8 +746,8 @@ pub(crate) async fn get_payment_method_create_request( }; let customer_id = customer.customer_id.clone(); let payment_method_request = api::PaymentMethodCreate { - payment_method: payment_method_type.foreign_into(), - payment_method_type: None, + payment_method: payment_method.foreign_into(), + payment_method_type: payment_method_type.map(ForeignInto::foreign_into), payment_method_issuer: card.card_issuer.clone(), payment_method_issuer_code: None, card: Some(card_detail), @@ -761,8 +762,8 @@ pub(crate) async fn get_payment_method_create_request( } _ => { let payment_method_request = api::PaymentMethodCreate { - payment_method: payment_method_type.foreign_into(), - payment_method_type: None, + payment_method: payment_method.foreign_into(), + payment_method_type: payment_method_type.map(ForeignInto::foreign_into), payment_method_issuer: None, payment_method_issuer_code: None, card: None, diff --git a/crates/router/src/core/payments/tokenization.rs b/crates/router/src/core/payments/tokenization.rs index b60d9a68aa..6cf6cbb28b 100644 --- a/crates/router/src/core/payments/tokenization.rs +++ b/crates/router/src/core/payments/tokenization.rs @@ -15,6 +15,7 @@ use crate::{ self, api::{self, PaymentMethodCreateExt}, domain, + storage::enums as storage_enums, }, utils::OptionExt, }; @@ -25,6 +26,7 @@ pub async fn save_payment_method( resp: types::RouterData, maybe_customer: &Option, merchant_account: &domain::MerchantAccount, + payment_method_type: Option, ) -> RouterResult> where FData: mandate::MandateBehaviour, @@ -53,6 +55,7 @@ where let payment_method_create_request = helpers::get_payment_method_create_request( Some(&resp.request.get_payment_method_data()), Some(resp.payment_method), + payment_method_type, &customer, ) .await?; diff --git a/crates/router/src/core/payments/transformers.rs b/crates/router/src/core/payments/transformers.rs index 320896b34d..c8cf6405a7 100644 --- a/crates/router/src/core/payments/transformers.rs +++ b/crates/router/src/core/payments/transformers.rs @@ -885,6 +885,7 @@ impl TryFrom> for types::VerifyRequestDat router_return_url, email: payment_data.email, return_url: payment_data.payment_intent.return_url, + payment_method_type: attempt.payment_method_type.clone(), }) } } diff --git a/crates/router/src/types.rs b/crates/router/src/types.rs index a694e878aa..881d4e7a2b 100644 --- a/crates/router/src/types.rs +++ b/crates/router/src/types.rs @@ -339,6 +339,7 @@ pub struct VerifyRequestData { pub router_return_url: Option, pub email: Option, pub return_url: Option, + pub payment_method_type: Option, } #[derive(Debug, Clone)]