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

Stripe Payment Intent API服务端提交示例及预支付校验相关咨询

针对Stripe Payment Intent API服务端提交模式的解答

首先明确结论:Payment Intent API完全支持服务端先执行自定义校验逻辑再发起支付的模式,无需强制依赖前端jQuery提交,和你之前使用Charge API的开发流程是兼容的。

官方文档给出的前端jQuery调用payWithCard的示例仅为最简演示场景,仅适用于无额外业务校验需求的简单支付场景,生产环境绝大多数业务都采用服务端校验后再确认支付的方案,符合Stripe的安全和规范要求。

标准实现流程

  • 前端使用Stripe Elements/Stripe.js收集卡片信息,生成不包含敏感卡数据的payment_method ID,将该ID和对应订单信息提交到你的服务端接口
  • 服务端先执行所有自定义业务校验:包括但不限于库存校验、订单金额合法性校验、用户权益校验、防重复提交校验、风控规则校验等,所有校验通过后再调用Stripe服务端SDK的Payment Intent相关接口
  • 若校验不通过,直接返回前端错误提示即可,无需调用Stripe接口

服务端核心代码示例(Node.js环境)

// 引入Stripe服务端SDK,密钥使用服务端私钥
const stripe = require('stripe')('sk_test_你的Stripe服务端密钥');

// 你的支付接口处理逻辑
async function handlePaymentRequest(req, res) {
  const { paymentMethodId, orderId, userId } = req.body;

  // 第一步:执行所有自定义校验逻辑
  const customValidationResult = await runYourCustomValidation(orderId, userId, paymentMethodId);
  if (!customValidationResult.pass) {
    return res.status(400).json({ error: customValidationResult.errorMsg });
  }

  // 校验通过后,创建并确认Payment Intent
  try {
    const paymentIntent = await stripe.paymentIntents.create({
      amount: customValidationResult.orderAmount, // 校验后的订单金额,单位为对应货币的最小单位(如人民币为分)
      currency: 'cny',
      payment_method: paymentMethodId,
      confirm: true, // 直接确认支付,无需后续再调用确认接口
      return_url: 'https://你的网站域名/支付成功回调页', // 涉及3DS验证时必填
      automatic_payment_methods: {
        enabled: true,
      }
    });

    // 支付成功处理逻辑
    return res.json({ success: true, paymentIntent: paymentIntent.id });
  } catch (error) {
    // 处理Stripe返回的支付错误,比如卡余额不足、3DS验证要求等
    return res.status(400).json({ error: error.message });
  }
}

注意事项

  • 不要在前端向服务端传输原始银行卡号、CVV、有效期等敏感卡信息,所有卡敏感数据必须通过Stripe官方前端组件生成payment_method后仅传递ID,避免触犯PCI合规要求
  • 若支付流程需要跳转银行侧3DS验证,你需要在前端处理服务端返回的跳转地址,引导用户完成验证后再获取最终支付结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:18:03