@@ -50,7 +50,7 @@ use crate::{
50
50
self ,
51
51
types:: { decrypt, encrypt_optional, AsyncLift } ,
52
52
} ,
53
- storage:: { self , enums} ,
53
+ storage:: { self , enums, PaymentTokenData } ,
54
54
transformers:: ForeignFrom ,
55
55
} ,
56
56
utils:: { self , ConnectorResponseExt , OptionExt } ,
@@ -2103,23 +2103,32 @@ pub async fn list_customer_payment_method(
2103
2103
let mut customer_pms = Vec :: new ( ) ;
2104
2104
for pm in resp. into_iter ( ) {
2105
2105
let parent_payment_method_token = generate_id ( consts:: ID_LENGTH , "token" ) ;
2106
- let hyperswitch_token = generate_id ( consts:: ID_LENGTH , "token" ) ;
2107
2106
2108
- let card = if pm. payment_method == enums:: PaymentMethod :: Card {
2109
- get_card_details ( & pm, key, state, & hyperswitch_token, & key_store) . await ?
2110
- } else {
2111
- None
2112
- } ;
2107
+ let ( card, pmd, hyperswitch_token_data) = match pm. payment_method {
2108
+ enums:: PaymentMethod :: Card => (
2109
+ Some ( get_card_details ( & pm, key, state) . await ?) ,
2110
+ None ,
2111
+ PaymentTokenData :: permanent_card ( pm. payment_method_id . clone ( ) ) ,
2112
+ ) ,
2113
2113
2114
- #[ cfg( feature = "payouts" ) ]
2115
- let pmd = if pm. payment_method == enums:: PaymentMethod :: BankTransfer {
2116
- Some (
2117
- get_lookup_key_for_payout_method ( state, & key_store, & hyperswitch_token, & pm)
2118
- . await ?,
2119
- )
2120
- } else {
2121
- None
2114
+ #[ cfg( feature = "payouts" ) ]
2115
+ enums:: PaymentMethod :: BankTransfer => {
2116
+ let token = generate_id ( consts:: ID_LENGTH , "token" ) ;
2117
+ let token_data = PaymentTokenData :: temporary_generic ( token. clone ( ) ) ;
2118
+ (
2119
+ None ,
2120
+ Some ( get_lookup_key_for_payout_method ( state, & key_store, & token, & pm) . await ?) ,
2121
+ token_data,
2122
+ )
2123
+ }
2124
+
2125
+ _ => (
2126
+ None ,
2127
+ None ,
2128
+ PaymentTokenData :: temporary_generic ( generate_id ( consts:: ID_LENGTH , "token" ) ) ,
2129
+ ) ,
2122
2130
} ;
2131
+
2123
2132
//Need validation for enabled payment method ,querying MCA
2124
2133
let pma = api:: CustomerPaymentMethod {
2125
2134
payment_token : parent_payment_method_token. to_owned ( ) ,
@@ -2134,10 +2143,7 @@ pub async fn list_customer_payment_method(
2134
2143
installment_payment_enabled : false ,
2135
2144
payment_experience : Some ( vec ! [ api_models:: enums:: PaymentExperience :: RedirectToUrl ] ) ,
2136
2145
created : Some ( pm. created_at ) ,
2137
- #[ cfg( feature = "payouts" ) ]
2138
2146
bank_transfer : pmd,
2139
- #[ cfg( not( feature = "payouts" ) ) ]
2140
- bank_transfer : None ,
2141
2147
requires_cvv,
2142
2148
} ;
2143
2149
customer_pms. push ( pma. to_owned ( ) ) ;
@@ -2153,7 +2159,7 @@ pub async fn list_customer_payment_method(
2153
2159
& parent_payment_method_token,
2154
2160
pma. payment_method ,
2155
2161
) )
2156
- . insert ( intent_created, hyperswitch_token , state)
2162
+ . insert ( intent_created, hyperswitch_token_data , state)
2157
2163
. await ?;
2158
2164
2159
2165
if let Some ( metadata) = pma. metadata {
@@ -2200,10 +2206,8 @@ async fn get_card_details(
2200
2206
pm : & payment_method:: PaymentMethod ,
2201
2207
key : & [ u8 ] ,
2202
2208
state : & routes:: AppState ,
2203
- hyperswitch_token : & str ,
2204
- key_store : & domain:: MerchantKeyStore ,
2205
- ) -> errors:: RouterResult < Option < api:: CardDetailFromLocker > > {
2206
- let mut _card_decrypted =
2209
+ ) -> errors:: RouterResult < api:: CardDetailFromLocker > {
2210
+ let card_decrypted =
2207
2211
decrypt :: < serde_json:: Value , masking:: WithType > ( pm. payment_method_data . clone ( ) , key)
2208
2212
. await
2209
2213
. change_context ( errors:: StorageError :: DecryptionError )
@@ -2217,16 +2221,17 @@ async fn get_card_details(
2217
2221
_ => None ,
2218
2222
} ) ;
2219
2223
2220
- Ok ( Some (
2221
- get_lookup_key_from_locker ( state, hyperswitch_token, pm, key_store) . await ?,
2222
- ) )
2224
+ Ok ( if let Some ( mut crd) = card_decrypted {
2225
+ crd. scheme = pm. scheme . clone ( ) ;
2226
+ crd
2227
+ } else {
2228
+ get_card_details_from_locker ( state, pm) . await ?
2229
+ } )
2223
2230
}
2224
2231
2225
- pub async fn get_lookup_key_from_locker (
2232
+ pub async fn get_card_details_from_locker (
2226
2233
state : & routes:: AppState ,
2227
- payment_token : & str ,
2228
2234
pm : & storage:: PaymentMethod ,
2229
- merchant_key_store : & domain:: MerchantKeyStore ,
2230
2235
) -> errors:: RouterResult < api:: CardDetailFromLocker > {
2231
2236
let card = get_card_from_locker (
2232
2237
state,
@@ -2237,9 +2242,19 @@ pub async fn get_lookup_key_from_locker(
2237
2242
. await
2238
2243
. change_context ( errors:: ApiErrorResponse :: InternalServerError )
2239
2244
. attach_printable ( "Error getting card from card vault" ) ?;
2240
- let card_detail = payment_methods:: get_card_detail ( pm, card)
2245
+
2246
+ payment_methods:: get_card_detail ( pm, card)
2241
2247
. change_context ( errors:: ApiErrorResponse :: InternalServerError )
2242
- . attach_printable ( "Get Card Details Failed" ) ?;
2248
+ . attach_printable ( "Get Card Details Failed" )
2249
+ }
2250
+
2251
+ pub async fn get_lookup_key_from_locker (
2252
+ state : & routes:: AppState ,
2253
+ payment_token : & str ,
2254
+ pm : & storage:: PaymentMethod ,
2255
+ merchant_key_store : & domain:: MerchantKeyStore ,
2256
+ ) -> errors:: RouterResult < api:: CardDetailFromLocker > {
2257
+ let card_detail = get_card_details_from_locker ( state, pm) . await ?;
2243
2258
let card = card_detail. clone ( ) ;
2244
2259
2245
2260
let resp = TempLockerCardSupport :: create_payment_method_data_in_temp_locker (
0 commit comments