@@ -2,18 +2,19 @@ open Utils
22
33@react.component
44let make = () => {
5- let logger = HyperLogger .make (~source = Elements (Payment ))
65 let isCompleteAuthorizeCalledRef = React .useRef (false )
76 let timeoutRef = React .useRef (None )
87 let eventsToSendToParent = ["confirmParams" , "poll_status" , "openurl_if_required" ]
9- let completeAuthorize = PaymentHelpers .useRedsysCompleteAuthorize (Some (logger ))
8+ let loggerState = Recoil .useRecoilValueFromAtom (RecoilAtoms .loggerAtom )
9+ let completeAuthorize = PaymentHelpers .useRedsysCompleteAuthorize (Some (loggerState ))
1010
1111 let handleCompleteAuthorizeCall = (
1212 threeDsMethodComp ,
1313 paymentIntentId ,
1414 publishableKey ,
1515 headers ,
1616 returnUrl ,
17+ iframeId ,
1718 ) => {
1819 isCompleteAuthorizeCalledRef .current = true
1920 let body = [
@@ -27,7 +28,7 @@ let make = () => {
2728 publishableKey ,
2829 },
2930 ~headers ,
30- ~iframeId = "redsys3ds" ,
31+ ~iframeId ,
3132 ~clientSecret = Some (paymentIntentId ),
3233 )
3334 }
@@ -45,9 +46,9 @@ let make = () => {
4546 let metaDataDict = metadata -> JSON .Decode .object -> Option .getOr (Dict .make ())
4647 let paymentIntentId = metaDataDict -> getString ("paymentIntentId" , "" )
4748 let publishableKey = metaDataDict -> getString ("publishableKey" , "" )
48-
49- logger .setClientSecret (paymentIntentId )
50- logger .setMerchantId (publishableKey )
49+ let iframeId = metaDataDict -> getString ( "iframeId" , "" )
50+ loggerState .setClientSecret (paymentIntentId )
51+ loggerState .setMerchantId (publishableKey )
5152
5253 let headersDict = metaDataDict -> getDictFromDict ("headers" )
5354
@@ -71,19 +72,29 @@ let make = () => {
7172 form .target = "threeDsAuthFrame"
7273 form .appendChild (input )
7374 form .submit ()
75+ } else {
76+ loggerState .setLogError (
77+ ~value = "three_ds_method_url is empty in metadata" ,
78+ ~eventName = REDSYS_3DS ,
79+ )
7480 }
7581 | None => ()
7682 }
7783
7884 timeoutRef .current -> Option .forEach (clearTimeout )
7985
8086 timeoutRef .current = Some (setTimeout (() => {
87+ loggerState .setLogInfo (
88+ ~value = "Fallback timeout reached for 3DS method completion" ,
89+ ~eventName = REDSYS_3DS ,
90+ )
8191 handleCompleteAuthorizeCall (
8292 "N" ,
8393 paymentIntentId ,
8494 publishableKey ,
8595 headers ,
8696 returnUrl ,
97+ iframeId ,
8798 )-> ignore
8899 }, 10000 ))
89100
@@ -98,18 +109,32 @@ let make = () => {
98109 publishableKey ,
99110 headers ,
100111 returnUrl ,
112+ iframeId ,
101113 )-> ignore
102114 }
103115 })
104- | None => ()
116+ | None =>
117+ loggerState .setLogError (
118+ ~value = "Unable to locate threeDsAuthFrame iframe" ,
119+ ~eventName = REDSYS_3DS ,
120+ )
105121 }
106122 }
107123 } catch {
108- | _ =>
124+ | e =>
109125 postFailedSubmitResponse (
110126 ~errortype = "complete_authorize_failed" ,
111127 ~message = "Something went wrong." ,
112128 )
129+ loggerState .setLogError (
130+ ~value = {
131+ "message" : "Exception in Redsys3DS iframe message handler" ,
132+ "error" : e -> Utils .formatException ,
133+ }
134+ -> JSON .stringifyAny
135+ -> Option .getOr ("" ),
136+ ~eventName = REDSYS_3DS ,
137+ )
113138 }
114139 }
115140 Window .addEventListener ("message" , handle )
0 commit comments