0

我在我的网站的 Playstore 中有一个应用程序,它提供每月定期订阅,在我的后端,我既授予该月的高级使用费,又记录了在最后一张收据上到期时间用完时发生另一笔付款的事实,并且我使用https://developers.google.com/android-publisher/api-ref/purchases/subscriptions重新查询 Google 订阅以检查它是否仍然有效

我的网站和应用程序上还有其他付款方式,所以我发现这种方法效果最好。但是最近我注意到我的系统记录的付款与 Google 本身报告的相比太多了。

事实证明,在我重新查询订阅的更新时间,谷歌返回它仍然有效但在 1 天后过期,而不是在 30 天内。我的系统将记录必须已经发生付款,然后在 1 天后再次检查(这一次将给出正确的到期时间),然后再次记录必须在 Google 再次报告付款仍处于活动状态时发生付款。

例如:

  1. 2 月 20 日 - 在应用程序上首次购买,应用程序告诉服务器收据等。30 天后到期。
  2. 3 月 21 日 - 到期时间已到,因此服务器重新检查状态,Google 显示“3 月 22 日到期”。
  3. 3 月 22 日 - 到期时间到了,所以服务器重新检查状态,谷歌说“4 月 21 日到期”(这是它上次应该说的)
  4. 4 月 21 日 - 到期时间已到,因此服务器重新检查状态,Google 再次表示它仅在 1 天后到期,即 4 月 22 日
  5. ETC

我不知道为什么谷歌每月报告一次错误的到期时间。我没有为我的 IAP 订阅设置任何免费天数/试用期。只要谷歌报告了正确的到期时间,我就会正确记录付款。但是,如果到期时间不可靠,我如何判断是否确实发生了付款?

上述API调用返回的订阅资源没有返回最近一次支付的orderId。我找不到将我在服务器端存储的收据与其 purchaseToken 链接到后续续订付款的任何计费信息的方法。

有没有办法将存储在服务器端的收据/购买令牌链接到使用 Google API 发生的实际付款?如何获取最新的 orderId?

4

1 回答 1

1

但是,如果到期时间不可靠,我如何判断是否确实发生了付款?

我正在研究完全相同的问题并有相同的观察结果。似乎即使您没有宽限期,它也会像您将宽限期设置为 1 天一样。

由于您没有宽限期,我的建议是检查新查询的到期时间之前的到期时间(您需要将其存储在某个地方)。

如果相差 1 个月左右,则可以认为付款成功。否则,差异应该在 1 天左右,这是 Google 的优雅逻辑(可能)。

请注意,到期时间的时间会有所不同(即:如果您第一次到期是在3 月 21 日 12:00:00,第二次到期可以在之后,例如4 月 21 日 13:12:32),所以你不应该使用Sharp检查(即 diff == 正好 1 个月)。

这是来自 Google 商家历史记录的示例。日期列大约等于到期时间。

在此处输入图像描述


有没有办法将存储在服务器端的收据/购买令牌链接到使用 Google API 发生的实际付款?如何获取最新的 orderId?

您可以让客户端将orderIDpurchaseToken作为有效负载的一部分发送,然后将它们链接到服务器上。

就目前而言,这似乎是唯一同时具备这两种知识的地方。

于 2016-09-28T04:02:14.457 回答