首页 > 解决方案 > 谷歌可再生订阅滥用

问题描述

我们有一个在 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
}

没有字段可以给我这条信息

我错过了什么吗?还有另一种方法来验证这一点吗?

标签: in-app-purchasein-app-subscription

解决方案


事实证明,linkedPurchaseToken如果链接的令牌不为空,则该字段可用于此目的,这意味着它仅是重新激活或订阅的升级/降级

如您所见,这不是直接用法,而是您知道的方式。


推荐阅读