You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:13:20