petsHero-AI/docs/google_pay_product_not_found.md
2026-03-12 14:30:19 +08:00

4.0 KiB
Raw Blame History

谷歌支付「系统无法找到您要购买的商品」排查

应用内购时提示「系统无法找到您要购买的商品」,而 Play 后台已配置商品,常见原因如下。


1. 商品 ID 不一致(最常见)

  • 来源:客户端请求的商品 ID 来自接口 getGooglePayActivities 返回的 helm(产品代码),即 ActivityItem.code
  • 要求:该 ID 必须与 Google Play Console 里「创收」→「应用内商品」中配置的 产品 ID 完全一致(区分大小写、无多余空格)。
  • 排查
    • 看日志:[GooglePlayPurchase] 谷歌支付请求商品 ID(helm): "xxx"notFoundIDs=xxx
    • 在 Play Console 打开对应应用 → 创收 → 应用内商品,对照「产品 ID」是否与日志里的 productId 一字不差。
  • 处理:要么改后台/接口返回的 helm 与 Play 产品 ID 一致,要么在 Play 后台新建/修改产品,使产品 ID 与 helm 一致。

2. 应用未上架到任意版本轨道

  • 应用必须至少发布到 内部测试 / 封闭测试 / 开放测试 / 生产 中的一条轨道,应用内商品才会对设备可见。
  • 排查Play Console → 发布 → 查看是否有版本在任一轨道上。
  • 处理:上传 AAB 并发布到至少「内部测试」轨道;用于测试的账号需加入该轨道的测试人员名单。

3. 应用签名与 Play 不一致

  • 设备上的应用必须用与 Play 登记一致的签名(或已加入「应用签名」的上传密钥)签名,否则 Play 不会返回该应用的商品。
  • 排查
    • 正式包:是否用 Play 后台「应用签名」里显示的签名(或已登记的上传密钥)签名。
    • 调试包:若用 debug 签名测试,需在 Play Console 把 SHA-1或 SHA-256 加入该应用的「许可证测试」或使用同一签名。
  • 处理:使用与 Play 一致的 keystore 打 release 包;调试时确保测试设备上的签名已被 Play 接受(或使用内部测试并加入测试账号)。

4. 商品未激活或未保存

  • Play 后台新建的应用内商品需 激活保存,否则不会出现在查询结果中。
  • 排查:创收 → 应用内商品 → 对应商品状态是否为「已激活」。
  • 处理:保存并激活商品,等待一段时间(通常几分钟到几小时)再试。

5. 地区 / 账号

  • 商品可能仅在某些国家/地区提供;设备上的 Google 账号所在地区可能不在支持范围内。
  • 测试账号需有权限:内部测试等需将账号加入测试人员列表。
  • 排查:设备 Google 账号地区、是否在测试名单内。
  • 处理:在 Play Console 为商品勾选对应国家/地区;用已加入测试的账号登录设备。

6. 后端返回的 helm 与 Play 产品 ID 的映射

  • 若后端 getGooglePayActivities 返回的 helm 是内部编码(例如活动 ID而不是 Play 的「产品 ID」就会导致查不到商品。
  • 处理:确保 helm 字段就是该商品在 Play Console 里配置的「产品 ID」如有映射表需在服务端把活动/内部 ID 映射成真实的 Play 产品 ID 再填入 helm。

快速核对清单

检查项 说明
产品 ID 一致 日志中的 productId 与 Play「应用内商品」→「产品 ID」完全一致
应用已发布 至少一条轨道(如内部测试)有版本
签名一致 安装包签名与 Play 应用签名/上传密钥一致
商品已激活 应用内商品已保存并激活
测试账号 使用已加入测试的 Google 账号、账号地区在商品支持范围内

本应用中的日志

  • 发起购买时会打日志:[GooglePlayPurchase] 谷歌支付请求商品 ID(helm): "xxx"
  • 若商品未找到会打:商品未找到: 请求的 productId="xxx", notFoundIDs=[xxx]
  • 根据上述 productId 与 notFoundIDs 到 Play 后台逐项对照「产品 ID」即可定位是否 ID 不一致。