mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-10-30 17:47:54 +08:00
feat(router): add mandate connector to payment data (#1392)
This commit is contained in:
@ -998,6 +998,7 @@ where
|
|||||||
pub connector_response: storage::ConnectorResponse,
|
pub connector_response: storage::ConnectorResponse,
|
||||||
pub amount: api::Amount,
|
pub amount: api::Amount,
|
||||||
pub mandate_id: Option<api_models::payments::MandateIds>,
|
pub mandate_id: Option<api_models::payments::MandateIds>,
|
||||||
|
pub mandate_connector: Option<String>,
|
||||||
pub currency: storage_enums::Currency,
|
pub currency: storage_enums::Currency,
|
||||||
pub setup_mandate: Option<api::MandateData>,
|
pub setup_mandate: Option<api::MandateData>,
|
||||||
pub address: PaymentAddress,
|
pub address: PaymentAddress,
|
||||||
|
|||||||
@ -245,6 +245,7 @@ pub async fn get_token_pm_type_mandate_details(
|
|||||||
Option<String>,
|
Option<String>,
|
||||||
Option<storage_enums::PaymentMethod>,
|
Option<storage_enums::PaymentMethod>,
|
||||||
Option<api::MandateData>,
|
Option<api::MandateData>,
|
||||||
|
Option<String>,
|
||||||
)> {
|
)> {
|
||||||
match mandate_type {
|
match mandate_type {
|
||||||
Some(api::MandateTxnType::NewMandateTxn) => {
|
Some(api::MandateTxnType::NewMandateTxn) => {
|
||||||
@ -256,17 +257,19 @@ pub async fn get_token_pm_type_mandate_details(
|
|||||||
request.payment_token.to_owned(),
|
request.payment_token.to_owned(),
|
||||||
request.payment_method.map(ForeignInto::foreign_into),
|
request.payment_method.map(ForeignInto::foreign_into),
|
||||||
Some(setup_mandate),
|
Some(setup_mandate),
|
||||||
|
None,
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
Some(api::MandateTxnType::RecurringMandateTxn) => {
|
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?;
|
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((
|
None => Ok((
|
||||||
request.payment_token.to_owned(),
|
request.payment_token.to_owned(),
|
||||||
request.payment_method.map(ForeignInto::foreign_into),
|
request.payment_method.map(ForeignInto::foreign_into),
|
||||||
request.mandate_data.clone(),
|
request.mandate_data.clone(),
|
||||||
|
None,
|
||||||
)),
|
)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -275,7 +278,11 @@ pub async fn get_token_for_recurring_mandate(
|
|||||||
state: &AppState,
|
state: &AppState,
|
||||||
req: &api::PaymentsRequest,
|
req: &api::PaymentsRequest,
|
||||||
merchant_account: &domain::MerchantAccount,
|
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 db = &*state.store;
|
||||||
let mandate_id = req.mandate_id.clone().get_required_value("mandate_id")?;
|
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 {
|
} else {
|
||||||
Ok((None, Some(payment_method.payment_method)))
|
Ok((
|
||||||
|
None,
|
||||||
|
Some(payment_method.payment_method),
|
||||||
|
Some(mandate.connector),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -134,6 +134,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsCancelRequest>
|
|||||||
amount,
|
amount,
|
||||||
email: None,
|
email: None,
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector: None,
|
||||||
setup_mandate: None,
|
setup_mandate: None,
|
||||||
token: None,
|
token: None,
|
||||||
address: PaymentAddress {
|
address: PaymentAddress {
|
||||||
|
|||||||
@ -141,6 +141,7 @@ impl<F: Send + Clone> GetTracker<F, payments::PaymentData<F>, api::PaymentsCaptu
|
|||||||
amount,
|
amount,
|
||||||
email: None,
|
email: None,
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector: None,
|
||||||
setup_mandate: None,
|
setup_mandate: None,
|
||||||
token: None,
|
token: None,
|
||||||
address: payments::PaymentAddress {
|
address: payments::PaymentAddress {
|
||||||
|
|||||||
@ -70,13 +70,14 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co
|
|||||||
"confirm",
|
"confirm",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details(
|
let (token, payment_method, setup_mandate, mandate_connector) =
|
||||||
state,
|
helpers::get_token_pm_type_mandate_details(
|
||||||
request,
|
state,
|
||||||
mandate_type.clone(),
|
request,
|
||||||
merchant_account,
|
mandate_type.clone(),
|
||||||
)
|
merchant_account,
|
||||||
.await?;
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let browser_info = request
|
let browser_info = request
|
||||||
.browser_info
|
.browser_info
|
||||||
@ -186,6 +187,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Co
|
|||||||
amount,
|
amount,
|
||||||
email: request.email.clone(),
|
email: request.email.clone(),
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector,
|
||||||
setup_mandate,
|
setup_mandate,
|
||||||
token,
|
token,
|
||||||
address: PaymentAddress {
|
address: PaymentAddress {
|
||||||
|
|||||||
@ -98,13 +98,14 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
.map(ForeignInto::foreign_into)
|
.map(ForeignInto::foreign_into)
|
||||||
.or(payment_intent.setup_future_usage);
|
.or(payment_intent.setup_future_usage);
|
||||||
|
|
||||||
let (token, payment_method, setup_mandate) = helpers::get_token_pm_type_mandate_details(
|
let (token, payment_method, setup_mandate, mandate_connector) =
|
||||||
state,
|
helpers::get_token_pm_type_mandate_details(
|
||||||
request,
|
state,
|
||||||
mandate_type.clone(),
|
request,
|
||||||
merchant_account,
|
mandate_type.clone(),
|
||||||
)
|
merchant_account,
|
||||||
.await?;
|
)
|
||||||
|
.await?;
|
||||||
|
|
||||||
let browser_info = request
|
let browser_info = request
|
||||||
.browser_info
|
.browser_info
|
||||||
@ -229,6 +230,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
amount,
|
amount,
|
||||||
email: request.email.clone(),
|
email: request.email.clone(),
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector,
|
||||||
setup_mandate,
|
setup_mandate,
|
||||||
token,
|
token,
|
||||||
address: PaymentAddress {
|
address: PaymentAddress {
|
||||||
|
|||||||
@ -63,7 +63,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
.get_payment_intent_id()
|
.get_payment_intent_id()
|
||||||
.change_context(errors::ApiErrorResponse::PaymentNotFound)?;
|
.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(
|
helpers::get_token_pm_type_mandate_details(
|
||||||
state,
|
state,
|
||||||
request,
|
request,
|
||||||
@ -233,6 +233,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
amount,
|
amount,
|
||||||
email: request.email.clone(),
|
email: request.email.clone(),
|
||||||
mandate_id,
|
mandate_id,
|
||||||
|
mandate_connector,
|
||||||
setup_mandate,
|
setup_mandate,
|
||||||
token,
|
token,
|
||||||
address: PaymentAddress {
|
address: PaymentAddress {
|
||||||
|
|||||||
@ -166,6 +166,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::VerifyRequest> for Paym
|
|||||||
amount: api::Amount::Zero,
|
amount: api::Amount::Zero,
|
||||||
email: None,
|
email: None,
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector: None,
|
||||||
setup_mandate: request.mandate_data.clone(),
|
setup_mandate: request.mandate_data.clone(),
|
||||||
token: request.payment_token.clone(),
|
token: request.payment_token.clone(),
|
||||||
connector_response,
|
connector_response,
|
||||||
|
|||||||
@ -153,6 +153,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsSessionRequest>
|
|||||||
amount,
|
amount,
|
||||||
email: None,
|
email: None,
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector: None,
|
||||||
token: None,
|
token: None,
|
||||||
setup_mandate: None,
|
setup_mandate: None,
|
||||||
address: payments::PaymentAddress {
|
address: payments::PaymentAddress {
|
||||||
|
|||||||
@ -124,6 +124,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsStartRequest> f
|
|||||||
amount,
|
amount,
|
||||||
email: None,
|
email: None,
|
||||||
mandate_id: None,
|
mandate_id: None,
|
||||||
|
mandate_connector: None,
|
||||||
connector_response,
|
connector_response,
|
||||||
setup_mandate: None,
|
setup_mandate: None,
|
||||||
token: payment_attempt.payment_token.clone(),
|
token: payment_attempt.payment_token.clone(),
|
||||||
|
|||||||
@ -266,6 +266,7 @@ async fn get_tracker_for_sync<
|
|||||||
mandate_reference_id: None,
|
mandate_reference_id: None,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
mandate_connector: None,
|
||||||
setup_mandate: None,
|
setup_mandate: None,
|
||||||
token: None,
|
token: None,
|
||||||
address: PaymentAddress {
|
address: PaymentAddress {
|
||||||
|
|||||||
@ -72,7 +72,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
"update",
|
"update",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let (token, payment_method_type, setup_mandate) =
|
let (token, payment_method_type, setup_mandate, mandate_connector) =
|
||||||
helpers::get_token_pm_type_mandate_details(
|
helpers::get_token_pm_type_mandate_details(
|
||||||
state,
|
state,
|
||||||
request,
|
request,
|
||||||
@ -287,6 +287,7 @@ impl<F: Send + Clone> GetTracker<F, PaymentData<F>, api::PaymentsRequest> for Pa
|
|||||||
amount,
|
amount,
|
||||||
email: request.email.clone(),
|
email: request.email.clone(),
|
||||||
mandate_id,
|
mandate_id,
|
||||||
|
mandate_connector,
|
||||||
token,
|
token,
|
||||||
setup_mandate,
|
setup_mandate,
|
||||||
address: PaymentAddress {
|
address: PaymentAddress {
|
||||||
|
|||||||
Reference in New Issue
Block a user