如何通过新版PayPal Webhooks获取订阅ID?
获取PayPal Webhook请求中的订阅ID
订阅ID**不在请求元数据(request.META)**里,而是藏在解析后的webhook_event的resource字段中,不同类型的Webhook事件,订阅ID的具体路径略有区别,以下是常见场景的获取方式:
1. 订阅生命周期相关事件
比如BILLING.SUBSCRIPTION.CREATED、BILLING.SUBSCRIPTION.UPDATED、BILLING.SUBSCRIPTION.CANCELLED这类直接和订阅本身相关的事件,订阅ID就是resource对象里的id字段:
webhook_event = json.loads(event_body) event_type = webhook_event["event_type"] if event_type.startswith("BILLING.SUBSCRIPTION."): subscription_id = webhook_event['resource']['id'] print(f"订阅ID: {subscription_id}")
2. 订阅产生的支付/退款事件
如果是订阅触发的支付(如PAYMENT.SALE.COMPLETED)或退款(如PAYMENT.SALE.REFUNDED)事件,订阅ID通常在resource的subscription_id字段(新版API),旧版API可能用billing_agreement_id,可以兼容处理:
webhook_event = json.loads(event_body) event_type = webhook_event["event_type"] if event_type in ["PAYMENT.SALE.COMPLETED", "PAYMENT.SALE.REFUNDED"]: # 优先取新版字段 subscription_id = webhook_event['resource'].get('subscription_id') if not subscription_id: # 兼容旧版字段 subscription_id = webhook_event['resource'].get('billing_agreement_id') if subscription_id: print(f"订阅ID: {subscription_id}") else: print("当前事件未关联订阅")
注意事项
不同事件的resource结构会有差异,你可以根据自己实际监听的事件类型,调整字段路径。如果遇到特殊事件,可以打印完整的webhook_event结构,确认订阅ID的位置。
内容的提问来源于stack exchange,提问作者alpa
相关产品推荐
相关产品推荐

