是否可以在发送真实验证请求之前对 Google Play IAP purchaseToken 进行半验证?

Is it possible to semi-verify a Google Play IAP purchaseToken before sending the real verification request?

我的应用程序正在进行应用程序内购买,稍后将相关数据发送到服务器后端以通过服务帐户进行验证并存储以备后用。我注意到后端收到大量带有无效令牌的垃圾邮件购买收据,这些收据均未通过验证请求。我最终提出的大多数请求都注定要失败。

有没有一种方法可以在我费心请求之前验证购买令牌至少可能是合法的?它是否以某种可以检查的方式由 google 签名?我发誓我在实施它时读过一些关于这个主题的东西,但现在找不到任何东西。

如果这是我需要自己实现的东西,那很好,只是想知道是否有其他选择,因为我认为我读过一些关于这个主题的东西。

谢谢!

如您所知,真正 验证购买令牌是否合法的唯一方法是通过 in-app billing API 从后端进行验证。据我所知,没有办法 100% 准确地预验证令牌。但是如果你愿意接受一些误差...

令牌格式

根据我的经验,截至 2016 年 2 月,无效的购买令牌有三种格式:

  • 短令牌:15 位数字,例如。 781871156762279
  • 短令牌:24 个字母字符,例如。
  • 包含两部分的长令牌:24 个字母字符、点 (.) 和格式不正确的第二部分,例如。 xdavcuvdnniwwrhwemleqjdz.rSQozm...
另一方面,

格式正确的 标记是包含两部分的长标记:24 个字母字符、点 (.) 和以开头的第二部分使用 AO-J1O...,例如。 olcgkklnpigiceancikanedj.AO-J1O...

根源性

尝试进行欺诈性购买的用户占所有结账尝试的很大一部分。此外,他们经常尝试多次结账。 几乎所有 这些尝试都来自获得 root 权限的设备。 我坚信拥有获得 Root 权限的设备是每个人的权利,并且拥有获得 Root 权限的设备是有正当理由的。然而,拥有 root 权限似乎也是尝试进行欺诈性购买的必要条件。我使用 this (imperfect) method 来确定设备是否已 root。

结论

我不建议您将所有 root 用户都视为欺诈性黑客。但以我有限的经验,生成格式错误的令牌的 root 设备很可能会收到 "invalid token" 错误。这绝不是一个完美的方法,因为

  • Root 设备也为我生成了有效 令牌
  • Un-rooted 设备为我生成了无效 令牌
  • 最重要的是,我认为 "malformed" 令牌只是在模仿一种过时的令牌格式。随着 Google 更改令牌格式,黑客应用程序的作者也会更改他们的假令牌以匹配该格式。您将不得不紧跟这些发展,并接受一定程度的误报 误报。

有关此问题的更多详细信息,请参阅