@@ -8,7 +8,8 @@ use error_stack::{IntoReport, ResultExt};
8
8
use masking:: PeekInterface ;
9
9
use transformers as paypal;
10
10
11
- use self :: transformers:: PaypalMeta ;
11
+ use self :: transformers:: { PaypalAuthResponse , PaypalMeta } ;
12
+ use super :: utils:: PaymentsCompleteAuthorizeRequestData ;
12
13
use crate :: {
13
14
configs:: settings,
14
15
connector:: {
@@ -391,24 +392,27 @@ impl ConnectorIntegration<api::Authorize, types::PaymentsAuthorizeData, types::P
391
392
data : & types:: PaymentsAuthorizeRouterData ,
392
393
res : Response ,
393
394
) -> CustomResult < types:: PaymentsAuthorizeRouterData , errors:: ConnectorError > {
394
- match data . payment_method {
395
- diesel_models :: enums :: PaymentMethod :: Wallet
396
- | diesel_models :: enums :: PaymentMethod :: BankRedirect => {
397
- let response : paypal :: PaypalRedirectResponse = res
398
- . response
399
- . parse_struct ( "paypal PaymentsRedirectResponse" )
400
- . change_context ( errors :: ConnectorError :: ResponseDeserializationFailed ) ? ;
395
+ let response : PaypalAuthResponse =
396
+ res . response
397
+ . parse_struct ( "paypal PaypalAuthResponse" )
398
+ . change_context ( errors :: ConnectorError :: ResponseDeserializationFailed ) ? ;
399
+
400
+ match response {
401
+ PaypalAuthResponse :: PaypalOrdersResponse ( response ) => {
401
402
types:: RouterData :: try_from ( types:: ResponseRouterData {
402
403
response,
403
404
data : data. clone ( ) ,
404
405
http_code : res. status_code ,
405
406
} )
406
407
}
407
- _ => {
408
- let response: paypal:: PaypalOrdersResponse = res
409
- . response
410
- . parse_struct ( "paypal PaymentsOrderResponse" )
411
- . change_context ( errors:: ConnectorError :: ResponseDeserializationFailed ) ?;
408
+ PaypalAuthResponse :: PaypalRedirectResponse ( response) => {
409
+ types:: RouterData :: try_from ( types:: ResponseRouterData {
410
+ response,
411
+ data : data. clone ( ) ,
412
+ http_code : res. status_code ,
413
+ } )
414
+ }
415
+ PaypalAuthResponse :: PaypalThreeDsResponse ( response) => {
412
416
types:: RouterData :: try_from ( types:: ResponseRouterData {
413
417
response,
414
418
data : data. clone ( ) ,
@@ -450,10 +454,10 @@ impl
450
454
req : & types:: PaymentsCompleteAuthorizeRouterData ,
451
455
connectors : & settings:: Connectors ,
452
456
) -> CustomResult < String , errors:: ConnectorError > {
453
- let paypal_meta : PaypalMeta = to_connector_meta ( req. request . connector_meta . clone ( ) ) ? ;
454
- let complete_authorize_url = match paypal_meta . psync_flow {
455
- transformers :: PaypalPaymentIntent :: Authorize => "authorize" . to_string ( ) ,
456
- transformers :: PaypalPaymentIntent :: Capture => "capture ". to_string ( ) ,
457
+ let complete_authorize_url = if req. request . is_auto_capture ( ) ? {
458
+ "capture" . to_string ( )
459
+ } else {
460
+ "authorize ". to_string ( )
457
461
} ;
458
462
Ok ( format ! (
459
463
"{}v2/checkout/orders/{}/{complete_authorize_url}" ,
493
497
) -> CustomResult < types:: PaymentsCompleteAuthorizeRouterData , errors:: ConnectorError > {
494
498
let response: paypal:: PaypalOrdersResponse = res
495
499
. response
496
- . parse_struct ( "paypal PaymentsOrderResponse " )
500
+ . parse_struct ( "paypal PaypalOrdersResponse " )
497
501
. change_context ( errors:: ConnectorError :: ResponseDeserializationFailed ) ?;
498
502
types:: RouterData :: try_from ( types:: ResponseRouterData {
499
503
response,
@@ -559,6 +563,19 @@ impl ConnectorIntegration<api::PSync, types::PaymentsSyncData, types::PaymentsRe
559
563
) ?;
560
564
format ! ( "v2/payments/captures/{capture_id}" )
561
565
}
566
+ // only set when payment is done through card 3DS
567
+ //because no authorize or capture id is generated during payment authorize call for card 3DS
568
+ transformers:: PaypalPaymentIntent :: Authenticate => {
569
+ format ! (
570
+ "v2/checkout/orders/{}" ,
571
+ req. request
572
+ . connector_transaction_id
573
+ . get_connector_transaction_id( )
574
+ . change_context(
575
+ errors:: ConnectorError :: MissingConnectorTransactionID
576
+ ) ?
577
+ )
578
+ }
562
579
} ;
563
580
Ok ( format ! ( "{}{psync_url}" , self . base_url( connectors) ) )
564
581
}
0 commit comments