Android应用内结算退款

时间:2012-07-11 12:11:02

标签: android in-app-purchase in-app-billing

这是我第一次在Android应用中实现应用内结算,并且我从guideline直接获取了大部分代码,所有内容都完全忘记,直到我想到退款。示例应用程序已经实施了退款,但是以一种奇怪的方式!退款是在应用程序上收到的,但退款状态完全可以理解,但原始来源如下:

        // Count the number of times the product was purchased
        while (cursor.moveToNext()) {
            int stateIndex = cursor.getInt(2);
            PurchaseState state = PurchaseState.valueOf(stateIndex);
            // Note that a refunded purchase is treated as a purchase. Such
            // a friendly refund policy is nice for the user.
            if (state == PurchaseState.PURCHASED || state == PurchaseState.REFUNDED) {
                quantity += 1;
            }
        }

        // Update the "purchased items" table
        updatePurchasedItem(productId, quantity);

它的添加项目,即使它被退还,我不知道为什么会这样?退款项目是否有特殊ID或我缺少什么?我只用测试产品试过这个,所以我不知道。

如果数量为0似乎完全正确,则

updatePurchasedItem方法从表中删除条目,因此我将代码更改为此

        while (cursor.moveToNext()) {
            int stateIndex = cursor.getInt(2);
            PurchaseState state = PurchaseState.valueOf(stateIndex);
            // Note that a refunded purchase is treated as a purchase. Such
            // a friendly refund policy is nice for the user.
            if(Consts.DEBUG)
                Log.v(TAG, state == PurchaseState.PURCHASED ? "purchase" : "refund");

            if (state == PurchaseState.PURCHASED) {
                quantity += 1;
            } else if(state == PurchaseState.REFUNDED) {
                quantity = 0;
            }
        }

        // Update the "purchased items" table
        updatePurchasedItem(productId, quantity);

但是我怀疑示例应用程序中会出现错误的代码,所以我完全不确定我是否做得对!

我应该如何处理?请帮帮我!

1 个答案:

答案 0 :(得分:5)

历史记录表每次购买只有一个条目。这意味着退款后的购买将在退款后获得状态为“退款”的产品的单一历史记录。

在计算购买时,“退款”状态表明该商品已被购买。 然后由开发人员决定用户是否应该访问退款产品。 (这个网站上有一个例子,想要退还已经捐款的人购买的商品,并希望他们继续使用该商品。)

如果您不想要退款,您应该更改代码以添加购买数量,但不做任何退款。 (不要将数量设置为零)。

在应用程序产品中有3个品种:

  1. 托管项目:Google不允许多次购买此类产品。总数量可以加起来为零或一个。

  2. 非托管项目:用户可以多次购买此类产品。总数量可以是零或更多

  3. 订阅:与托管项目相同。