创建Stripe checkout会话时如何保存客户付款方式以供后续使用?
解决方案
你不需要切换到mode=setup,在mode=payment的Checkout Session中直接添加参数即可实现「完成本次收款的同时保存客户付款方式」的需求,操作如下:
核心修改
在创建Checkout Session的参数中新增payment_intent_data.setup_future_usage字段,可选值为on_session或off_session:
on_session:适合后续付款需要客户在场确认的场景off_session:适合后续可以无需客户在场直接自动扣款的场景
修改后的代码示例:
await stripe.checkout.sessions.create({ line_items: [ { price_data: { unit_amount: 433, currency: "usd", product_data: { name: "" } }, quantity: 1, } ], cancel_url: "", success_url: "", customer: customerID, mode: STRIPE_SESSION_MODE.PAYMENT, payment_method_types: ["card"], // 新增这一段即可 payment_intent_data: { setup_future_usage: "off_session" // 按你的业务需求替换对应值即可 } });
后续获取保存的付款方式
当客户完成支付后,该付款方式会自动关联到你传入的customerID对应的Stripe客户账户下,你可以通过两种方式拿到付款方式ID:
- 在
success_url跳转时携带Checkout Session ID,调用Stripe接口查询Session详情,从关联的Payment Intent中获取payment_method字段值 - 配置webhook监听
checkout.session.completed事件,直接从事件返回数据中提取已保存的付款方式ID
注意事项
- 你代码中已经传入了
customer参数,这是保存付款方式的必要前提,不需要额外调整 - 传入上述参数后,Stripe支付表单会自动向客户展示「保存付款方式用于后续交易」的相关提示,符合合规要求
内容的提问来源于stack exchange,提问作者markWanka
相关产品推荐
相关产品推荐

