如何仅传入订单总价创建Stripe Checkout Session无需提前在Stripe录入商品
实现方案说明
完全可以实现无需提前在Stripe后台录入商品,仅传入订单总价即可创建Checkout Session的需求,Stripe原生支持自定义临时商品的支付创建模式,不需要和Stripe侧的商品库做绑定。
核心实现逻辑
创建Checkout Session时,不需要在line_items参数中传入Stripe后台预生成的价格ID,而是直接传入price_data字段,在该字段内自定义本次支付对应的商品信息、金额即可,参考Node.js示例代码如下:
const session = await stripe.checkout.sessions.create({ payment_method_types: ['card'], mode: 'payment', success_url: 'https://你的商城域名/支付成功回调页?session_id={CHECKOUT_SESSION_ID}', cancel_url: 'https://你的商城域名/支付取消页', line_items: [ { price_data: { currency: 'cny', // 可根据你的业务需求更换对应货币单位 product_data: { name: '商城订单合计', // 也可传入自定义的订单号、商品组合名称等信息 }, unit_amount: 19900, // 对应订单总价的最小货币单位,例:199元人民币需填19900(Stripe默认以分为单位) }, quantity: 1, } ], });
支付成功后业务流程对接
支付完成后可以选择两种方式触发后续业务逻辑:
- 前端跳转
success_url时,获取URL携带的session_id参数,调用Stripe接口查询对应Session的支付状态,若状态为paid即可执行自有订单系统的状态更新、发货等后续流程 - 更安全的方案是配置Stripe webhook监听
checkout.session.completed事件,Stripe会主动推送支付成功的通知到你的服务端接口,校验通知签名合法后即可执行后续业务逻辑,该方式可以避免前端伪造支付成功状态的问题
如果是做支付模拟测试,直接使用Stripe官方测试卡号4242 4242 4242 4242,有效期填任意未来时间,CVV填任意3位数字即可模拟支付成功场景,不会产生真实资金流动。
注意事项
- 该模式下所有商品定价、库存校验逻辑完全由你自有数据库控制,不需要做两边商品数据同步,适合小型项目快速上线
- 传入金额时务必转换为对应货币的最小单位,比如人民币、美元默认以分为单位,日元以元为最小单位,避免金额计算错误
- 如果订单包含多个商品,也可在
line_items中传入多个price_data条目,分别填写每个商品的名称、单价、数量,Stripe会自动汇总总金额,无需你手动计算求和
内容的提问来源于stack exchange,提问作者Mario Dietrich
相关产品推荐
相关产品推荐

