我已经为我的 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"
问题:
非格式的OrderId算欺诈吗?
如何在欺诈订单的情况下验证实际购买(即订单 ID <19 位数字>。<16 位数字>)?
最佳答案
- 是的,无效的 orderId 格式不正常。如果不是欺诈,就是不正当的订单,没有有效收入。
- 您以相同的方式验证¹所有购买;结果会告诉您是否可以接受。
请注意:此答案仅基于大约。四年的(订阅)数据,因为具体文档未知。尽管如此,还是出现了一些模式:
- 有效 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 products和 get
for subscriptions在 Google Play Developer API 的“订阅和应用内购买 API”部分。
关于android - 收到欺诈性 Google Play 订单 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38694903/