首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Inapp计费:错误响应:7:测试事务已经拥有的项问题

Inapp计费:错误响应:7:测试事务已经拥有的项问题
EN

Stack Overflow用户
提问于 2017-07-07 17:40:07
回答 1查看 2.5K关注 0票数 1

第一次实现应用程序内计费。我能够完成第一次交易,但是第二次购买相同的商品时我得到了的“错误反应:7:项目已经拥有”方法上的,如何使它能够重新购买?任何帮助都将不胜感激。

还附加了代码结构的屏幕截图。

点击购买,我调用以下方法: initilizeInAppPurchasePakages();

代码语言:javascript
复制
 public void initilizeInAppPurchasePakages()
    {
        String base64EncodedPublicKey=getString(R.string.inAppBillingKey);
        mHelper = new IabHelper(getActivity(), base64EncodedPublicKey);
        mPurchaseFinishedListener
                = new IabHelper.OnIabPurchaseFinishedListener() {
            public void onIabPurchaseFinished(IabResult result, Purchase purchase)
            {
                if (result.isFailure()) {
                    Log.d(TAG, "Error purchasing: " + result);
               //     Toast.makeText(getActivity(),"fail to purchase"+result, Toast.LENGTH_SHORT).show();
                    return;
                }
                else if (purchase.getSku().equals(purchaseItemId)) {
                    transactionId=purchase.getOrderId();
                    PackageFragment.isNeedToUpdate = true;
                    // consume the gas and update the UI
                   // Toast.makeText(getActivity(), "purchase successfully", Toast.LENGTH_SHORT).show();
                    mHelper.consumeAsync(purchase,
                            mConsumeFinishedListener);
                }
                else if (purchase.getSku().equals(purchaseItemId)) {
                    // give user access to premium content and update the UI
                   // Toast.makeText(getActivity(), "purchase successfully", Toast.LENGTH_SHORT).show();
                }
            }
        };


        mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
            public void onIabSetupFinished(IabResult result) {
                if (!result.isSuccess()) {
                    // Oh no, there was a problem.
                   // Toast.makeText(getActivity(), "connection Error", Toast.LENGTH_SHORT).show();
                }
                else
                {
                 //   Toast.makeText(getActivity(), "connected successfully", Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "Problem setting up In-app Billing: " + result);
                    mHelper.launchPurchaseFlow(getActivity(), purchaseItemId, 10001,
                            mPurchaseFinishedListener, "testing");

                }
                // Hooray, IAB is fully set up!
            }
        });
         mConsumeFinishedListener =
                new IabHelper.OnConsumeFinishedListener() {
                    public void onConsumeFinished(Purchase purchase, IabResult result) {
                        if (result.isSuccess()) {
                            serverUtilities.savePayment(pakageId,pakagePrice,transactionId);
                          //  Toast.makeText(getActivity(), "consumed", Toast.LENGTH_SHORT).show();
                            // provision the in-app purchase to the user
                            // (for example, credit 50 gold coins to player's character)
                        }
                        else {

                            // handle error
                        }
                    }
                };
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 14:15:44

好的,

在阅读了google在应用程序计费中的文档之后,我发现我需要通过测试来测试应用程序计费,所以我做了些什么。

测试计费:

代码语言:javascript
复制
mHelper.launchPurchaseFlow(getActivity(), purchaseItemIdSKU, 10001,
                            mPurchaseFinishedListener, "testing");

只调用第一次删除我在上面使用的测试计费行上已经购买的条目记录: ArrayList skusToBeListed = null;

代码语言:javascript
复制
                skusToBeListed = new ArrayList<String> ();
                skusToBeListed.add (SKU_PREMIUM);
                skusToBeListed.add (SKU_PREMIUM_ELITE);
                skusToBeListed.add (SKU_PREMIUM_PLUS);

MHelper.queryInventoryAsync(真,skusToBeListed,mGotInventoryListener);

一旦完成,您就可以在没有头痛的情况下进行许多测试预订。

代码语言:javascript
复制
 mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
            @Override
            public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
                if (result.isFailure()) {
                    //complain("Failed to query inventory: " + result);
                    return;
                }

                Purchase currentPurchase = inventory.getPurchase(purchaseItemIdSKU);
                if(currentPurchase != null)
                {
                    //Boolean  mIsPremium = (currentPurchase != null && verifyDeveloperPayload(currentPurchase));
                                       mHelper.consumeAsync(currentPurchase,mConsumeFinishedListener);

                }





        }
    } ;

注意:如果测试计费事务id将不被返回,那么请确保如何处理,我测试了我在应用程序中的计费,将其硬编码为以下格式:"GPA.1234-5678-9012-34567"

总之,如果我在生产模式上使用它,那么上面的代码是很好的,但是在测试模式下,它给了我错误,我解释了这些错误,并给出了解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44976757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档