取消 2016 年 6 月 20 日之后 Google 次 Play IAB 测试购买的订单

Cancelling orders on Google Play IAB test purchases after June 20, 2016

我一直在使用 Google Play 应用内购买 (IAP),但最近(2016 年 6 月 20 日)。他们更新了 Payments Merchant Center,以便不再显示测试购买。我引用最近发给开发者的一封电子邮件:

"Previously, test purchases for one-time IAPs generated order IDs. Starting June 20, 2016, one-time IAPs will not generate order IDs and will not appear in the Merchant Center."

我在 link 中没有找到有关购买(不是订阅)的信息: https://developer.android.com/google/play/billing/billing_testing.html 该页面有一个 "Canceling completed test purchases" 仅对订阅发表评论。

我的问题是,如果测试购买没有出现在 Payments Merchant Center 中,我应该在哪里取消测试购买?

更新- Google 支持的官方回答:

感谢您联系 Google Play 开发者支持。 我查了一下,Play开发者控制台目前不支持取消测试IAP。唯一的方法是要么消耗 IAP,要么等待 14 天的消耗时间。

更新 2- 感谢 Mike 在下面的回答,我插入了下面的代码:

Purchase premiumPurchase = inventory.getPurchase(Constants.SKU_PRO);
if (premiumPurchase != null) {
    App.mHelper.consumeAsync(premiumPurchase, new IabHelper.OnConsumeFinishedListener() {
        @Override
        public void onConsumeFinished(Purchase purchase, IabResult result) {
            Log.d(TAG, "Test purchase is consumed.");
        }
    });
}

我只运行这个代码取消测试购买,重新调试完整的购买流程。

我从 Android 开发者网站得到的是,如果是测试购买,他们会阻止购买流程到达您必须支付的地步。它使它变得更容易,因为 Google 确保您不会为测试购买付费。它会在 14 天内停止它们。要执行此操作的帐户需要您可以从开发人员控制台激活的测试许可证。

因此您不必取消它们,因为从技术上讲您从未购买过任何东西,同时您可以测试购买某物时会发生什么。但是商户中心始终没有收到请求。

编辑:

如果您要尝试直接取消并查看会发生什么,请进行真正的购买并取消。

取消应用内购买的最简单方法是消费它。如果您使用 Google 提供的 IabHelper,您只需调用 consumeAsync 并传入 Purchase。我维护了一个功能来消费应用程序的所有应用程序内产品;这本质上是一个用于测试的计费重置功能。

我迟到了这个问题,但这是从 Google refund/cancel 应用内购买的最新方式。在您 Google Play 控制台的左侧菜单中,有一个名为“订单管理”的菜单项。这会在底部显示一个带有蓝色退款按钮的订单摘要。单击此,select 退款原因并提交。

Explanation on official docs

这是一个最新的 Kotlin 代码,它将消耗您所有的购买,以便您可以再次购买。小心不要在生产代码中使用它,因为这样做肯定会产生不良行为。

显然,您必须提前购买。

fun consumeAllTestPurchases(purchases: ArrayList<Purchase>) {
    purchases.value?.forEach {
        val consumeParams = ConsumeParams.newBuilder().setPurchaseToken(it.purchaseToken).build()
        billingClient.consumeAsync(consumeParams) { billingResult, _ ->
            if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
                var purchaseConsumed = true
            }
        }
    }
}

如果您使用与 TrivialDriveKotlin 类似的方式,我 post 在此 post

中提供了一个实用的答案