У меня есть приложение в магазине игр для моего веб-сайта, которое предлагает ежемесячную периодическую подписку, и на моем бэкэнде я одновременно предоставляю этот месяц премиум-использования и фиксирую тот факт, что другой платеж произошел всякий раз, когда истекает время истечения срока действия последней квитанции и Я повторно запрашиваю подписку Google, чтобы убедиться, что она все еще активна, используя https://developers.google.com/android-publisher/api-ref/purchases/subscriptions
На моем веб-сайте и в приложениях есть и другие формы оплаты, поэтому я считаю, что этот подход работает лучше всего. Однако недавно я заметил, что моя система зарегистрировала слишком много платежей по сравнению с тем, что сообщил сам Google.
Оказалось, что во время продления, когда я повторно запрашивал подписку, Google возвращал, что она все еще активна, но срок ее действия истек через 1 день, а не через ~ 30 дней. Моя система будет записывать, что платеж должен был быть совершен, а затем снова проверять через 1 день (что на этот раз даст правильное время истечения срока действия), а затем снова записывать, что платеж должен был быть совершен, когда Google снова сообщает, что он все еще активен.
Например:
- 20 февраля — первоначальная покупка в приложении, приложение сообщает серверу о квитанции и т. д. Срок действия истекает через 30 дней.
- 21 марта — срок действия истек, поэтому сервер повторно проверяет статус, и Google говорит, что «срок действия истекает 22 марта».
- 22 марта — время истечения истекло, поэтому сервер перепроверяет статус, и Google говорит «срок действия истекает 21 апреля» (это то, что он должен был сказать в прошлый раз).
- 21 апреля - срок действия истек, поэтому сервер повторно проверяет статус, и Google СНОВА говорит, что срок действия истекает только через 1 день, 22 апреля.
- так далее
Я в недоумении, почему Google сообщает о неправильном времени истечения срока действия один раз в месяц. У меня нет бесплатных дней/пробного периода для моей подписки IAP. Если бы Google сообщал о правильном времени истечения срока действия, я бы правильно регистрировал платежи. Но если время истечения срока действия не является надежным, как я могу определить, действительно ли был совершен платеж?
Ресурс подписок, возвращенный вышеуказанным вызовом API, не возвращает orderId самого последнего платежа. Я не могу найти способ связать квитанцию, которую я сохранил на стороне сервера, с ее PurchaseToken, с любой платежной информацией о последующих платежах за продление.
Есть ли способ связать чек/purchaseToken, хранящийся на стороне сервера, с фактическими платежами, которые происходят с использованием API Google? Как я могу получить самые последние идентификаторы заказов?