Stripe confirmCardPayment后如何合规关联新卡至客户?
场景与问题梳理
当前已跑通的业务逻辑:
- 初始绑卡环节:通过
setupIntent为客户保存可复用的卡片,将setupIntent返回的client_secret传递至前端JS,调用confirmCardSetup完成卡片绑定 - 扣款环节:基于客户已存档的卡片创建
paymentIntent发起扣款,若支付被拒绝、状态转为requires_payment_method,会向客户发送邮件,附带卡片录入表单;客户提交新卡信息后,前端JS调用confirmCardPayment完成本次扣款,这部分流程运行正常,扣款要么直接成功,要么进入requires_capture待确认状态
待解决的核心问题与诉求:
- 扣款完成后,客户提交的新卡片不会自动关联到客户档案,客户档案内留存的默认支付方式始终是之前的旧卡片
- 希望为每个客户档案仅保留1张存档卡片,不能同时留存新旧两张卡片
- 此前尝试的先解绑旧卡、再绑定新卡的方案,没有走
setupIntent的绑卡流程,不符合离会话扣款的适配要求——离会话扣款场景下,通过标准setupIntent流程绑定的卡片,在权限校验、合规性上更适配离会话扣款的要求,直接手动绑定的卡片容易在后续离会话扣款时触发权限报错
可落地的合规实现步骤
- 第一步:在
confirmCardPayment返回成功响应时,从响应结构中提取本次扣款实际使用的payment_method唯一ID- 说明:客户通过表单提交的新卡信息,会被生成为独立的
payment_method对象,默认状态为未关联任何客户,必须执行显式关联操作才能归入客户档案
- 说明:客户通过表单提交的新卡信息,会被生成为独立的
- 第二步:调用支付方式关联接口,将第一步提取到的新
payment_method显式绑定到对应客户档案下,请求时必须传入明确的客户ID参数 - 第三步:关联成功后,将这张新的
payment_method设置为客户档案的默认支付方式 - 第四步:解除客户之前存档的旧
payment_method的绑定关系,确保客户档案下仅留存这张新卡 - 操作说明:这个流程不需要重新创建
setupIntent重复走一遍绑卡校验流程——因为confirmCardPayment完成新卡提交的过程,已经完成了卡片有效性校验、必要的3DS身份校验,这个新生成的payment_method本身就完全满足离会话扣款的权限要求,和通过setupIntent绑定的卡片具备完全一致的使用效果,不会因为未走setupIntent流程导致后续离会话扣款失败 - 踩坑提醒:关联新支付方式时,要确认该
payment_method没有被提前绑定到其他客户档案下,否则会触发支付方式与客户不匹配的报错
内容的提问来源于stack exchange,提问作者Jason Galuten
相关产品推荐
相关产品推荐

