PayPal Rest API沙箱环境下订阅Webhook未接收每日账单通知求助
排查PayPal Sandbox中未收到每日账单Webhook通知的问题
我之前也碰到过类似的订阅通知缺失的问题,结合PayPal Sandbox的特性和API实操经验,给你梳理几个核心排查方向和解决思路:
1. 先确认payment_definitions的周期配置是否准确
这是最容易踩坑的点,要确保你的账单周期参数完全匹配“每日生成”的需求:
- 必须把
frequency设为DAY(明确按天周期) frequency_interval要设为1(表示每1天执行一次)- 如果是无限期订阅,
cycles要设为0;如果是固定次数,要填大于1的数值
给你贴一个符合要求的配置示例:
"payment_definitions": [ { "name": "Daily Recurring Plan", "type": "REGULAR", "frequency": "DAY", "frequency_interval": "1", "amount": { "value": "5.00", "currency": "USD" }, "cycles": "0", "charge_models": [] } ]
2. 注意Sandbox环境的账单延迟特性
PayPal Sandbox的定时任务不是实时触发的,每日账单的生成可能会有几小时的延迟,甚至要等到下一个UTC时间节点才会执行。你可以手动触发测试:
- 登录Sandbox商家后台,进入【Subscriptions】找到目标协议
- 点击【Generate Invoice】手动生成账单,然后查看Webhook接收日志,确认是否能收到通知
3. 再次核对Webhook事件订阅的类型
虽然你说订阅了所有事件,但还是要确认是否包含这两个关键的账单相关事件:
BILLING.AGREEMENT.BILLING.CYCLE.COMPLETED(账单周期完成时的通知)PAYMENT.SALE.COMPLETED(账单支付完成后的通知,对应实际账单生成后的支付结果)
建议重新进入Webhook设置页面,取消所有订阅后重新勾选保存,避免界面缓存导致的订阅失效。
4. 检查Webhook接收端点的可用性
确保你的接收服务器满足以下条件:
- 能正常响应PayPal的验证请求(必须返回200 OK)
- 没有防火墙或安全组拦截PayPal Sandbox的IP段
- 服务器日志中没有解析PayPal JSON payload的报错
你可以用PayPal的【Webhook Simulator】模拟发送BILLING.AGREEMENT.BILLING.CYCLE.COMPLETED事件,快速验证端点是否能正常接收。
5. 确认订阅协议的状态为ACTIVE
如果协议状态是PENDING或CANCELLED,PayPal不会生成后续账单。你可以通过API调用GET /v1/payments/billing-agreements/{agreement_id}查看state字段,确保协议处于ACTIVE状态。
内容的提问来源于stack exchange,提问作者Jurgen Cuschieri




