iOS内购审核失败排查:测试正常但审核时进入.fail状态
我之前踩过完全一样的坑——自己用个人账号、沙箱账号测内购全程顺畅,一提交审核就触发.fail状态,结合苹果官方的反馈,核心问题基本都出在服务器端的收据验证逻辑上,给你梳理下关键的排查和修复方向:
具体而言,您的应用无法完成内购操作并弹出错误提示,请参考附件截图。后续步骤:在服务器验证收据时,服务器需支持处理生产签名应用从苹果获取收据的场景……
核心排查与修复点
务必区分沙箱与生产环境的验证端点
很多开发者测试阶段只对接了沙箱验证地址https://sandbox.itunes.apple.com/verifyReceipt,但审核时苹果使用的是生产签名的App,会生成生产环境的收据。如果服务器还把生产收据往沙箱地址发验证请求,必然会失败。建议让服务器根据收据返回的状态码自动切换端点:比如收到状态码21007(收据是沙箱的但发去了生产验证)就切换到沙箱地址,收到21008就切换到生产地址https://buy.itunes.apple.com/verifyReceipt。检查生产收据的解析逻辑
生产环境的收据签名规则和沙箱有细微差异,别只针对沙箱收据做了解析适配。确保服务器能正确解析生产签名的收据内容,尤其是签名验证部分。模拟审核环境复现问题
你可以用Xcode导出生产签名的IPA包,把测试设备添加到开发者账号的设备列表后安装这个包,然后用真实的Apple ID(非沙箱账号)测试内购——这个场景和审核时苹果的测试环境几乎一致,能帮你快速复现问题。排查服务器网络权限
部分服务器的防火墙会屏蔽苹果生产验证地址的请求,要确认服务器能正常访问https://buy.itunes.apple.com/verifyReceipt,没有被防火墙或者安全策略拦截。
如果还是卡壳,建议把服务器验证收据时的请求、响应日志都打出来,苹果返回的状态码能直接定位问题根源,比如21002表示收据格式错误,21005表示服务器暂时无法验证等。
内容的提问来源于stack exchange,提问作者Anton

