злоупотребление возобновляемыми подписками Google

у нас есть приложение, которое использует автоматически возобновляемые подписки в Android.

Пользователи обычно подписываются через приложение, и квитанция отправляется для проверки нашего бэкэнда с использованием IAP Google API.

до этого момента все было в порядке, но недавно мы обнаружили лазейку в нашей системе, некоторые пользователи подписываются и отменяют свои подписки и повторно включают автоматическую подписку, таким образом, Google выдает новую квитанцию, которая отправляется на наш сервер, и мы дать им еще один год, это легко решить, предоставив только продолжительность, указанную в квитанции

но потом пользователи начали использовать одну и ту же учетную запись Google с разными учетными записями для наших приложений, и они дают всем бесплатные подписки по сгенерированной квитанции

Я прочитал API здесь и не могу найти ни одного поля, в котором говорилось бы, что эта квитанция является повторной активацией, а не новой подпиской https://developers.google.com/android-publisher/api

когда мы отправляем запрос на 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
}

Нет поля, которое дает мне эту информацию

я что-то упускаю? есть ли другой способ проверить это?


person Hassan Khallouf    schedule 12.08.2018    source источник


Ответы (1)


Оказывается, для этой цели можно использовать поле linkedPurchaseToken, если связанный токен не пуст, это означает, что это только повторная активация или обновление/понижение подписки.

Это не прямое использование, как вы можете видеть, но это то, как вы знаете.

person Hassan Khallouf    schedule 14.08.2018
comment
Я сталкиваюсь с похожей проблемой. Что ты в итоге сделал? Я думаю найти связанный токен и использовать исходный идентификатор транзакции вместо нового идентификатора транзакции, предоставленного Google с новым токеном. Вы не видите проблем с этой логикой? - person jasondinh; 27.12.2020
comment
Я не помню точное решение, которое я выбрал, это было давно, но в основном любая квитанция, которую мы получаем с ненулевым linkedPurchaseToken, игнорируется, например, кто-то подписался на год, отменил, а затем подписался снова, я не тут ничего делать не надо, просто проигнорируйте вторую квитанцию - person Hassan Khallouf; 28.12.2020