When a failed payment is actually a timeout
FPX and some e-wallet hops leave the app waiting. Labelling every unanswered hop as a shopper quit hides the bank-side clock you cannot see.
FPX and several e-wallet hops put the shopper in another app or a bank page. That other party has a clock you do not control. When the clock ends, your checkout may receive nothing, a generic failure, or a late success. Labelling all of those as “failed payment” hides the timeout, and timeouts have different remedies from issuer declines.
An issuer decline can sometimes be explained with a code. A timeout cannot be fixed by asking the shopper for another card they do not have. It might be fixed by a longer wait state, a resume deep link, or simply by recording that the bank never answered so finance does not treat it as a refusal.
In diagnosis work we ask for the raw gateway message, not the copy shown on screen. Screen copy is often flattened to “payment unsuccessful” by a designer who was not invited to the timeout conversation. The raw message still distinguishes a clock from a refusal more often than teams expect.
If you added DuitNow or a wallet recently and conversion “fell,” check whether you created a new hop without a timeout state before you rebuild the whole funnel. That narrower check is what a drop-off diagnosis is for.