Stripe一次性Checkout支付成功后如何将Payment Method设为默认
支付方式设为默认的实现方案
用户侧已保存支付方式的Dashboard展示参考:
两个需求都可以通过官方API实现,分两种落地方式:
方案1:Checkout完成后主动调用API设置默认
适合已经上线、不想改动现有Checkout创建逻辑的场景,步骤如下:
- 服务端配置监听
checkout.session.completedWebhook事件,不要依赖前端跳转回调做后续逻辑,前端回调存在丢数、篡改风险,Webhook是唯一可信的服务端数据源 - 解析收到的Webhook事件,从Checkout Session对象中提取两个核心字段:
customer:本次支付关联的客户ID,格式为cus_xxxxxxpayment_method:本次支付使用的支付方式ID,格式为pm_xxxxxx;支付成功且用户同意保存后,该支付方式会自动关联到对应Customer下
- 服务端调用更新Customer接口,将该支付方式设为默认,调用示例:
curl https://api.stripe.com/v1/customers/cus_xxxxxx \ -u 你的Stripe密钥: \ -d "invoice_settings[default_payment_method]"="pm_xxxxxx"
接口返回200即设置成功,客户Dashboard就会出现默认标识,期望效果参考:
方案2:创建Checkout时直接配置,支付成功自动设为默认
适合新开发流程,不需要额外编写Webhook处理逻辑,创建一次性支付模式(mode=payment)的Checkout Session时,传入以下参数即可:
curl https://api.stripe.com/v1/checkout/sessions \ -u 你的Stripe密钥: \ -d "mode"="payment" \ -d "customer"="cus_xxxxxx" \ # 标记支付方式后续可用于离线扣款,触发自动保存逻辑 -d "payment_intent_data[setup_future_usage]"="off_session" \ # 开启支付方式自动保存 -d "saved_payment_method_options[payment_method_save]"="enabled" \ # 开启自动设为默认支付方式 -d "saved_payment_method_options[default_payment_method]"="enabled"
配置完成后,用户走完支付流程,本次使用的支付方式保存后会自动被设为该客户的默认支付方式,无需额外调用接口。
注意事项
- 如果创建Checkout Session时没有传入固定的
customer参数,Stripe会为首次支付的用户新建Customer对象,上述配置依然生效,新Customer的默认支付方式就是本次支付使用的方式 - 如果你还在使用旧版Sources类支付方式(格式为
src_xxxxxx/card_xxxxxx),更新默认支付方式时需要传Customer的default_source字段,新接入场景推荐统一使用PaymentMethod API - 所有携带密钥的API调用必须放在服务端执行,禁止在前端直接调用更新Customer的接口,避免密钥泄露
内容的提问来源于stack exchange,提问作者Danish Sharma
相关产品推荐
相关产品推荐

