Stripe Payment Intent API服务端提交示例及预支付校验相关咨询
针对Stripe Payment Intent API服务端提交模式的解答
首先明确结论:Payment Intent API完全支持服务端先执行自定义校验逻辑再发起支付的模式,无需强制依赖前端jQuery提交,和你之前使用Charge API的开发流程是兼容的。
官方文档给出的前端jQuery调用payWithCard的示例仅为最简演示场景,仅适用于无额外业务校验需求的简单支付场景,生产环境绝大多数业务都采用服务端校验后再确认支付的方案,符合Stripe的安全和规范要求。
标准实现流程
- 前端使用Stripe Elements/Stripe.js收集卡片信息,生成不包含敏感卡数据的
payment_methodID,将该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
相关产品推荐
相关产品推荐

