Google支付接入及遇到的问题

GooglePay接入
1.开发者文档:
https://developer.android.google.cn/google/play/billing/billing_library_overview

2.添加配置文件
1).在您的模块(应用级)Gradle 文件(通常是 app/build.gradle)中,添加核心 Firebase SDK 的依赖项:

dependencies {
    ...
    implementation 'com.android.billingclient:billing:3.0.0’
}
   <!--谷歌商店应用内购买结算需要的权限-->
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" />

3.应用内使用
1)创建链接

private BillingClient billingClient;
...
billingClient = BillingClient.newBuilder(activity).setListener(this).build();
billingClient.startConnection(new BillingClientStateListener() {
    @Override
    public void onBillingSetupFinished(BillingResult billingResult) {
        if (billingResult.getResponseCode() ==  BillingResponseCode.OK) {
            // The BillingClient is ready. You can query purchases here.
        }
    }
    @Override
    public void onBillingServiceDisconnected() {
        // Try to restart the connection on the next request to
        // Google Play by calling the startConnection() method.
    }
});

2)查询和购买

//查询
List<String> skuList = new ArrayList<> ();
skuList.add("premium_upgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
billingClient.querySkuDetailsAsync(params.build(),
    new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult,
                List<SkuDetails> skuDetailsList) {
            // Process the result.
        }
    });
//购买
// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync().
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
        .setSkuDetails(skuDetails)
        .build();
int responseCode = billingClient.launchBillingFlow(flowParams);

通过唯一的商品id去查询得到SkuDetails,然后得到的SkuDetails去购买

3)购买回调

@Override
void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
    if (billingResult.getResponseCode() == BillingResponse.OK
            && purchases != null) {
        for (Purchase purchase : purchases) {
            handlePurchase(purchase);
        }
    } else if (billingResult.getResponseCode() == BillingResponse.USER_CANCELED) {
        // Handle an error caused by a user cancelling the purchase flow.
    } else {
        // Handle any other error codes.
    }
}

4)消耗(需要三天内确认所有购买交易。如果没能正确确认,将导致系统对相应购买交易按退款处理。)

ConsumeParams consumeParams =
    ConsumeParams.newBuilder()
                       .setPurchaseToken(purchaseToken)
                        .build();
       mBillingClient.consumeAsync(consumeParams, new ConsumeResponseListener() {
 
            @Override
            public void onConsumeResponse(BillingResult billingResult, String s) {
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
                }
            }
        });
 
  }

4.参考
https://download.csdn.net/download/u013334392/12001347
用的版本是2.多的,升级之后有的函数无法使用了,不过可以自己修改重构下,有兴趣的参考参考。

https://download.csdn.net/download/weixin_42495311/12651555
改装过的。

//支付
public void googlePay(String sku,String billingType){
    mSku = sku;
    mBillingType = billingType;

    List<String> skuList = new ArrayList<>();
    skuList.add(mSku);
    //skuList.add("gas");//

    mBillingManager.querySkuDetailsAsync(mBillingType, skuList, new SkuDetailsResponseListener() {
        @Override
        public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
            if (billingResult.getResponseCode() != BillingClient.BillingResponseCode.OK) {
                SystemUtils.callbackLua(1,"商品列表获取失败。");
            } else if (skuDetailsList != null && skuDetailsList.size() > 0) {
                mSkuDetails.clear();
                //成功地获得了sku详细
                for (SkuDetails details : skuDetailsList) {
                    if (mSku.equals(details.getSku())) {
                        mSkuDetails.add(details);
                    }
                }

                if (mBillingManager != null
                        && mBillingManager.getBillingClientResponseCode()
                        > BillingManager.BILLING_MANAGER_NOT_INITIALIZED) {
                    if (mSkuDetails != null && mSkuDetails.size() > 0) {

                        mBillingManager.initiatePurchaseFlow(mSkuDetails.get(0), "");
                    }
                }
            }
        }
    });
}

谷歌支付开发遇到的一些问题
1.获取商品列表时,请求code是ok,但是获取不到商品列表
原因:需要提交的版本是发布状态,否则就无法获取商品列表

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值