如何通过PayPal REST API保存信用卡,实现后续及自动支付?
PayPal 长期支付方式存储与自动支付解决方案
为什么你之前的Vault Token会失效
PayPal Vault里的Payment Tokens是短期临时凭证(有效期通常不超过72小时,官方未公开具体时长),本来就不是用来长期存储的。要实现长期复用支付方式,得用专门的长期授权方案。
针对你的需求的可行方案
方案1:参考交易(Reference Transactions)—— 非定期不定额场景首选
这是PayPal为非固定周期、非固定金额的重复支付量身设计的方案,完全符合你的自动支付+自有UI需求:
- 前提:需要给你的PayPal企业账户申请开通参考交易权限(提交业务场景说明就能审批,一般1-3工作日)。
- 操作流程:
- 首次引导用户通过PayPal Hosted Fields(可嵌入你自有UI的支付组件)完成授权,拿到长期有效的
billing_agreement_id。 - 后续不管是手动触发发票支付,还是自动扣款,直接调用
/v2/payments/orders接口,在请求体里带上这个billing_agreement_id,就能直接完成扣款,全程不用跳PayPal。
- 首次引导用户通过PayPal Hosted Fields(可嵌入你自有UI的支付组件)完成授权,拿到长期有效的
方案2:Vault长期支付方式 + Orders API —— 无需额外权限
如果暂时拿不到参考交易权限,用这个组合也能实现需求:
- 操作流程:
- 首次支付时,通过Hosted Fields让用户输入卡片信息并授权,调用
/v2/vault/payment-methods创建长期有效的payment_method_id(这个ID只要用户不取消授权、卡片没过期就一直有效)。 - 把
payment_method_id存在你的数据库里,前端可以脱敏展示已保存的支付方式(比如****1234)。 - 后续支付(手动/自动)时,调用
/v2/checkout/orders创建订单,在payment_source字段指定payment_method_id,再调用/v2/checkout/orders/{order_id}/capture完成扣款,全程无跳转。
- 首次支付时,通过Hosted Fields让用户输入卡片信息并授权,调用
需求适配说明
- 手动支付发票:保存好
billing_agreement_id或payment_method_id,用户在你的UI里选择已保存的支付方式,后台直接调用扣款API即可。 - 非定期不定额自动支付:当系统生成发票时,后台自动触发扣款请求,不用用户操作,完全在自有系统内完成。
重要提醒
- 绝对不能直接存储用户信用卡明文,必须用PayPal的Hosted Fields等合规组件获取授权,避免违反PCI合规要求。
- 定期通过
/v2/vault/payment-methods/{payment_method_id}查询支付方式状态,及时处理卡片过期、用户取消授权等情况。
内容的提问来源于stack exchange,提问作者Matt James
相关产品推荐
相关产品推荐

