google 內(nèi)購(gòu)支付流程

前言

各位同學(xué)大家好 ,有段時(shí)間沒(méi)有給各位更新文章了,具體多久我也不記得了, 最近接了google 的內(nèi)購(gòu)支付,遇到一些問(wèn)題 。

準(zhǔn)備工作

申請(qǐng)內(nèi)購(gòu)id 還有 firebase 的 google-services.json 文件

支付初始化

 public void initGooglePay(final Context context) {
        Log.e(TAG, "initGooglePay: "+"支付初始化");
        billingClient = BillingClient.newBuilder(context)
                .setListener(purchasesUpdatedListener)
                .enablePendingPurchases().build();
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(BillingResult billingResult) {
                // Logic from ServiceConnection.onServiceConnected should be moved here.

                if (billingResult.getResponseCode() ==  BillingClient.BillingResponseCode.OK) {
                    Log.e(TAG, "initGooglePay: "+"支付初始化--成功");
                    // The BillingClient is ready. You can query purchases here.
                }
            }
            @Override
            public void onBillingServiceDisconnected() {
                // Logic from ServiceConnection.onServiceDisconnected should be moved here.
            }
        });
    }

支付回調(diào)處理

PurchasesUpdatedListener purchasesUpdatedListener =new PurchasesUpdatedListener(){
        @Override
        public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> purchases) {
            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                    && purchases != null) {
                Log.e(TAG, "onPurchasesUpdated: "+"支付成功" );
                Log.e(TAG, "onPurchasesUpdated: purchasesUpdatedListener -- > "+purchasesUpdatedListener );
                for (Purchase purchase : purchases) {
                    handlePurchase(purchase);
                    Log.e(TAG, "onPurchasesUpdated: "+purchase.getPurchaseToken() );
                    Log.e(TAG, "onPurchasesUpdated: purchase  "+purchase);
                    //                    //                    //  handlePurchase(purchase);
                }
            } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
                //Toast.makeText(payContext, R.string.purchase_cancel, Toast.LENGTH_SHORT).show();
            } else {
                // Toast.makeText(payContext, R.string.purchase_cancel, Toast.LENGTH_SHORT).show();
            }
        }
    };

支付消耗邏輯

   private  void handlePurchase(final Purchase purchase) {
        Log.e(TAG, "handlePurchase: "+"消耗-- 》");
        ConsumeParams consumeParams =
                ConsumeParams.newBuilder()
                        .setPurchaseToken(purchase.getPurchaseToken())
                        .build();
        ConsumeResponseListener listener = new ConsumeResponseListener() {
            @Override
            public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                    // Handle the success of the consume operation.
                    try {
                        JSONObject jsonObject=new JSONObject(purchase.getOriginalJson());
                        String transaction_id=jsonObject.optString("orderId");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        billingClient.consumeAsync(consumeParams, listener);
    }
  

查詢商品id 信息并且調(diào)起支付

  /**
     * @param context
     * @param productId
     * @param
     */
    private void querySkuDetails(final Activity context, String productId) {
        Log.e(TAG, "querySkuDetails:productId    ---   " +productId   );
        String skuToSell = productId;
        List<String> skuList = new ArrayList<>();
        skuList.add(skuToSell);
        Log.e(TAG, "querySkuDetails: skuList "+skuList.size() );
        //skuList.addAll(cosumerData.getProductIdData());
        final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);
        billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
            @Override
            public void onSkuDetailsResponse(BillingResult billingResult, final List<SkuDetails> skuDetailsList) {
                if(skuDetailsList!=null&&skuDetailsList.size()>0){
                    Log.e(TAG, "run:skuDetailsList.size -- >   "+skuDetailsList.size() );
                    skuDetails=skuDetailsList.get(0);

                    BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                            .setSkuDetails(skuDetails)
                            .build();
                    int responseCode = billingClient.launchBillingFlow((Activity) context, billingFlowParams).getResponseCode();
                    if(responseCode== BillingClient.BillingResponseCode.OK){

                    }
                }else{
                    Log.e(TAG, "run: "+"商品ID 錯(cuò)誤" );
                }
            }
        });
    }

查詢消耗的

    /**
     * 查詢已經(jīng)購(gòu)買過(guò)但是沒(méi)有被消耗的商品,可能網(wǎng)絡(luò)不穩(wěn)定或者中斷導(dǎo)致的未被消耗
     * 如果購(gòu)買成功沒(méi)消耗,就去消耗,消耗完成視為完整的流程。
     */
    public void queryPurchases() {
        if (!billingClient.isReady()) {
            Log.i(TAG, "queryPurchases: BillingClient is not ready");
        }
        Log.i(TAG, "queryPurchases: INAPP");

        billingClient.queryPurchasesAsync(BillingClient.SkuType.INAPP, new PurchasesResponseListener(){
            @Override
            public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> purchasesList) {
                if (purchasesList != null) {
                    Log.i(TAG, "processPurchases: " + purchasesList.size() + " purchase(s)");
                    for (int i = 0; i < purchasesList.size(); i++) {
                        Purchase purchase = purchasesList.get(i);
                        handlePurchase(purchase);
                    }
                } else {
                    Log.i(TAG, "processPurchases: with no purchases");
                }
            }
        });
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容