android - 收到欺诈性 Google Play 订单 ID

标签 android in-app-purchase in-app-billing

我已经为我的 Android 应用实现了应用内结算。

在我的应用程序中购买了一项功能后,我一直在将该采购订单的采购包收集到我的本地服务器。

我不知道出了什么问题或发生了什么,但我在我的本地服务器上观察到一些采购订单,这些订单没有反射(reflect)在商家页面上。

当我在我的服务器上查看采购订单时,我发现了一些奇怪的东西,比如,该采购的订单 ID 被发现为

Order ID  <19 Digit number>.<16 Digit Number>
  say <1234567891234567891>.<1234567891234567>

根据谷歌,

The order number itself is a string consisting of numbers only, with a format assigned and managed by Google.

For transactions dated 5 December 2012 or later, Google payments assigns a Merchant Order Number (rather than a Google Order Number) and reports the Merchant Order Number as the value of orderId. Here's an example:

"orderId" : "GPA.1234-5678-9012-34567"

For transactions dated previous to 5 December 2012, Google checkout assigned a Google Order Number and reported that number as the value of orderId. Here's an example of an orderId holding a Google Order Number:

"orderId" : "556515565155651"

商户页面显示的订单格式如下:

"orderId" : "GPA.1234-5678-9012-34567"

问题:

  1. 非格式的OrderId算欺诈吗?

  2. 如何在欺诈订单的情况下验证实际购买(即订单 ID <19 位数字>。<16 位数字>)?

最佳答案

  1. 是的,无效的 orderId 格式不正常。如果不是欺诈,就是不正当的订单,没有有效收入。
  2. 您以相同的方式验证¹所有购买;结果会告诉您是否可以接受。

请注意:此答案仅基于大约。四年的(订阅)数据,因为具体文档未知。尽管如此,还是出现了一些模式:

  • 有效 token 的长度始终为 144 个字符,在初始 [a-z]{24} 部分之后有一个以点分隔的 119 个字符的 Base64ish 部分,欺诈尝试仅包含(例如eiorsfdmklehiojapofmknoe)。
  • 正确的 orderId 总是看起来像 GPA\.[1-9][0-9]{3}(-[0-9]{4}){3}[0-9] (例如 GPA.3479-1780-0192-98654)。
  • 无效的 orderId 显示格式如 [1-9][0-9]{18}\.[0-9]{16}(例如 2394627089137670234.7256937842057394).

通过这些和这样的规则,您可以严格检查成功案例(应该 >90%),否则执行任何操作组合:

  • 撤销授予的功能
  • 通知您的用户/客户
  • 提醒您的管理员/员工逐个检查这些案例
  • 从这些实例中得出进一步的规则

¹ 要验证购买,有 get for productsget for subscriptions在 Google Play Developer API 的“订阅和应用内购买 API”部分。

关于android - 收到欺诈性 Google Play 订单 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694903/

相关文章:

java - 如何检查 android 库中的可调试或调试构建类型?

android - 运行 Android 应用程序时出现持续问题

android - 为什么要在服务器上验证 Play 商店购买?

Android 应用内购买降级-升级

java - 将java转换为c#的问题

android - Android 中的多线程

android - 使用 Android 的应用内结算执行退款时,IN_APP_NOTIFY 如何工作?

android - 带有gradle产品风格的应用内结算

Android InApp Billing v3,谷歌播放对话框未显示

android - 应用内结算,签名验证失败