Запрос Google IAP Subscriptions с сервера возвращает неправильное время истечения срока действия, как связать квитанцию ​​​​с фактическими платежами?

У меня есть приложение в магазине игр для моего веб-сайта, которое предлагает ежемесячную периодическую подписку, и на моем бэкэнде я одновременно предоставляю этот месяц премиум-использования и фиксирую тот факт, что другой платеж произошел всякий раз, когда истекает время истечения срока действия последней квитанции и Я повторно запрашиваю подписку Google, чтобы убедиться, что она все еще активна, используя https://developers.google.com/android-publisher/api-ref/purchases/subscriptions

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

Оказалось, что во время продления, когда я повторно запрашивал подписку, Google возвращал, что она все еще активна, но срок ее действия истек через 1 день, а не через ~ 30 дней. Моя система будет записывать, что платеж должен был быть совершен, а затем снова проверять через 1 день (что на этот раз даст правильное время истечения срока действия), а затем снова записывать, что платеж должен был быть совершен, когда Google снова сообщает, что он все еще активен.

Например:

  1. 20 февраля — первоначальная покупка в приложении, приложение сообщает серверу о квитанции и т. д. Срок действия истекает через 30 дней.
  2. 21 марта — срок действия истек, поэтому сервер повторно проверяет статус, и Google говорит, что «срок действия истекает 22 марта».
  3. 22 марта — время истечения истекло, поэтому сервер перепроверяет статус, и Google говорит «срок действия истекает 21 апреля» (это то, что он должен был сказать в прошлый раз).
  4. 21 апреля - срок действия истек, поэтому сервер повторно проверяет статус, и Google СНОВА говорит, что срок действия истекает только через 1 день, 22 апреля.
  5. так далее

Я в недоумении, почему Google сообщает о неправильном времени истечения срока действия один раз в месяц. У меня нет бесплатных дней/пробного периода для моей подписки IAP. Если бы Google сообщал о правильном времени истечения срока действия, я бы правильно регистрировал платежи. Но если время истечения срока действия не является надежным, как я могу определить, действительно ли был совершен платеж?

Ресурс подписок, возвращенный вышеуказанным вызовом API, не возвращает orderId самого последнего платежа. Я не могу найти способ связать квитанцию, которую я сохранил на стороне сервера, с ее PurchaseToken, с любой платежной информацией о последующих платежах за продление.

Есть ли способ связать чек/purchaseToken, хранящийся на стороне сервера, с фактическими платежами, которые происходят с использованием API Google? Как я могу получить самые последние идентификаторы заказов?


person Esaptonor    schedule 09.06.2016    source источник
comment
Есть ли у вас льготный период для вашего набора продуктов по подписке?   -  person Marc Greenstock    schedule 14.06.2016
comment
Нет, не боюсь, поэтому такое поведение было таким неожиданным.   -  person Esaptonor    schedule 16.06.2016


Ответы (1)


Но если время истечения срока действия не является надежным, как я могу определить, действительно ли был совершен платеж?

Я работаю над точно такой же проблемой и имею такое же наблюдение. Кажется, что даже если у вас нет льготного периода, он будет вести себя так, как будто вы установили льготный период на 1 день.

Поскольку у вас нет льготного периода, я предлагаю сравнить вновь запрошенное время истечения срока действия с предыдущим временем истечения срока действия (вам нужно где-то сохранить его).

Если он отличается примерно на 1 месяц, то можно считать, что платеж прошел успешно. В противном случае разница должна составлять около 1 дня, и это работает логика благодати Google (вероятно).

Обратите внимание, что время истечения срока действия варьируется (например, если первое истечение срока действия приходится на 21 марта в 12:00:00, второе истечение может быть после< /strong>, например 21 апреля 13:12:32), поэтому не следует использовать точную проверку (т. е. diff == ровно 1 месяц).

Вот пример из истории продавца Google. Столбец Дата примерно равен сроку действия.

введите здесь описание изображения


Есть ли способ связать чек/purchaseToken, хранящийся на стороне сервера, с фактическими платежами, которые происходят с использованием API Google? Как я могу получить самые последние идентификаторы заказов?

Вы можете заставить клиента отправлять как orderID, так и purchaseToken как часть полезной нагрузки, а затем связать их на сервере.

На данный момент это, кажется, единственное место, где известно и то, и другое.

person exklamationmark    schedule 28.09.2016