测试Apple自动续订订阅时未收到webhook续订通知的问题排查
我之前也碰到过一模一样的情况,盯着服务器日志等半天没动静,折腾了好一阵才找到问题所在。给你列几个必须排查的关键配置点:
确认沙箱环境的Webhook配置是否正确
别只在App Store Connect里配置了生产环境的Webhook!设置Webhook时,一定要勾选**沙箱(Sandbox)**环境,同时开启对应的订阅事件——尤其是DID_RENEW(续订完成)事件。另外,沙箱环境只接受HTTPS的回调地址,本地测试的话得用ngrok这类工具把你的API转成HTTPS,HTTP地址会直接被Apple忽略。检查沙箱测试账号的订阅状态
去App Store Connect的「用户与访问」→「沙箱测试员」里,查看你用的测试账号的订阅状态。有时候测试账号会陷入异常状态,建议换一个新的测试账号试试,或者在测试员详情页重置该账号的订阅状态。验证Webhook的事件订阅类型
听起来简单,但一定要确认你勾选了自动续订订阅相关的事件,特别是DID_RENEW。如果只勾了INITIAL_BUY(首次购买),那肯定收不到续订回调。另外,别跳过Apple的签名验证——沙箱环境和生产环境一样会严格验证签名,要是你的API拒绝了签名无效的请求,Apple可能会停止重试。按照Apple文档实现签名验证逻辑,这步不能省。留意沙箱环境的续订时间规则
官方文档说1个月订阅在沙箱里5分钟后续订,但偶尔会有延迟,最多可能等10分钟左右。如果超过15分钟还没收到回调,那肯定是配置出问题了。另外不同时长的订阅测试周期不一样:3个月订阅是10分钟后续订,6个月是15分钟,别搞混了对应的测试时间。检查服务器的网络与安全配置
你的服务器必须允许来自Apple沙箱服务器的IP请求(IP范围可以在App Store Connect的Webhook文档里找到),确保防火墙、CDN或者安全组没拦截这些IP。还有,Apple要求服务器在3秒内返回200 OK响应,要是响应超时,Apple会标记请求失败,几次重试后就不再发送了。利用App Store Connect的Webhook日志排查
这是最高效的排查方法!在App Store Connect的「App信息」→「Webhooks」里,找到你配置的Webhook,点击「查看历史记录」,这里能看到Apple发送的所有请求的状态码、响应时间和错误详情。如果有失败的请求,这里会明确告诉你原因——比如签名无效、地址不可达、超时等等。
内容的提问来源于stack exchange,提问作者muhihsan

