feat(router): add mandate connector to payment data (#1392)

This commit is contained in:
ItsMeShashank
2023-06-08 20:32:13 +05:30
committed by GitHub
parent 0575b26b4f
commit 7933e98c8c
12 changed files with 49 additions and 21 deletions

View File

@ -998,6 +998,7 @@ where
pub connector_response: storage::ConnectorResponse,
pub amount: api::Amount,
pub mandate_id: Option<api_models::payments::MandateIds>,
pub mandate_connector: Option<String>,
pub currency: storage_enums::Currency,
pub setup_mandate: Option<api::MandateData>,
pub address: PaymentAddress,

View File

@ -245,6 +245,7 @@ pub async fn get_token_pm_type_mandate_details(
Option<String>,
Option<storage_enums::PaymentMethod>,
Option<api::MandateData>,
Option<String>,
)> {
match mandate_type {
Some(api::MandateTxnType::NewMandateTxn) => {
@ -256,17 +257,19 @@ pub async fn get_token_pm_type_mandate_details(
request.payment_token.to_owned(),
request.payment_method.map(ForeignInto::foreign_into),
Some(setup_mandate),
None,
))
}
Some(api::MandateTxnType::RecurringMandateTxn) => {
let (token_, payment_method_type_) =
let (token_, payment_method_type_, mandate_connector) =
get_token_for_recurring_mandate(state, request, merchant_account).await?;
Ok((token_, payment_method_type_, None))
Ok((token_, payment_method_type_, None, mandate_connector))
}
None => Ok((
request.payment_token.to_owned(),
request.payment_method.map(ForeignInto::foreign_into),
request.mandate_data.clone(),
None,
)),
}
}
@ -275,7 +278,11 @@ pub async fn get_token_for_recurring_mandate(
state: &AppState,
req: &api::PaymentsRequest,
merchant_account: &domain::MerchantAccount,
) -> RouterResult<(Option<String>, Option<storage_enums::PaymentMethod>)> {
) -> RouterResult<(
Option<String>,
Option<storage_enums::PaymentMethod>,
Option<String>,
)> {
let db = &*state.store;
let mandate_id = req.mandate_id.clone().get_required_value("mandate_id")?;
@ -330,9 +337,17 @@ pub async fn get_token_for_recurring_mandate(
}
};
Ok((Some(token), Some(payment_method.payment_method)))
Ok((
Some(token),
Some(payment_method.payment_method),
Some(mandate.connector),
))
} else {
Ok((None, Some(payment_method.payment_method)))
Ok((
None,
Some(payment_method.payment_method),
Some(mandate.connector),
))
}
}

View File

@ -134,6 +134,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsCancelRequest>
amount,
email: None,
mandate_id: None,
mandate_connector: None,
setup_mandate: None,
token: None,
address: PaymentAddress {

View File

@ -141,6 +141,7 @@ impl<F: Send + Clone> GetTracker<F, payments::PaymentData<F>, api::PaymentsCaptu
amount,
email: None,
mandate_id: None,
mandate_connector: None,
setup_mandate: None,
token: None,
address: payments::PaymentAddress {

View File

@ -70,13 +70,14 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co
"confirm",
)?;
let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details(
state,
request,
mandate_type.clone(),
merchant_account,
)
.await?;
let (token, payment_method, setup_mandate, mandate_connector) =
helpers::get_token_pm_type_mandate_details(
state,
request,
mandate_type.clone(),
merchant_account,
)
.await?;
let browser_info = request
.browser_info
@ -186,6 +187,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co
amount,
email: request.email.clone(),
mandate_id: None,
mandate_connector,
setup_mandate,
token,
address: PaymentAddress {

View File

@ -98,13 +98,14 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
.map(ForeignInto::foreign_into)
.or(payment_intent.setup_future_usage);
let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details(
state,
request,
mandate_type.clone(),
merchant_account,
)
.await?;
let (token, payment_method, setup_mandate, mandate_connector) =
helpers::get_token_pm_type_mandate_details(
state,
request,
mandate_type.clone(),
merchant_account,
)
.await?;
let browser_info = request
.browser_info
@ -229,6 +230,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
amount,
email: request.email.clone(),
mandate_id: None,
mandate_connector,
setup_mandate,
token,
address: PaymentAddress {

View File

@ -63,7 +63,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
.get_payment_intent_id()
.change_context(errors::ApiErrorResponse::PaymentNotFound)?;
let (token, payment_method_type, setup_mandate) =
let (token, payment_method_type, setup_mandate, mandate_connector) =
helpers::get_token_pm_type_mandate_details(
state,
request,
@ -233,6 +233,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
amount,
email: request.email.clone(),
mandate_id,
mandate_connector,
setup_mandate,
token,
address: PaymentAddress {

View File

@ -166,6 +166,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::VerifyRequest> for Paym
amount: api::Amount::Zero,
email: None,
mandate_id: None,
mandate_connector: None,
setup_mandate: request.mandate_data.clone(),
token: request.payment_token.clone(),
connector_response,

View File

@ -153,6 +153,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsSessionRequest>
amount,
email: None,
mandate_id: None,
mandate_connector: None,
token: None,
setup_mandate: None,
address: payments::PaymentAddress {

View File

@ -124,6 +124,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsStartRequest> f
amount,
email: None,
mandate_id: None,
mandate_connector: None,
connector_response,
setup_mandate: None,
token: payment_attempt.payment_token.clone(),

View File

@ -266,6 +266,7 @@ async fn get_tracker_for_sync<
mandate_reference_id: None,
}
}),
mandate_connector: None,
setup_mandate: None,
token: None,
address: PaymentAddress {

View File

@ -72,7 +72,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
"update",
)?;
let (token, payment_method_type, setup_mandate) =
let (token, payment_method_type, setup_mandate, mandate_connector) =
helpers::get_token_pm_type_mandate_details(
state,
request,
@ -287,6 +287,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
amount,
email: request.email.clone(),
mandate_id,
mandate_connector,
token,
setup_mandate,
address: PaymentAddress {