android - Google 应用内购买始终会获得退款
问题描述
我对谷歌应用内购买有一些问题。所有收到的付款将在 72 小时后退还。我的付款代码有错误吗?我自己付了钱,没有要求任何退款,但即使是在 72 小时后退款。
private void setupBilling() {
mBillingClient = BillingClient.newBuilder(MainActivity.this).setListener(this).enablePendingPurchases().build();
mBillingClient.startConnection(new BillingClientStateListener() {
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
final List<String> skuList = new ArrayList<> ();
skuList.add("remove_ads");
final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> list) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && list != null) {
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(list.get(0))
.build();
mBillingClient.launchBillingFlow(MainActivity.this, flowParams);
}
}
});
}else{
Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onBillingServiceDisconnected() {
Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> list) {
if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
&& list != null) {
for (Purchase purchase : list) {
if(purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED){
Toast.makeText(MainActivity.this, purchase.getSku() + " ok", Toast.LENGTH_SHORT).show();
}
}
} else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
Toast.makeText(this, "İptal edildi", Toast.LENGTH_SHORT).show();
} else if(billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
Toast.makeText(this, "alreadry owned", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
}
}
解决方案
您似乎没有正确确认购买。
如果您使用 Google Play 结算库 2.0 版或更高版本,则必须在三天内确认所有购买。未能正确确认购买会导致这些购买被退款。
您可以在文档中找到更多详细信息:https ://developer.android.com/google/play/billing/billing_library_overview#acknowledge
BillingClient client = ...
AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = ...
void handlePurchase(Purchase purchase) {
if (purchase.getPurchaseState() == PurchaseState.PURCHASED) {
// Grant entitlement to the user.
...
// Acknowledge the purchase if it hasn't already been acknowledged.
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
client.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
}
}
}
推荐阅读
- jsonpath - How to concatenate constant string with jsonpath
- javascript - How to keep cookies values saved in angular 2
- three.js - How to make camera update on zoom
- c++ - 具有重载 << 运算符的简单模板类失败,“模板 ID 的使用无效”
- ruby-on-rails - Error Running IRB from Terminal on Mac - Can't find gem
- javascript - 如何在 webpack 配置中包含和使用 DefinePlugin?
- php - How does laravel know the unread notifications i not see any difference in the notifications table?
- javascript - 如何减少div的前z-index?
- c - C程序中的奇怪行为,分配内存后变量损坏
- php - 使用 cURL 在 api 中拒绝承载授权