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

集成Stripe API后,如何在重定向至成功页时确认支付成功?

解决Stripe支付成功后验证支付状态的方法

Stripe重定向到成功页面时,会在URL中附带session_id参数(基于Checkout Sessions流程),这是验证支付状态的核心依据,以下是两种可靠的验证方式:

方法一:后端查询Checkout Session状态(实时验证)

前端数据易被篡改,必须通过后端完成可信验证:

  • 成功页面加载时,从URL中提取session_id(比如通过window.location.search解析查询参数)
  • 将session_id发送到你的后端接口
  • 后端使用Stripe服务端SDK调用stripe.checkout.sessions.retrieve(session_id)接口
  • 检查返回Session对象的payment_status字段:
    • 若为paid,确认支付成功,可执行更新订单状态、发送确认邮件等操作
    • 若为unpaid或其他状态,说明支付未完成,跳转至失败页面或提示用户

示例Node.js后端代码:

const stripe = require('stripe')('你的Stripe密钥');

app.get('/verify-payment', async (req, res) => {
  const sessionId = req.query.session_id;
  try {
    const session = await stripe.checkout.sessions.retrieve(sessionId);
    if (session.payment_status === 'paid') {
      // 处理支付成功逻辑:更新数据库、发送通知等
      res.json({ success: true, orderId: session.metadata.order_id });
    } else {
      res.json({ success: false, message: '支付未完成' });
    }
  } catch (error) {
    res.status(500).json({ success: false, message: '验证失败' });
  }
});

方法二:使用Stripe Webhooks(异步兜底)

若用户关闭页面或网络异常导致前端未触发验证,Webhooks可确保你收到支付成功通知:

  • 在Stripe后台配置Webhook端点(比如你的后端/stripe-webhook)
  • 勾选checkout.session.completed事件(支付成功时Stripe会主动触发该事件)
  • 后端收到请求后,先验证签名(防止伪造请求),再处理订单状态更新
  • 该方式不依赖前端重定向,即使用户未返回成功页面,也能同步支付状态

示例Node.js后端Webhook验证代码:

const stripe = require('stripe')('你的Stripe密钥');
const endpointSecret = '你的Webhook签名密钥';

app.post('/stripe-webhook', express.raw({type: 'application/json'}), (req, res) => {
  const sig = req.headers['stripe-signature'];
  let event;

  try {
    event = stripe.webhooks.constructEvent(req.body, sig, endpointSecret);
  } catch (err) {
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }

  // 处理支付成功事件
  if (event.type === 'checkout.session.completed') {
    const session = event.data.object;
    console.log('支付成功,关联订单ID:', session.metadata.order_id);
    // 执行更新订单、发送邮件等操作
  }

  res.json({received: true});
});

关键注意事项

  • 禁止仅依赖前端状态判断支付结果,必须通过后端验证,避免恶意伪造支付成功的情况
  • 若使用自定义支付流程(非Checkout),可通过PaymentIntent的status字段验证,调用stripe.paymentIntents.retrieve(paymentIntentId)检查状态是否为succeeded
  • 留存Stripe返回的Session或PaymentIntent对象,作为支付成功的凭证

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:10:31