如何不发起实际支付即可校验Stripe绑定银行卡是否有效且可正常使用
Stripe银行卡预校验实现方案
你要的提前验卡不需要发起真实扣款,用Stripe的预授权能力即可实现,对用户无感知,具体实现流程如下:
操作步骤
- 首先获取用户待校验的银行卡支付方式ID:如果你的系统已经存储了用户默认绑定的支付方式ID可直接复用,否则调用
stripe.customers.listPaymentMethods接口,指定type: "card"参数即可拉取该用户所有已绑定的银行卡列表。 - 发起预授权请求校验卡片有效性,调用
stripe.paymentIntents.create接口,传入参数示例如下:const paymentIntent = await stripe.paymentIntents.create({ amount: 0, // 部分卡组织不支持0元授权可调整为100(对应1美元/1欧元等,单位为货币最小单位) currency: "usd", // 替换为你的业务对应结算货币 customer: "cus_xxxxxx", // 替换为你持有的用户Stripe customer id payment_method: "pm_xxxxxx", // 替换为待校验的银行卡支付方式ID confirm: true, // 直接发起授权确认 capture_method: "manual", // 标记为手动请款,不会实际扣款 setup_future_usage: "off_session" // 标记后续为离线自动扣款,匹配你预约后扣费的场景 }); - 根据返回结果判断卡片状态:
- 返回的PaymentIntent状态为
requires_capture或succeeded:说明卡片状态正常,可正常发起后续扣款,你可以直接创建预约记录 - 返回状态为
requires_payment_method,或接口抛出卡过期、挂失、余额不足、银行拒付等异常:说明当前卡片不可用,直接提示用户更换新的银行卡即可
- 返回的PaymentIntent状态为
- 校验完成后可主动调用
stripe.paymentIntents.cancel(paymentIntent.id)取消本次预授权,即时释放用户额度,不手动取消的话预授权也会在1-7天内自动过期释放。
重要提示
不要直接通过
stripe.paymentMethods.retrieve接口返回的支付方式状态判断卡片有效性,该状态仅代表卡片绑定时的有效性,后续卡片过期、被银行冻结、挂失等状态变更不会同步更新,只有发起真实的授权请求才能拿到当前最新的可用状态。
内容的提问来源于stack exchange,提问作者ali sufyan
相关产品推荐
相关产品推荐

