android接入谷歌支付

  1. 先集成google支付插件
	//新旧版版本获取方式跟调起支付方式不同
	//旧版本
 	implementation "com.android.billingclient:billing:4.0.0"
 	//新版本要接入最新的,比如:
 	implementation "com.android.billingclient:billing:6.0.0"
  1. 在Application进行初始化连接谷歌,判断是否接通谷歌,只有接通谷歌才能做后面操作
//初始化
BillingClient billingClient = BillingClient.newBuilder(this)
                .setListener(purchasesUpdatedListener)
                .enablePendingPurchases()
                .build();
if (!billingClient.isReady()) {
   billingClient.startConnection(new BillingClientStateListener() {
                @Override
                public void onBillingServiceDisconnected() {
                }
                @Override
                public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                    if (billingResult.getResponseCode() ==  BillingClient.BillingResponseCode.OK) {
						//这里代表接通谷歌成功
                    }
                }
            });
        }

3.获取谷歌商品信息,获取商品信息,主要分应用内商品,订阅,传入产品id获取数据
BillingClient.SkuType.SUBS 代表订阅商品,BillingClient.SkuType.INAPP,应用内商品,具体看在谷歌后台创建什么商品

//5.0.0以下版本
List<String> skuList = new ArrayList<>();
skuList.add("test1"); //test1 代表产品id,具体产品去后谷歌后台查看id
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS);
//
billingClient.querySkuDetailsAsync(params.build(),new SkuDetailsResponseListener() {
   @Override
  public void onSkuDetailsResponse(BillingResult billingResult,
                                              List<SkuDetails> skuDetailsList) {
                            if(billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK){
                                
                            } 

                        }
                    });
        }
 //5.0.0(包含)以上版本
 List<String> skuList = new ArrayList<>();
 skuList.add("test1"); //test1 代表产品id,具体产品去后谷歌后台查看id
 List<QueryProductDetailsParams.Product> productList = new ArrayList<>();
 for (String sku: skuList) {
     productList.add(QueryProductDetailsParams.Product.newBuilder()
     .setProductId(sku)
     .setProductType(BillingClient.ProductType.SUBS)
     .build());
 }
 QueryProductDetailsParams queryProductDetailsParams =
                    QueryProductDetailsParams.newBuilder()
                            .setProductList(productList)
                            .build();
            DemoApplication.billingClient.queryProductDetailsAsync(
                    queryProductDetailsParams,
                    new ProductDetailsResponseListener() {
                        public void onProductDetailsResponse(BillingResult billingResult,
                                                             List<ProductDetails> productDetailsList) {
                            if(billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK){


      
                            }
                        }
                    }
            );      
             
  1. 调起支付 界面
//5.0.0以下版本
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(skuDetails)
                .build();
        int responseCode = MyApplication.billingClient.launchBillingFlow(
                GooglePayActivity.this, billingFlowParams).getResponseCode();
        if (responseCode == 0){
            // 调起成功
        } else{
             // 调起失败
        }
 //5.0.0(包含)以上版本
 ImmutableList productDetailsParamsList =
                ImmutableList.of(
                        BillingFlowParams.ProductDetailsParams.newBuilder()
                                // retrieve a value for "productDetails" by calling queryProductDetailsAsync()
                                .setProductDetails(skuDetail)
                                // to get an offer token, call ProductDetails.getSubscriptionOfferDetails()
                                // for a list of offers that are available to the user
                                .setOfferToken(skuDetail.getSubscriptionOfferDetails().get(0).getOfferToken())
                                .build()
                );
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                .setProductDetailsParamsList(productDetailsParamsList)
                .build();

// Launch the billing flow
        BillingResult billingResult =  DemoApplication.billingClient.launchBillingFlow( MemberActivity.this, billingFlowParams);       
  1. 监听用户是否支付
 private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
        @Override
        public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
            // To be implemented in a later section.);

            if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK
                    && purchases != null) {
                for (Purchase purchase : purchases) {
                    //完成支付
                    handlePurchase(purchase);
                }
            } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) {
                // 用户取消
            } else {
                // 其他错误
            }

        }
    };

6.用户支付完成,要进行验证,否则测试环境5分钟会自动退单退款,真实环境3天自动退单退款

if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
            if(!purchase.isAcknowledged()){
                //Toast.makeText(MyApplication.this,"支付成功:非消耗类" ,Toast.LENGTH_SHORT).show();
                AcknowledgePurchaseParams acknowledgePurchaseParams =
                        AcknowledgePurchaseParams.newBuilder()
                                .setPurchaseToken(purchase.getPurchaseToken())
                                .build();
                billingClient.acknowledgePurchase(acknowledgePurchaseParams,acknowledgePurchaseResponseListener);

            } else{
                //Toast.makeText(MyApplication.this,"支付成功:消耗类" ,Toast.LENGTH_SHORT).show();
                ConsumeParams consumeParams =
                        ConsumeParams.newBuilder()
                                .setPurchaseToken(purchase.getPurchaseToken())
                                .build();
                billingClient.consumeAsync(consumeParams, listener);
            }
   			//这里可以通知自己app服务器进行相应处理
        }

到这里就完成!!!

Google支付是一种在线支付服务,可以让用户在应用程序或网站上购买商品或服务。要申请Google支付,你需要进行以下准备工作: 1. 首先,你需要申请一个Google Play开发者账号。这个账号将用于管理你的应用程序和支付设置。 2. 接下来,你需要准备一个APK文件,并在Google Play控制台上上传你的应用程序。这个APK文件可以是一个占位文件,不需要集成支付SDK。 3. 在发布之前,你需要发布一个Alpha或Beta版本,并在Google Play控制台上设置相关选项,如提交商品详情内容、确定内容分级和选择发布范围等。 4. 添加测试人员。一旦你的应用程序通过审核,你将获得一个测试地址,你可以将这个地址发送给测试人员,让他们点击同意加入测试。 5. 创建应用内商品。你需要按照提示填写商品ID、商品描述和定价等信息。 6. 在账户详细信息中,添加许可测试的邮箱账号,并将许可测试响应改为“RESPOND_NORMALLY/LICENSED”。这一步需要一两分钟生效。 7. 检查你的包名和签名文件是否与Google Play控制台上上传的APK包一致。 8. 检查版本号是否与Google Play控制台发布的APK版本一致。 9. 检查你是否可以购买,是否绑定了银行卡,手机是否支持Google支付,以及手机是否安装了Google服务。 10. 如果你的应用程序要支持特定地区的支付,你可能需要准备一个VPN,以便在该地区进行测试。 在Google Play后台配置中,你还需要设定定价,即商品的定价。完成以上步骤后,你就可以开始使用Google支付了。\[3\] #### 引用[.reference_title] - *1* [php ci框架 谷歌支付服务端校验](https://blog.csdn.net/weixin_45143733/article/details/126780083)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [android--GooglePay 谷歌支付内购接入(1)](https://blog.csdn.net/yangbin0513/article/details/123591922)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值