移动端Stripe 3DS2认证流程实现疑问(后端主导模式)
解决方案:后端主导流程下的Stripe 3DS2认证实现
核心思路
要保持后端主导支付流程、移动端仅调用API不集成Stripe SDK,3DS2认证可通过Stripe生成的托管认证页面完成:后端收到payment_intent.requires_action事件后,提取认证跳转链接返回给移动端,移动端用WebView打开该链接完成认证,全程无需移动端接入Stripe SDK。
关键步骤(已切换为on-session支付前提)
后端创建并确认PaymentIntent
创建时必须设置confirm: true(on-session支付标识),绑定已保存的PaymentMethod和Customer,同时指定认证完成后的跳转地址:const stripe = require('stripe')('sk_test_xxx'); const paymentIntent = await stripe.paymentIntents.create({ amount: 1000, // 单位:最小货币单位(如10美元=1000美分) currency: 'usd', customer: 'cus_xxx', // 已绑定PaymentMethod的用户Customer ID payment_method: 'pm_xxx', // 用户已保存的PaymentMethod ID confirm: true, // 开启on-session支付 setup_future_usage: 'off_session', // 可选:若后续需离线支付,提前标记 return_url: 'https://your-backend.com/payment-callback', // 支持后端API或移动端Deep Link(如yourapp://payment-result) use_stripe_sdk: false, // 强制生成跳转链接,而非依赖SDK处理 });后端处理3DS2认证触发事件
通过WebHook监听payment_intent.requires_action事件,提取Stripe生成的认证跳转链接并推送给移动端:// WebHook事件处理逻辑 if (event.type === 'payment_intent.requires_action') { const paymentIntent = event.data.object; const authRedirectUrl = paymentIntent.next_action.redirect_to_url.url; // 通过API接口或推送通知将链接返回给移动端 notifyMobileApp(paymentIntent.id, authRedirectUrl); }移动端处理认证流程
- 收到后端返回的链接后,打开内置WebView加载认证页面
- 用户在WebView完成3DS2身份验证(如验证码、指纹识别等)
- 认证完成后,Stripe自动跳转至设置的
return_url:- 若为后端API:后端通过WebHook确认支付状态后,通知移动端结果
- 若为移动端Deep Link:移动端监听链接,主动调用后端API查询最终支付状态
注意事项
- 严格使用on-session支付:off-session模式不支持3DS认证,
confirm: true是核心前提 - WebHook配置完整:需监听
payment_intent.succeeded、payment_intent.failed等事件,及时更新订单状态 - WebView兼容性:需开启JavaScript支持,否则3DS2认证页面无法正常交互
- 结果校验:移动端不能仅依赖跳转判断支付结果,必须调用后端API确认最终状态,避免网络异常导致的状态不一致
内容的提问来源于stack exchange,提问作者derek z
相关产品推荐
相关产品推荐

