退款客户应用内购买,但 BillingClient 仍然显示用户已购买?

Posted

技术标签:

【中文标题】退款客户应用内购买,但 BillingClient 仍然显示用户已购买?【英文标题】:Refund customer in-app purchase but BillingClient still indicate user has purchased? 【发布时间】:2019-10-28 21:17:24 【问题描述】:

我正在使用以下BillingClient

implementation 'com.android.billingclient:billing:1.2.2'

虽然我已经按以下方式退款了

但我仍然收到来自BillingClient.queryPurchases的以下回复


  "orderId": "GPA.3352-2555-5719-25534",
  "packageName": "com.yocto.wenote",
  "productId": "note_list_promo",
  "purchaseTime": 1560501011137,
  "purchaseState": 0,
  "purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF"


根据BillingClient.queryPurchases的文档

获取在您的应用中购买的所有商品的购买详情。这 方法使用 Google Play 商店应用程序的缓存而不启动 网络请求。

这可能是原因。我尝试使用另一个功能 - queryPurchaseHistoryAsync 也无济于事。根据文档

返回用户为每个 SKU 进行的最近购买,即使 如果该购买已过期、取消或消费。

对于queryPurchaseHistoryAsync,没有purchaseState表示后面的购买被取消了!


  "productId": "note_list_promo",
  "purchaseToken": "djjneabakdaenkjafajbbclo.AO-J1OzbDNn5WkobYbSqLNzoBokm1F552-CqzfLQuNXK69bhxC-TnOTqdPV1RCl9T2okpSWfRD9RrE0eFhSN8glUbsOM5XUBDRnm_yK2Ohq_uyNuU17i1dc3CBhdeEn9uZCIfD3zY4tF",
  "purchaseTime": 1560501011137,
  "developerPayload": null


Google 确实应该提供queryPurchases 的非缓存版本。

知道我做错了什么吗?在我发放退款后,我不希望用户继续使用付费功能。

【问题讨论】:

【参考方案1】:

我们通过以下方式清除缓存

private static void clearGooglePlayStoreBillingCacheIfPossible(BillingClient billingClient) 
    billingClient.queryPurchaseHistoryAsync(SkuType.INAPP, (responseCode, purchasesList) -> 
    );

    billingClient.queryPurchaseHistoryAsync(SkuType.SUBS, (responseCode, purchasesList) -> 
    );

之后,我们会照常拨打BillingClient.queryPurchases

请注意,此类缓存清除不会立即发生。清除缓存可能需要长达 24 小时。奇怪的是,这个重要的要求没有以任何方式记录下来。

【讨论】:

它是如何工作的?你只需拨打queryPurchaseHistoryAsync 两次......然后? 目的是触发缓存清除,以便BillingClient.queryPurchases 将返回正确的值。但是,缓存清除不会立即发生。它可能会延迟长达 24 小时。 这不是“清除”。您只需异步调用相同的函数。这样做没有任何目的,因为它什么都不做。从queryPurchases 购买的东西在一段时间后由于其他原因而被删除,而没有调用这个绝对没有意义的代码。 没有。它不会。我们在现场制作中运行,我们知道queryPurchases 的当前行为。这是一个已知问题 - github.com/googlesamples/android-play-billing/issues/…

以上是关于退款客户应用内购买,但 BillingClient 仍然显示用户已购买?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中取消或退款已购买的消耗品应用内购买?

Google 应用内购买始终会获得退款

无法接收应用内购买退款服务器到服务器通知

Flutter 应用内购买,检查退款

Amazon Live Testing 工具中的应用内购买退款

已退款的应用内购买订阅是不是显示为已过期? [关闭]