Я только что прочитал это: API разработчика Google Play: startTimeMillis обновляется, когда не следует
Но он довольно старый. Может кто-нибудь подтвердить, что он так работает или нет?
Текущая проблема заключается в том, что в нашей системе для других способов оплаты мы создаем собственную подписку. Когда эта подписка заканчивается, мы отменяем подписку, и пользователю больше не разрешается. Если пользователь повторно подпишется позже, это новая подписка для нас.
Однако, если пользователь повторно подпишется, мы получим новый покупной токен, и эта часть будет работать нормально. Но старая подписка должна оставаться неоплачиваемой. Однако, если пользователь подписывается и старый токен снова стал активным, и два разных токена вернут один и тот же результат, это своего рода проблема.
Мы собираемся использовать эту конечную точку: https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get, которая должна иметь следующий результат: https://developers.google.com/android-publisher/api-ref/purchases/subscriptions#resource
Можем ли мы каким-то образом узнать, что старый токен был уже аннулирован, а затем повторно подписан и что нам следует ожидать новую подписку?
Мы смоделировали это, и вот результат:
Это было требование:
Зарегистрировать нового пользователя
Купить подписку
Сохраните поля ответа, чтобы иметь возможность вызывать это в комментариях https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get
Вызвать предыдущую конечную точку и сохранить ответ в комментариях
Отменить подписку
Подождите 1 месяц до истечения срока
Вызовите конечную точку, проверьте, не истек ли срок ее действия, и сохраните ответ.
Подписаться повторно
Вызвать конечную точку со старыми данными, вызвать конечную точку с данными от повторной подписки, сохранить оба ответа в комментариях
Купить первую подписку:
{ "orderId": "GPA.3353-9191-0752-74136", "packageName": "xxx", "productId": "xxx", "purchaseTime": 1526543042663, "purchaseState": 0, "developerPayload": "ee40691d0a3e5f3600df9f35e3346ba7", "signature": "xxx", "purchaseToken": "xxx", "autoRenewing": true }
Ответ Google на первую подписку:
{ "kind": "androidpublisher#subscriptionPurchase", "startTimeMillis": "1526543042663", "expiryTimeMillis": "1526543456810", "autoRenewing": true, "priceCurrencyCode": "GBP", "priceAmountMicros": "11990000", "countryCode": "GB", "developerPayload": "xxx", "paymentState": 1, "orderId": "GPA.3353-9191-0752-74136", "purchaseType": 0 }
Купить вторую подписку:
{ "orderId": "GPA.3348-1559-2255-63309", "packageName": "xxx", "productId": "de.mp.ft.01.test", "purchaseTime": 1526543263033, "purchaseState": 0, "developerPayload": "xxx", "purchaseToken": "mibhepofikjpphaoimomekai.AO-J1Oytkgta2QbLt9lQa7y66eVnqqU1-yjOQJ9B4Sq5Md3Y1OvXJzE-MaazMhAr8gdazydx5sUHTPYg_93mocy37UW8c2M4RFDd0HmbP36lz9HIT7SJmAU", "autoRenewing": true }
Ответ Google на вторую подписку:
{ "kind": "androidpublisher#subscriptionPurchase", "startTimeMillis": "1526543263033", "expiryTimeMillis": "1526543756810", "autoRenewing": true, "priceCurrencyCode": "GBP", "priceAmountMicros": "11990000", "countryCode": "GB", "developerPayload": "xxx", "paymentState": 1, "orderId": "GPA.3348-1559-2255-63309..0", "linkedPurchaseToken": "ldblmpncfnknbgdmojghdkgj.AO-J1Oy6BqXGaqL355JjzOTQrwfzmLPtckmXmQLfgxX-pwVM3iRin81_AiYVUKsg4FX_ojD_MZabwj886prQhI2jjTXiDWjGqYPp5ZJVbGhZwdHQJkyi2WQ", "purchaseType": 0 }
Ответ Google на первую подписку, вызванную в конце потока тестирования (8.)
{ "kind": "androidpublisher#subscriptionPurchase", "startTimeMillis": "1526543042663", "expiryTimeMillis": "1526543336810", "autoRenewing": false, "priceCurrencyCode": "GBP", "priceAmountMicros": "11990000", "countryCode": "GB", "developerPayload": "xxx", "cancelReason": 0, "userCancellationTimeMillis": "1526543175826", "orderId": "GPA.3353-9191-0752-74136", "purchaseType": 0 }
Вывод - исходная подписка (к счастью) не является клоном новой, такие поля, как expiryTimeMillis, не разделяются между этими двумя токенами. Однако верно, что startTimeMillis одинаков для обоих