@Override public void run() { String message = "Failed consuming product: " + transaction.getIdentifier(); observer.handlePurchaseError(new ConsumeException(message, transaction, e)); } });
public Transaction convertToTransaction(Intent responseData) { String purchaseDataString = responseData.getStringExtra(GoogleBillingConstants.INAPP_PURCHASE_DATA); try { Transaction transaction = convertJSONPurchaseToTransaction(purchaseDataString); transaction.setTransactionDataSignature(responseData.getStringExtra(GoogleBillingConstants.INAPP_DATA_SIGNATURE)); String productId = transaction.getIdentifier(); setInformationFields(transaction, productId); return transaction; } catch (JSONException e) { throw new GdxPayException("JSON Exception while parsing: " + purchaseDataString, e); } }
private static ArrayList<String> makeStringArrayListForTransaction(Transaction transaction) { ArrayList<String> list = new ArrayList<>(); JSONObject jsonObject = new JSONObject(); try { jsonObject.put(ORDER_ID, transaction.getOrderId()); jsonObject.put(PACKAGE_NAME, PACKAGE_NAME_GOOD); jsonObject.put(ORDER_ID, transaction.getOrderId()); jsonObject.put(PRODUCT_ID, transaction.getIdentifier()); jsonObject.put(PURCHASE_TIME, System.currentTimeMillis()); jsonObject.put(PURCHASE_TOKEN, transaction.getTransactionData()); list.add(jsonObject.toString()); } catch (JSONException e) { throw new RuntimeException(e); } return list; }
@Override public void purchaseRestore() { try { List<Transaction> transactions = googleInAppBillingService.getPurchases(); Array<Transaction> entitlements = new Array<>(Transaction.class); for (int i = 0; i < transactions.size(); i++) { Transaction transaction = transactions.get(i); if (OfferType.CONSUMABLE == getOfferType(transaction.getIdentifier())) { googleInAppBillingService.consumePurchase(transaction, observer); } else { entitlements.add(transaction); } } if (observer != null) { observer.handleRestore(entitlements.toArray()); } } catch (GdxPayException e) { if (observer != null) { observer.handleRestoreError(e); } } }
@Test public void fillsPurchaseFromJson() throws Exception { String payload = "{\"packageName\":\"com.app.name\",\"productId\":\"com.app.name.productId\",\n" + " \"purchaseTime\":1466539081315,\"purchaseState\":0,\n" + " \"developerPayload\":\"justSomePayload\",\n" + " \"purchaseToken\":\"randomToken\"}\n"; Transaction transaction = convertJSONPurchaseToTransaction(payload); assertThat(transaction.getIdentifier()).isEqualTo("com.app.name.productId"); assertThat(transaction.getPurchaseTime()).isWithinMonth(6); assertThat(transaction.getReversalTime()).isNull(); assertThat(transaction.getReversalText()).isNull(); }
@Override public void run() { try { Log.d(LOG_TAG, "Purchase consumer starting"); final int result = consumePurchaseToken(transaction.getTransactionData()); if (result == 0) { observer.handlePurchase(transaction); } else { ResponseCode responseCode = ResponseCode.findByCode(result); String productId = transaction.getIdentifier(); String error = "Consuming " + productId + " failed, " + responseCode; observer.handlePurchaseError(new ConsumeException(error, transaction)); } } catch (final RemoteException e) { applicationProxy.postRunnable(new Runnable() { @Override public void run() { String message = "Failed consuming product: " + transaction.getIdentifier(); observer.handlePurchaseError(new ConsumeException(message, transaction, e)); } }); } } }
@Test public void getSubscriptionPurchasesWithResultOkShouldReturnPurchaseTransactions() throws Exception { activityBindAndConnect(); whenGetPurchasesRequestReturn(purchasesResponseOneTransactionFullEdition()); List<Transaction> transactions = v3InAppbillingService.getPurchases(); verify(nativeInAppBillingService).getPurchases(BILLING_API_VERSION, PACKAGE_NAME_GOOD, PURCHASE_TYPE_SUBSCRIPTION, null); assertEquals(1, transactions.size()); assertEquals(offerFullEditionEntitlement().getIdentifier(), transactions.get(0).getIdentifier()); }
@Test public void getPurchasesWithResultOkShouldReturnPurchaseTransactions() throws Exception { activityBindAndConnect(); whenGetPurchasesRequestReturn(purchasesResponseOneTransactionFullEdition()); List<Transaction> transactions = v3InAppbillingService.getPurchases(); verify(nativeInAppBillingService).getPurchases(BILLING_API_VERSION, PACKAGE_NAME_GOOD, PURCHASE_TYPE_IN_APP, null); assertEquals(1, transactions.size()); assertEquals(offerFullEditionEntitlement().getIdentifier(), transactions.get(0).getIdentifier()); }