@@ -10,6 +10,7 @@ use common_utils::{
10
10
} ;
11
11
use error_stack:: { report, ResultExt } ;
12
12
use hyperswitch_domain_models:: {
13
+ network_tokenization:: NetworkTokenNumber ,
13
14
payment_method_data:: { BankRedirectData , BankTransferData , Card , PaymentMethodData } ,
14
15
router_data:: { AccessToken , ConnectorAuthType , ErrorResponse , RouterData } ,
15
16
router_request_types:: { BrowserInformation , PaymentsPreProcessingData , ResponseId } ,
@@ -29,8 +30,9 @@ use serde::{Deserialize, Serialize};
29
30
use crate :: {
30
31
types:: { RefundsResponseRouterData , ResponseRouterData } ,
31
32
utils:: {
32
- self , AddressDetailsData , BrowserInformationData , CardData , PaymentsAuthorizeRequestData ,
33
- PaymentsPreProcessingRequestData , RouterData as OtherRouterData ,
33
+ self , AddressDetailsData , BrowserInformationData , CardData , NetworkTokenData ,
34
+ PaymentsAuthorizeRequestData , PaymentsPreProcessingRequestData ,
35
+ RouterData as OtherRouterData ,
34
36
} ,
35
37
} ;
36
38
@@ -226,6 +228,26 @@ pub enum TrustpayPaymentsRequest {
226
228
CardsPaymentRequest ( Box < PaymentRequestCards > ) ,
227
229
BankRedirectPaymentRequest ( Box < PaymentRequestBankRedirect > ) ,
228
230
BankTransferPaymentRequest ( Box < PaymentRequestBankTransfer > ) ,
231
+ NetworkTokenPaymentRequest ( Box < PaymentRequestNetworkToken > ) ,
232
+ }
233
+
234
+ #[ derive( Debug , Serialize , PartialEq ) ]
235
+ pub struct PaymentRequestNetworkToken {
236
+ pub amount : StringMajorUnit ,
237
+ pub currency : enums:: Currency ,
238
+ pub pan : NetworkTokenNumber ,
239
+ #[ serde( rename = "exp" ) ]
240
+ pub expiry_date : Secret < String > ,
241
+ #[ serde( rename = "RedirectUrl" ) ]
242
+ pub redirect_url : String ,
243
+ #[ serde( rename = "threeDSecureEnrollmentStatus" ) ]
244
+ pub enrollment_status : char ,
245
+ #[ serde( rename = "threeDSecureEci" ) ]
246
+ pub eci : String ,
247
+ #[ serde( rename = "threeDSecureAuthenticationStatus" ) ]
248
+ pub authentication_status : char ,
249
+ #[ serde( rename = "threeDSecureVerificationId" ) ]
250
+ pub verification_id : Secret < String > ,
229
251
}
230
252
231
253
#[ derive( Debug , Serialize , PartialEq ) ]
@@ -538,6 +560,28 @@ impl TryFrom<&TrustpayRouterData<&PaymentsAuthorizeRouterData>> for TrustpayPaym
538
560
auth,
539
561
)
540
562
}
563
+ PaymentMethodData :: NetworkToken ( ref token_data) => {
564
+ Ok ( Self :: NetworkTokenPaymentRequest ( Box :: new (
565
+ PaymentRequestNetworkToken {
566
+ amount : item. amount . to_owned ( ) ,
567
+ currency : item. router_data . request . currency ,
568
+ pan : token_data. get_network_token ( ) ,
569
+ expiry_date : token_data
570
+ . get_token_expiry_month_year_2_digit_with_delimiter ( "/" . to_owned ( ) ) ?,
571
+ redirect_url : item. router_data . request . get_router_return_url ( ) ?,
572
+ enrollment_status : 'Y' , // Set to 'Y' as network provider not providing this value in response
573
+ eci : token_data. eci . clone ( ) . ok_or_else ( || {
574
+ errors:: ConnectorError :: MissingRequiredField { field_name : "eci" }
575
+ } ) ?,
576
+ authentication_status : 'Y' , // Set to 'Y' since presence of token_cryptogram is already validated
577
+ verification_id : token_data. get_cryptogram ( ) . ok_or_else ( || {
578
+ errors:: ConnectorError :: MissingRequiredField {
579
+ field_name : "verification_id" ,
580
+ }
581
+ } ) ?,
582
+ } ,
583
+ ) ) )
584
+ }
541
585
PaymentMethodData :: CardRedirect ( _)
542
586
| PaymentMethodData :: Wallet ( _)
543
587
| PaymentMethodData :: PayLater ( _)
@@ -552,7 +596,6 @@ impl TryFrom<&TrustpayRouterData<&PaymentsAuthorizeRouterData>> for TrustpayPaym
552
596
| PaymentMethodData :: GiftCard ( _)
553
597
| PaymentMethodData :: OpenBanking ( _)
554
598
| PaymentMethodData :: CardToken ( _)
555
- | PaymentMethodData :: NetworkToken ( _)
556
599
| PaymentMethodData :: CardDetailsForNetworkTransactionId ( _) => {
557
600
Err ( errors:: ConnectorError :: NotImplemented (
558
601
utils:: get_unimplemented_payment_method_error_message ( "trustpay" ) ,
0 commit comments