我正在使用当前的购买代码来调用购买意图

Bundle buyIntentBundle = mService.getBuyIntent(3, pContext.getPackageName(), "android.test.canceled", "inapp", "bGoa+V7g/yqDXv");
Set<String> allKeys = buyIntentBundle.keySet();
Object  responseCode= buyIntentBundle.get("RESPONSE_CODE");
Object  intent= buyIntentBundle.get("BUY_INTENT");
Log.i(TAG,"buyIntentBundle"+buyIntentBundle.keySet()+"responseCode"+responseCode+"intent"+intent);
PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");
if (pendingIntent != null) {
    pContext.startIntentSenderForResult(pendingIntent.getIntentSender(), 2013, new Intent(), Integer.valueOf(0), Integer.valueOf(0),Integer.valueOf(0));
}

现在我正在检查onActivityResult
if (requestCode == 2013) {
    Log.i(TAG, "onactivity result called inside request code");
    int responseCode = intent.getIntExtra("RESPONSE_CODE", 0);
    String purchaseData = intent.getStringExtra("INAPP_PURCHASE_DATA");
    String dataSignature = intent.getStringExtra("INAPP_DATA_SIGNATURE");
    if (responseCode == Constants.BILLING_RESPONSE_RESULT_OK) {
    try {
        JSONObject jo = new JSONObject(purchaseData);
        String sku = jo.getString("productId");
        Toast.makeText(pContext, "You have bought the " + sku + ". Excellent choice, adventurer!", Toast.LENGTH_SHORT);
        JSONObject o = new JSONObject(purchaseData);
        String mOrderId = o.optString("orderId");
        String mPackageName = o.optString("packageName");
        String mSku = o.optString("productId");
        long mPurchaseTime = o.optLong("purchaseTime");
        int mPurchaseState = o.optInt("purchaseState");
        String mDeveloperPayload = o.optString("developerPayload");
        String mToken = o.optString("token", o.optString("purchaseToken"));
        try {
            mService.consumePurchase(3, pContext.getPackageName(), mToken);
        } catch (RemoteException e) {
                    e.printStackTrace();
        }//consumePurchase
    }
    catch (JSONException e) {
                Toast.makeText(pContext, "Failed to parse purchase data.", Toast.LENGTH_SHORT);
                e.printStackTrace();
    }
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_USER_CANCELED) {
         Toast.makeText(pContext, "User cancelled purchase.", Toast.LENGTH_SHORT);
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE) {
         Toast.makeText(pContext, "Your Device doesn't support inapp billing.", Toast.LENGTH_SHORT);
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE) {
         Toast.makeText(pContext, "Item is not available for billing.", Toast.LENGTH_SHORT);
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_DEVELOPER_ERROR) {
         Toast.makeText(pContext, "Can't purchase item due to some developer error.", Toast.LENGTH_SHORT);
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_ERROR) {
         Toast.makeText(pContext, "Can't purchase item due to some error in response.", Toast.LENGTH_SHORT);
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED) {
         Toast.makeText(pContext, "You already own this item.", Toast.LENGTH_SHORT);
    }else if (responseCode == Constants.BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED) {
         Toast.makeText(pContext, "You don't own this item.", Toast.LENGTH_SHORT);
    }
}

由于我正在 call “android.test.canceled”,因此我应该得到BILLING_RESPONSE_RESULT_USER_CANCELED此响应,但显示为付款成功,并且在intent.getExtras中没有其他参数的情况下,将responseCode返回为BILLING_RESPONSE_RESULT_OK。
我正在尝试静态响应
http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static

感谢和问候!!

最佳答案

您没有检查:

if (resultCode == Activity.RESULT_OK) {
    ....
}

该过程可能无法成功完成。并且由于在responseCode中不存在键“RESPONSE_CODE”的情况下intent的默认值为“0”。
int responseCode = intent.getIntExtra("RESPONSE_CODE", 0);

.... responseCode初始化为Constants.BILLING_RESPONSE_RESULT_OK ==> 0

尝试使用:
int responseCode = intent.getIntExtra("RESPONSE_CODE", -1);

并添加一个最终的else块来处理-1

07-27 22:22