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

App Store审核时IAP报SKError.paymentInvalid但沙盒TestFlight正常如何解决

问题排查解决思路

SKError.paymentInvalid错误的本质是苹果服务端判定当前发起购买的产品标识符无效,沙盒、TestFlight环境校验逻辑比App Store生产环境宽松,是该类问题只在审核阶段出现的核心原因,可按照以下顺序排查:

1. 校验App Store Connect内购产品配置

  • 确认所有用到的内购产品状态为已批准,若产品仍处于「准备提交」「元数据待更新」状态,仅能在沙盒/TestFlight环境被识别,生产环境无法拉取
  • 确认提交审核的App版本已在版本详情的「内购项目」栏绑定了所有用到的内购产品,未绑定的产品不会随App版本一同发布,审核阶段无法被拉取
  • 核对代码中传入的产品ID(即item.type的值)与App Store Connect中填写的产品ID完全一致,包括大小写:苹果产品ID大小写敏感,沙盒环境对大小写容错度更高,生产环境会严格校验

2. 校验产品地区售卖权限

苹果审核团队默认使用美区账号测试,若你的内购产品仅配置了中国区等指定地区售卖,美区环境无法拉取到对应产品,会返回该错误。可暂时开启所有地区的售卖权限,或在审核备注中说明测试需要使用指定地区的账号

3. 修复购买发起逻辑缺陷

当前代码的购买逻辑存在不符合苹果规范的问题:苹果要求发起购买前必须先通过SKProductsRequest拉取到合法的SKProduct对象,再用该对象发起购买,禁止直接传入产品ID字符串发起购买。你当前的逻辑只有在购买报错时才调用retrieveProductInfo()拉取产品信息,沙盒/TestFlight对该违规操作容错度高,生产环境会直接判定无效。
修复方案:
在进入商品购买页之前就提前拉取所有在售商品的SKProduct对象并缓存,购买时直接传入缓存的SKProduct对象发起购买,不要直接传产品ID字符串调用purchaseProduct方法

4. 依赖库版本校验

检查当前使用的SwiftyStoreKit是否为最新稳定版,部分旧版本的SwiftyStoreKit存在直接传ID发起购买时生产环境校验失败的已知bug,升级到最新版本即可解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:39:03