Подписки Google IAP

Я только что прочитал это: 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

Можем ли мы каким-то образом узнать, что старый токен был уже аннулирован, а затем повторно подписан и что нам следует ожидать новую подписку?

2
0
404
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Мы смоделировали это, и вот результат:

Это было требование:

Зарегистрировать нового пользователя

Купить подписку

Сохраните поля ответа, чтобы иметь возможность вызывать это в комментариях 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 одинаков для обоих

Другие вопросы по теме