mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-02 12:06:56 +08:00
fix(router): associate parent payment token with payment_method_id as hyperswitch token for saved cards (#2130)
Co-authored-by: Chethan Rao <70657455+Chethan-rao@users.noreply.github.com>
This commit is contained in:
@ -9,13 +9,17 @@ pub use api_models::{
|
||||
pub use common_utils::request::RequestBody;
|
||||
use data_models::payments::{payment_attempt::PaymentAttempt, PaymentIntent};
|
||||
use diesel_models::enums;
|
||||
use error_stack::IntoReport;
|
||||
|
||||
use crate::{
|
||||
core::{errors::RouterResult, payments::helpers},
|
||||
core::{
|
||||
errors::{self, RouterResult},
|
||||
payments::helpers,
|
||||
},
|
||||
routes::AppState,
|
||||
types::{
|
||||
api::{self, payments},
|
||||
domain,
|
||||
domain, storage,
|
||||
},
|
||||
};
|
||||
|
||||
@ -30,6 +34,14 @@ pub trait PaymentMethodRetrieve {
|
||||
payment_attempt: &PaymentAttempt,
|
||||
merchant_key_store: &domain::MerchantKeyStore,
|
||||
) -> RouterResult<(Option<payments::PaymentMethodData>, Option<String>)>;
|
||||
|
||||
async fn retrieve_payment_method_with_token(
|
||||
state: &AppState,
|
||||
key_store: &domain::MerchantKeyStore,
|
||||
token: &storage::PaymentTokenData,
|
||||
payment_intent: &PaymentIntent,
|
||||
card_cvc: Option<masking::Secret<String>>,
|
||||
) -> RouterResult<Option<(payments::PaymentMethodData, enums::PaymentMethod)>>;
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
@ -105,4 +117,65 @@ impl PaymentMethodRetrieve for Oss {
|
||||
_ => Ok((None, None)),
|
||||
}
|
||||
}
|
||||
|
||||
async fn retrieve_payment_method_with_token(
|
||||
state: &AppState,
|
||||
merchant_key_store: &domain::MerchantKeyStore,
|
||||
token_data: &storage::PaymentTokenData,
|
||||
payment_intent: &PaymentIntent,
|
||||
card_cvc: Option<masking::Secret<String>>,
|
||||
) -> RouterResult<Option<(payments::PaymentMethodData, enums::PaymentMethod)>> {
|
||||
match token_data {
|
||||
storage::PaymentTokenData::TemporaryGeneric(generic_token) => {
|
||||
helpers::retrieve_payment_method_with_temporary_token(
|
||||
state,
|
||||
&generic_token.token,
|
||||
payment_intent,
|
||||
card_cvc,
|
||||
merchant_key_store,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
storage::PaymentTokenData::Temporary(generic_token) => {
|
||||
helpers::retrieve_payment_method_with_temporary_token(
|
||||
state,
|
||||
&generic_token.token,
|
||||
payment_intent,
|
||||
card_cvc,
|
||||
merchant_key_store,
|
||||
)
|
||||
.await
|
||||
}
|
||||
|
||||
storage::PaymentTokenData::Permanent(card_token) => {
|
||||
helpers::retrieve_card_with_permanent_token(
|
||||
state,
|
||||
&card_token.token,
|
||||
payment_intent,
|
||||
card_cvc,
|
||||
)
|
||||
.await
|
||||
.map(|card| Some((card, enums::PaymentMethod::Card)))
|
||||
}
|
||||
|
||||
storage::PaymentTokenData::PermanentCard(card_token) => {
|
||||
helpers::retrieve_card_with_permanent_token(
|
||||
state,
|
||||
&card_token.token,
|
||||
payment_intent,
|
||||
card_cvc,
|
||||
)
|
||||
.await
|
||||
.map(|card| Some((card, enums::PaymentMethod::Card)))
|
||||
}
|
||||
|
||||
storage::PaymentTokenData::AuthBankDebit(_) => {
|
||||
Err(errors::ApiErrorResponse::NotImplemented {
|
||||
message: errors::NotImplementedMessage::Default,
|
||||
})
|
||||
.into_report()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user