Fra*_*oni 12 android in-app-billing refund
我正在尝试在我的应用程序中实现应用程序内计费,除了退款之外,一切都很好。过去几天我一直在反对这个问题,如果用户要求退款,似乎无法从应用程序方面知道这一点,这似乎令人难以置信。我希望能够在用户获得退款后撤销对一次性托管产品的访问权限(删除广告)。我没有使用后端,所以我依赖于 Google Play API。
我尝试过的是查询 Google Play API,queryPurchaseHistoryAsync它返回用户最近购买的列表。这似乎不起作用,因为在要求退款后购买的东西仍然存在(在写这篇文章之前等了一天)。
这是我所做的:
那么任何用户都可以购买我的应用内产品,然后立即转到他的 Google Play 页面并要求退款?是我遗漏了一些明显的东西还是这个 API 是一场噩梦?
该PurchaseState枚举是
public @interface PurchaseState {
// Purchase with unknown state.
int UNSPECIFIED_STATE = 0;
// Purchase is completed.
int PURCHASED = 1;
// Purchase is waiting for payment completion.
int PENDING = 2;
}
Run Code Online (Sandbox Code Playgroud)
我在这里没有看到与退款相关的任何内容,这在我看来是一个非常正常的用例,所以我仍然认为我缺少一些关键信息,我该怎么做?
谢谢你的帮助
即使用户退款并实际获得退款,任何购买仍会被记录。当您(开发者/应用所有者)针对应用内商品发出退款/撤销请求时,情况也是如此。
唯一的区别是购买的"purchaseState"。Google Billing Library 的问题在于,他们将 purchase.getPurchaseState() 调用中的“purchaseState”值屏蔽为PENDNG或PURCHASED状态。在反编译代码中看到:
public int getPurchaseState() {
switch(this.zzc.optInt("purchaseState", 1)) {
case 4:
return 2; // PENDING
default:
return 1; // PURCHASED
}
}
Run Code Online (Sandbox Code Playgroud)
当您的应用内商品处于已退款状态时,其状态为 UNSPECIFIED_STATE,如上面的代码所示,它被屏蔽为 PURCHASED。
要解决这个问题,只需忽略库的 purchase.getPurchaseState() 方法,而是使用您自己的未屏蔽自定义:
int getUnmaskedPurchaseState(Purchase purchase) {
int purchaseState = purchase.getPurchaseState();
try {
purchaseState = new JSONObject(purchase.getOriginalJson()).optInt("purchaseState", 0);
} catch (JSONException e) {
e.printStackTrace();
}
return purchaseState;
}
Run Code Online (Sandbox Code Playgroud)
似乎谷歌刚刚做了那个蒙面来推动你做这个解决方案。使用 Voided Purchases API提供与用户已作废的购买相关的订单列表。根据他们的文档...
可以通过以下方式取消购买:
- 用户为其订单申请退款。用户取消订单。
- 一个订单被扣款。
- 开发商取消或退款订单。注意:只有撤销的订单才会显示在 Voided Purchases API 中。
- 如果开发者在没有设置撤销选项的情况下退款,则订单将不会显示在 API 中。
- Google 取消或退款订单。
但是,此解决方案目前不能作为 Java android 库使用,您必须改为发出服务器请求,并使用 Google Play Developer API。
| 归档时间: |
|
| 查看次数: |
2145 次 |
| 最近记录: |