Проверка подписи покупки в Android - PullRequest
0 голосов
/ 20 октября 2019

После некоторых исследований:

android: Оплата Inapp: Ответ об ошибке: 7: Элемент уже принадлежит

Оплата Inapp: Ответ об ошибке: 7: ItemУ вас уже есть проблема с тестовыми транзакциями

BillingFlowParams.Builder setSkuDetails для тестирования статических ответов Google Play Billing

Как правильно обновить методы Android BillingFlowParams устарела

Тест биллинга в приложении: android.test.purchased уже принадлежит

Проверка покупок в приложении

Я придумал этот код, чтобы очистить тестируемые inapp приложения (а именно «android.test.purchased»):

/////////////////////////
// First consume dbg. managed products
/////////////////////////
String purchaseToken = "inapp:" + BillingConstants.PACKAGE_NAME + ":" + BillingConstants.SKU_DBG_PURCHASED;
mBillingClient.consumeAsync(purchaseToken, new ConsumeResponseListener() {
    @Override
    public void onConsumeResponse(int responseCode, String purchaseToken) {
        Log.d(TAG, BillingConstants.SKU_DBG_PURCHASED + " response code: " + responseCode);
        Log.d(TAG, BillingConstants.SKU_DBG_PURCHASED + " purchase token: " + purchaseToken);

        if (responseCode == 0) {
            Log.d(TAG, BillingConstants.SKU_DBG_PURCHASED + " consumed successfully");

            purchaseToken = "inapp:" + BillingConstants.PACKAGE_NAME + ":" + BillingConstants.SKU_DBG_CANCELED;
            mBillingClient.consumeAsync(purchaseToken, new ConsumeResponseListener() {
                @Override
                public void onConsumeResponse(int responseCode, String purchaseToken) {
                    Log.d(TAG, BillingConstants.SKU_DBG_CANCELED + " response code: " + responseCode);
                    Log.d(TAG, BillingConstants.SKU_DBG_CANCELED + " purchase token: " + purchaseToken);

                    if (responseCode == 0) {
                        Log.d(TAG, BillingConstants.SKU_DBG_CANCELED + " consumed successfully");

                        purchaseToken = "inapp:" + BillingConstants.PACKAGE_NAME + ":" + BillingConstants.SKU_DBG_UNAVAILABLE;
                        mBillingClient.consumeAsync(purchaseToken, new ConsumeResponseListener() {
                            @Override
                            public void onConsumeResponse(int responseCode, String purchaseToken) {
                                Log.d(TAG, BillingConstants.SKU_DBG_UNAVAILABLE + " response code: " + responseCode);
                                Log.d(TAG, BillingConstants.SKU_DBG_UNAVAILABLE + " purchase token: " + purchaseToken);

                                if (responseCode == 0) {
                                    Log.d(TAG, BillingConstants.SKU_DBG_UNAVAILABLE + " consumed successfully");
                                }
                            }
                        });
                    }
                }
            });
        }
    }
});

(он основан на тривиальном диске v2 ).

Работает как положено (куплено очищено локально, появляется диалог покупки с поддельными записями VISA). После покупки тестового элемента (SKU = "android.test.purchased) происходит сбой проверки подписи в BillingManager.java:

private void handlePurchase(Purchase purchase) {
    if (!verifyValidSignature(purchase.getOriginalJson(), purchase.getSignature())) {
        Log.i(TAG, "Got a purchase: " + purchase + "; but signature is bad. Skipping...");
        return;
    }

    Log.d(TAG, "Got a verified purchase: " + purchase);

    mPurchases.add(purchase);
}

Подпись покупки представляет собой пустую строку (я не уверен, относится ли это только ктестовые SKU) и JSON:

{ 
   "packageName":"com.pckg.name",
   "acknowledged":false,
   "orderId":"transactionId.android.test.purchased",
   "productId":"android.test.purchased",
   "developerPayload":"",
   "purchaseTime":0,
   "purchaseState":0,
   "purchaseToken":"inapp:com.pckg.name:android.test.purchased"
}

"Безопасно ли" пропускать этап проверки для тестовых покупок?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...