in-app-purchase - 谷歌可再生订阅滥用
问题描述
我们有一个在 android 中利用自动更新订阅的应用程序。
用户将通过应用程序正常订阅,并将收据发送给我们的后端,以使用 IAP Google API 进行验证。
到目前为止一切都很好,但是我们最近发现了我们系统中的一个漏洞,一些用户订阅并取消了他们的订阅并重新启用了自动订阅,这样谷歌就会发出一个新的收据发送到我们的后端,我们是再给他们一年,这很容易通过授予收据中给出的唯一期限来解决
但随后用户开始使用相同的谷歌账户和不同的账户来使用我们的应用程序,他们通过生成的收据为每个人提供免费订阅
我在这里阅读了 API,但找不到任何字段告诉我们此收据只是重新激活而不是新订阅 https://developers.google.com/android-publisher/api-ref/purchases/订阅
当我们向 google api 发送请求以获取信息时,这就是我们得到的:
status_from_google_play
{
"autoRenewing": true,
"cancelReason": null,
"countryCode": "SA",
"developerPayload": "",
"expiryTimeMillis": "1534073485784",
"kind": "androidpublisher#subscriptionPurchase",
"linkedPurchaseToken": "sometoken",
"orderId": "GPA.xxxx-xxxx-xxxx-xxxxx",
"paymentState": 1,
"priceAmountMicros": "290000",
"priceCurrencyCode": "SAR",
"purchaseType": 0,
"startTimeMillis": "1534071687580",
"userCancellationTimeMillis": null
}
没有字段可以给我这条信息
我错过了什么吗?还有另一种方法来验证这一点吗?
解决方案
事实证明,linkedPurchaseToken
如果链接的令牌不为空,则该字段可用于此目的,这意味着它仅是重新激活或订阅的升级/降级。
如您所见,这不是直接用法,而是您知道的方式。
推荐阅读
- java - 使用带有 keyStore.load 的 HttpClient 的 java.io.EOFException 发生异常
- amazon-s3 - 来自 s3 存储桶的 m3u8 扩展文件的签名 url
- typescript - 覆盖接口中可选的继承嵌套属性
- c - 我可以使用联合来表达一个结构和多个打包成员吗?
- c# - 使用 IText 7 生成一个包含从 html 转换的多页的 pdf 文档
- hive - 如何将配置单元表放在复杂的嵌套 XML 文件上
- java - 如何在 OpenLiberty 的 server.xml 配置属性文字/变量中使用自定义转换器?
- java - 中止 jenkin 构建不会杀死 Maven 项目类型的安全子进程
- excel - Excel 代码会产生不同的结果,具体取决于我是单步执行代码还是让它运行
- php - 仅当管理员手动输入订单时才向客户禁用电子邮件通知