Skip to content

Commit faba10a

Browse files
Changes for the payment_method single use
1 parent 6e0cfbc commit faba10a

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

Diff for: crates/hyperswitch_domain_models/src/payment_method_data.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1923,14 +1923,14 @@ impl From<NetworkTokenDetails> for NetworkTokenDetailsPaymentMethod {
19231923
#[cfg(all(feature = "v2", feature = "payment_methods_v2"))]
19241924
#[derive(Clone, Debug, Eq, PartialEq, serde::Deserialize, serde::Serialize)]
19251925
pub struct PaymentMethodTokenSingleUse {
1926-
pub token: Option<String>,
1926+
pub token: String,
19271927
pub merchant_connector_id: id_type::MerchantConnectorAccountId,
19281928
}
19291929

19301930
#[cfg(all(feature = "v2", feature = "payment_methods_v2"))]
19311931
impl PaymentMethodTokenSingleUse {
19321932
pub fn get_single_use_token_from_payment_method_token(
1933-
token: Option<String>,
1933+
token: String,
19341934
mca_id: id_type::MerchantConnectorAccountId,
19351935
) -> Self {
19361936
Self {

Diff for: crates/router/src/core/payment_methods.rs

+19-9
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ use common_utils::{
3737
ext_traits::{AsyncExt, Encode, ValueExt},
3838
fp_utils::when,
3939
generate_id, types as util_types,
40+
errors,
4041
};
4142
use diesel_models::{
4243
enums, GenericLinkNew, PaymentMethodCollectLink, PaymentMethodCollectLinkData,
@@ -1892,10 +1893,12 @@ pub async fn retrieve_payment_method(
18921893

18931894
let payment_method_in_cache = get_single_use_token_from_store(
18941895
&state.clone(),
1895-
payment_method_data::SingleUseToken::new(pm_id.clone().get_string_repr())
1896+
payment_method_data::SingleUseTokenKey::store_key(pm_id.clone().get_string_repr())
18961897
).await
1897-
.change_context(errors::ApiErrorResponse::PaymentMethodNotFound)
1898-
.attach_printable("Failed to get payment method in store")?;
1898+
.to_not_found_response(errors::ApiErrorResponse::GenericNotFoundError {
1899+
message: "payment methods session does not exist or has expired".to_string(),
1900+
})
1901+
.attach_printable("Failed to retrieve payment method from redis")?;
18991902

19001903
transformers::generate_payment_method_response(&payment_method, Some(&payment_method_in_cache))
19011904
.map(services::ApplicationResponse::Json)
@@ -2792,7 +2795,7 @@ async fn create_single_use_tokenization_flow(
27922795
)
27932796
.await?;
27942797

2795-
let token = payment_method_token_response
2798+
let token_response = payment_method_token_response
27962799
.payment_method_token_result
27972800
.map_err(|err| errors::ApiErrorResponse::ExternalConnectorError {
27982801
code: err.code,
@@ -2804,6 +2807,11 @@ async fn create_single_use_tokenization_flow(
28042807
reason: err.reason,
28052808
})?;
28062809

2810+
let token = token_response
2811+
.ok_or(errors::ApiErrorResponse::GenericNotFoundError {
2812+
message: "No token recevied from the PSP".to_string(),
2813+
})?;
2814+
28072815
let value = payment_method_data::PaymentMethodTokenSingleUse::get_single_use_token_from_payment_method_token(
28082816
token.clone(),
28092817
connector_id.clone()
@@ -2836,16 +2844,18 @@ async fn add_single_use_token_to_store(
28362844
)
28372845
.await
28382846
.change_context(errors::StorageError::KVError)
2839-
.attach_printable("Failed to insert payment method token to redis");
2840-
2847+
.attach_printable("Failed to insert payment method token to redis")?;
28412848
Ok(())
28422849
}
28432850

28442851
#[cfg(all(feature = "v2", feature = "payment_methods_v2"))]
28452852
async fn get_single_use_token_from_store(
28462853
state: &SessionState,
2847-
key: payment_method_data::SingleUseToken,
2848-
) -> RouterResult<payment_method_data::PaymentMethodTokenSingleUse>{
2854+
key: payment_method_data::SingleUseTokenKey,
2855+
) -> CustomResult<
2856+
payment_method_data::PaymentMethodTokenSingleUse,
2857+
errors::StorageError,
2858+
>{
28492859
let redis_connection = state
28502860
.store
28512861
.get_redis_conn()
@@ -2854,7 +2864,7 @@ async fn get_single_use_token_from_store(
28542864

28552865
redis_connection
28562866
.get_and_deserialize_key::<payment_method_data::PaymentMethodTokenSingleUse>(
2857-
&payment_method_data::SingleUseToken::get_redis_key(&key).into(),
2867+
&payment_method_data::SingleUseTokenKey::get_store_key(&key).into(),
28582868
"PaymentMethodTokenSingleUse"
28592869
)
28602870
.await

0 commit comments

Comments
 (0)