我知道这是一个老问题,但我一直在寻找同样问题的答案,最终得出了我自己的结论。谷歌没有详细说明,但我相信他们希望您根据自己的逻辑来决定如何处理取消和退款的购买。要记住的另一点是,消耗品和非消耗品托管产品之间基本上没有区别。所有被管理的产品都是消耗品。
对我来说,当用户取消购买,或者我决定给用户退款时,我想要发生的事情是 1)用户收到退款,2)用户无法访问付费功能,3)用户可以选择再次购买该功能。
我所做的是使用应用内计费 API 在我的后端服务器上检查购买的购买状态。如果返回的 purchaseState 是 1(已取消)或 2(已退款),我会在我的应用程序中消费该购买。Google 处理第 1 项,将用户的钱退还给用户。我的应用程序中的逻辑处理 2,锁定对付费功能的访问。消费购买手柄 3,让用户可以选择再次购买该功能。
它的基本要点是,当购买被发送到我的后端服务器进行验证时,我会检查购买状态。如果购买状态是 1 或 2,我会向我的应用程序返回一个适当的代码。当我的应用程序收到指示购买已取消或退款的代码时,我的应用程序会消费该购买。
我使用 API 的 PHP 版本,所以我获取购买状态的简化代码是:
$purchases = $service->purchases_products->get($packageName, $productId, $purchaseToken);
$purchaseState = $purchases->getPurchaseState();
if($purchaseState === 1){
$serverResponseCode = 3;
}
if($purchaseState === 2){
$serverResponseCode = 4;
}
...然后在我的应用程序中,我检查服务器响应代码。
if(serverResponseCode == 3 || serverResponseCode ==4 ){
lockFeatures();
ConsumeParams params = ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build();
billingClient.consumeAsync(params, listener);
}
我希望这可以帮助其他人寻找这个问题的答案。