You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PayPal订阅场景下,PAYMENT.SALE.COMPLETED能否传递plan_id与custom_id?

PayPal Webhook 事件参数与订阅关联方案

核心参数归属问题

  • PAYMENT.SALE.COMPLETED 事件不会直接返回plan_id和custom_id,这两个字段仅在BILLING.SUBSCRIPTION.*系列事件(如BILLING.SUBSCRIPTION.CREATED、BILLING.SUBSCRIPTION.PAYMENT.COMPLETED等)中携带。

自动计费场景的数据库更新方案

不用纠结PAYMENT.SALE.COMPLETED,结合订阅专属事件处理更可靠:

  1. 先通过BILLING.SUBSCRIPTION.CREATED记录关联关系
    • 用户首次订阅时,该事件会返回plan_id、custom_id(你前端设置的用户标识)和关键的subscription_id。
    • 把这三个值关联存入数据库,比如建一张subscriptions表,字段包含subscription_id、user_id(对应custom_id)、plan_id等。
  2. 用BILLING.SUBSCRIPTION.PAYMENT.COMPLETED处理自动扣款更新
    • 订阅周期扣款成功后,PayPal会触发这个事件,且携带subscription_id。
    • 通过subscription_id直接从数据库查询对应的用户和计划信息,完成数据库更新(比如更新最后支付时间、延长会员有效期)。
    • 这个事件完全贴合订阅场景,比PAYMENT.SALE.COMPLETED更直接高效。

试用期无法测试的解决办法

如果当前环境没法触发实际支付事件:

  • 用PayPal开发者后台的沙盒环境,模拟订阅全流程,包括试用期结束后的自动扣款,以此测试所有事件的参数返回。
  • 暂时用BILLING.SUBSCRIPTION.ACTIVATED过渡,当订阅从试用期转为正式计费时会触发该事件,同样能拿到subscription_id关联用户。

若必须使用PAYMENT.SALE.COMPLETED的关联方式

如果一定要依赖这个事件,可通过以下步骤关联:

  • 事件返回的parent_payment字段是支付ID,调用PayPal支付详情API(GET /v1/payments/payment/{payment_id}),从结果中提取subscription_id,再通过它关联到用户和计划。
  • 这种方法需要额外API调用,不如订阅专属事件高效,仅作为备选方案。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:47:06