@@ -167,7 +167,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
167
167
)
168
168
. await ?;
169
169
170
- let payment_attempt_new = Self :: make_payment_attempt (
170
+ let ( payment_attempt_new, additional_payment_data ) = Self :: make_payment_attempt (
171
171
& payment_id,
172
172
merchant_id,
173
173
money,
@@ -290,6 +290,14 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
290
290
payments:: SurchargeDetails :: from ( ( & request_surcharge_details, & payment_attempt) )
291
291
} ) ;
292
292
293
+ let payment_method_data_after_card_bin_call = request
294
+ . payment_method_data
295
+ . as_ref ( )
296
+ . zip ( additional_payment_data)
297
+ . map ( |( payment_method_data, additional_payment_data) | {
298
+ payment_method_data. apply_additional_payment_data ( additional_payment_data)
299
+ } ) ;
300
+
293
301
let payment_data = PaymentData {
294
302
flow : PhantomData ,
295
303
payment_intent,
@@ -306,7 +314,7 @@ impl<F: Send + Clone, Ctx: PaymentMethodRetrieve>
306
314
billing : billing_address. as_ref ( ) . map ( |a| a. into ( ) ) ,
307
315
} ,
308
316
confirm : request. confirm ,
309
- payment_method_data : request . payment_method_data . clone ( ) ,
317
+ payment_method_data : payment_method_data_after_card_bin_call ,
310
318
refunds : vec ! [ ] ,
311
319
disputes : vec ! [ ] ,
312
320
attempts : None ,
@@ -604,7 +612,10 @@ impl PaymentCreate {
604
612
request : & api:: PaymentsRequest ,
605
613
browser_info : Option < serde_json:: Value > ,
606
614
state : & AppState ,
607
- ) -> RouterResult < storage:: PaymentAttemptNew > {
615
+ ) -> RouterResult < (
616
+ storage:: PaymentAttemptNew ,
617
+ Option < api_models:: payments:: AdditionalPaymentData > ,
618
+ ) > {
608
619
let created_at @ modified_at @ last_synced = Some ( common_utils:: date_time:: now ( ) ) ;
609
620
let status =
610
621
helpers:: payment_attempt_status_fsm ( & request. payment_method_data , request. confirm ) ;
@@ -616,7 +627,8 @@ impl PaymentCreate {
616
627
. async_map ( |payment_method_data| async {
617
628
helpers:: get_additional_payment_data ( payment_method_data, & * state. store ) . await
618
629
} )
619
- . await
630
+ . await ;
631
+ let additional_pm_data_value = additional_pm_data
620
632
. as_ref ( )
621
633
. map ( Encode :: < api_models:: payments:: AdditionalPaymentData > :: encode_to_value)
622
634
. transpose ( )
@@ -631,35 +643,38 @@ impl PaymentCreate {
631
643
utils:: get_payment_attempt_id ( payment_id, 1 )
632
644
} ;
633
645
634
- Ok ( storage:: PaymentAttemptNew {
635
- payment_id : payment_id. to_string ( ) ,
636
- merchant_id : merchant_id. to_string ( ) ,
637
- attempt_id,
638
- status,
639
- currency,
640
- amount : amount. into ( ) ,
641
- payment_method,
642
- capture_method : request. capture_method ,
643
- capture_on : request. capture_on ,
644
- confirm : request. confirm . unwrap_or ( false ) ,
645
- created_at,
646
- modified_at,
647
- last_synced,
648
- authentication_type : request. authentication_type ,
649
- browser_info,
650
- payment_experience : request. payment_experience ,
651
- payment_method_type,
652
- payment_method_data : additional_pm_data,
653
- amount_to_capture : request. amount_to_capture ,
654
- payment_token : request. payment_token . clone ( ) ,
655
- mandate_id : request. mandate_id . clone ( ) ,
656
- business_sub_label : request. business_sub_label . clone ( ) ,
657
- mandate_details : request
658
- . mandate_data
659
- . as_ref ( )
660
- . and_then ( |inner| inner. mandate_type . clone ( ) . map ( Into :: into) ) ,
661
- ..storage:: PaymentAttemptNew :: default ( )
662
- } )
646
+ Ok ( (
647
+ storage:: PaymentAttemptNew {
648
+ payment_id : payment_id. to_string ( ) ,
649
+ merchant_id : merchant_id. to_string ( ) ,
650
+ attempt_id,
651
+ status,
652
+ currency,
653
+ amount : amount. into ( ) ,
654
+ payment_method,
655
+ capture_method : request. capture_method ,
656
+ capture_on : request. capture_on ,
657
+ confirm : request. confirm . unwrap_or ( false ) ,
658
+ created_at,
659
+ modified_at,
660
+ last_synced,
661
+ authentication_type : request. authentication_type ,
662
+ browser_info,
663
+ payment_experience : request. payment_experience ,
664
+ payment_method_type,
665
+ payment_method_data : additional_pm_data_value,
666
+ amount_to_capture : request. amount_to_capture ,
667
+ payment_token : request. payment_token . clone ( ) ,
668
+ mandate_id : request. mandate_id . clone ( ) ,
669
+ business_sub_label : request. business_sub_label . clone ( ) ,
670
+ mandate_details : request
671
+ . mandate_data
672
+ . as_ref ( )
673
+ . and_then ( |inner| inner. mandate_type . clone ( ) . map ( Into :: into) ) ,
674
+ ..storage:: PaymentAttemptNew :: default ( )
675
+ } ,
676
+ additional_pm_data,
677
+ ) )
663
678
}
664
679
665
680
#[ instrument( skip_all) ]
0 commit comments