簡體   English   中英

Android 應用內計費 - 如何處理退款

[英]Android in-app billing - How to handle refunds

我正在嘗試在我的應用程序中實施應用程序內計費,除了退款之外,一切都很好。 在過去的幾天里,我一直在反對這一點,如果用戶要求退款,似乎無法從應用程序方面知道。 我希望能夠在用戶獲得退款后撤銷對一次性托管產品(刪除廣告)的訪問權限。 我沒有使用后端,所以我依賴 Google Play API。

我嘗試的是使用queryPurchaseHistoryAsync查詢 Google Play API,它返回用戶最近購買的列表。 這似乎不起作用,因為在要求退款后購買仍然存在(在寫這篇文章之前已經等待了一天)。

這是我所做的:

  1. 在真實設備上安裝應用程序
  2. 購買應用內內容
  3. 驗證應用是否解鎖了內容
  4. Go 到我的 Google Play 訂單歷史記錄並要求為應用內產品退款
  5. 10 分鍾后,交易被退回(完全沒有我作為開發人員參與)
  6. 應用仍然提供付費內容
  7. 清理 Play 商店應用數據和緩存
  8. 應用仍然提供付費內容

所以任何用戶都可以購買我的應用內產品,然后立即 go 到他的 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;
  }

我在這里沒有看到任何與退款相關的內容,在我看來這是一個非常正常的用例,所以我仍然認為我缺少一些關鍵信息,我該怎么做?

謝謝你的幫助

問題

即使用戶進行了退款並實際獲得了退款,任何進行的購買仍將被記錄。 當您(開發者/應用所有者)為應用內產品發出退款/撤銷請求時也是如此。

唯一的區別是購買的"purchaseState" Google 的計費庫的問題在於,它們在對PENDNGPURCHASED state 的 purchase.getPurchaseState() 調用中掩蓋了這個“purchaseState”值。 見反編譯代碼:

public int getPurchaseState() {
    switch(this.zzc.optInt("purchaseState", 1)) {
    case 4:
        return 2; // PENDING
    default:
        return 1; // PURCHASED
    }
}

當您有一個應用內產品退款state時,它的 state 相當 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;
}

硬解

谷歌似乎剛剛做了這件事,以推動您執行此解決方案。 使用作廢的購買 API提供與用戶已作廢的購買相關的訂單列表。 根據他們的文件...

可以通過以下方式取消購買:

  • 用戶要求為他們的訂單退款。 用戶取消他們的訂單。
  • 訂單被退回。
  • 開發商取消或退款訂單。 注意:只有撤銷的訂單才會顯示在 Voided Purchases API 中。
  • 如果開發者在沒有設置撤銷選項的情況下退款,訂單將不會顯示在 API 中。
  • Google 取消或退款訂單。

但是,此解決方案目前不能作為 Java android 庫提供,您將不得不發出服務器請求並使用 Google Play 開發人員 API。

簡單的解決方案似乎不再起作用 - 您只會獲得已購買狀態,而沒有其他任何東西。 有人對此問題有任何最新的解決方案嗎? 在我看來,如果您不符合使用無效購買 API 的購買條件,那么買家可以簡單地購買產品並退款,然后像購買一樣繼續使用。 肯定有許多應用程序面臨完全相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM