Flutter中如何检测Payment Intent支付完成状态?
Flutter Stripe Payment Sheet 支付状态检测与购物车清空方案
一、客户端直接通过 presentPaymentSheet 的执行结果判断支付状态
presentPaymentSheet() 是异步方法,支付成功时会正常执行完成,支付失败(比如用户取消操作、银行卡被拒绝)时会抛出异常。你可以用 try-catch 包裹这个方法,在对应分支处理业务逻辑:
// 初始化PaymentSheet后调用presentPaymentSheet try { await Stripe.instance.presentPaymentSheet(); // 支付成功:调用你的清空购物车API await clearUserCartAPI(); // 可选:给用户显示支付成功提示,比如弹窗或SnackBar } catch (e) { // 支付失败:处理错误情况 if (e is StripeException) { // 处理Stripe官方错误,比如用户取消支付、卡信息无效等 print('支付失败原因:${e.error.localizedMessage}'); // 可以给用户显示对应的错误提示 } else { // 处理其他未知错误 print('支付过程出错:$e'); } }
二、结合后端Webhook做安全校验(推荐)
客户端的成功回调只能作为前端即时反馈的依据,不能完全信任(比如极端情况:客户端被篡改、网络延迟导致支付实际未完成但前端误以为成功)。更安全的方式是配合后端Webhook:
- 后端配置Stripe Webhook,监听
payment_intent.succeeded事件 - 后端收到事件后,先验证Stripe的事件签名(防止伪造请求)
- 验证通过后,找到对应用户的购物车,执行清空操作
- 客户端支付成功后,可以调用后端接口查询支付最终状态,或者通过推送通知同步状态,再更新前端购物车
补充说明
在 customFlow: false 的配置下,PaymentSheet的流程完全由Stripe SDK处理,没有额外的事件回调方法,try-catch 是客户端判断支付状态的标准方式。作为非专业开发者,可以先从客户端 try-catch 的方式入手满足基础需求,后续如果需要更高的安全性,再补充后端Webhook的逻辑。
内容的提问来源于stack exchange,提问作者Quoc Duong
相关产品推荐
相关产品推荐

