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

如何对账Stripe Checkout Session与Payment Intent及判断支付成功?

确认Stripe Checkout支付成功及对账方案

一、如何确认用户完成支付

你创建Checkout Session时拿不到Payment Intent ID没关系,核心靠Stripe Webhook事件确认支付状态,这是Stripe官方认可的可靠方式:

  • 监听checkout.session.completed事件:用户完成支付流程(跳转回成功页之前),Stripe会主动推送这个事件到你的Webhook端点。事件payload里的session.payment_intent字段就是对应Payment Intent ID,同时session.payment_status会显示为paid(即时付款场景)或unpaid(授权后付款场景,比如订阅)。
  • 额外监听payment_intent.succeeded事件:单次即时付款场景下,这个事件会和checkout.session.completed先后触发,双重确认支付成功更稳妥;授权付款场景中,后续实际扣款时会触发该事件。

注意:绝对不要只依赖前端成功页面跳转判断支付状态——用户可能中途关闭页面、篡改前端参数,只有Webhook事件是Stripe服务器主动推送的可信来源。

二、Checkout Session与Payment Intent的对账方法

对账的关键是把Stripe的两个对象和你的内部订单系统关联,步骤如下:

  1. 创建Session时绑定内部订单ID
    调用checkout.sessions.create接口时,务必通过metadata字段带上你的内部订单ID,方便后续关联业务数据:
# 示例(Python)
stripe.checkout.Session.create(
  payment_method_types=['card'],
  line_items=[{'price': 'price_xxx', 'quantity': 1}],
  mode='payment',
  success_url='https://your-domain.com/success',
  cancel_url='https://your-domain.com/cancel',
  metadata={'order_id': 'ORD-20240501-001'}  # 你的内部订单ID
)
  1. 处理Webhook时关联三方数据
    收到checkout.session.completed或payment_intent.succeeded事件时,把以下信息存储到数据库:
  • 内部订单ID(从metadata中提取)
  • Checkout Session ID(事件中的id字段)
  • Payment Intent ID(session.payment_intent或payment_intent.id)
  • 支付金额、币种、状态等关键信息
  1. 定期对账流程
  • 从Stripe后台导出Payment Intent交易记录,或用API调用payment_intents.list批量获取所有成功支付的记录。
  • 以Payment Intent ID为匹配键,和数据库中的订单支付记录核对:检查金额是否一致、支付状态是否匹配、关联的Session ID是否对应。
  • 处理异常:如果出现checkout.session.completed但payment_intent.succeeded未触发的情况,大概率是支付授权成功但未实际扣款(比如预授权场景),需到Stripe后台查看该Payment Intent的详细状态跟进。

内容的提问来源于stack exchange,提问作者JohnDoe123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:58:32