Skip to content

Commit 75060f8

Browse files
Abhishek ChorotiyaAbhishek Chorotiya
authored andcommitted
fix: redsys 3ds modal not visible when is_iframe_redirection_enabled is true
1 parent 5d47be7 commit 75060f8

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

src/Redsys3ds.res

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,19 @@ open Utils
22

33
@react.component
44
let 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)

src/Types/HyperLoggerTypes.res

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ type eventName =
9595
| THREE_DS_POPUP_REDIRECTION
9696
| S3_API
9797
| CARD_SCHEME_SELECTION
98+
| REDSYS_3DS
9899

99100
type maskableDetails = Email | CardDetails
100101
type source = Loader | Elements(CardThemeType.mode) | Headless

0 commit comments

Comments
 (0)