集成Google应用内 支付 或者 订阅

要集成Google应用内支付 先要了解文档

集成文档: https://developer.android.google.cn/google/play/billing/integrate

1.创建Google应用

Google play 应用平台: https://play.google.com/console/u/0/developers/6529195851168790505/app-list
创建完应用后 进入应用详情 这个里面创建订阅或者消耗类型商品 获取商品ID用于代码中查询商品进行吊起Google支付
请添加图片描述

2.付费使用测试卡

这个里面添加上你测试使用的Google账号然后回车添加后保存即可
请添加图片描述

3.集成Google应用内支付或者订阅

先导入依赖库

implementation 'com.android.billingclient:billing:4.0.0'

然后初始化 BillingClient

private PurchasesUpdatedListener purchasesUpdatedListener = new PurchasesUpdatedListener() {
    @Override
    public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
        // 支付后回调
    }
};

private BillingClient billingClient = BillingClient.newBuilder(context)
    .setListener(purchasesUpdatedListener)
    .enablePendingPurchases()
    .build();

然后与Google建立连接并且查询商品然后吊起Google支付或者订阅
在这里要先搞清楚一点 消耗品是购买商品一次性的 非消耗品是订阅

billingClientAfter.startConnection(new BillingClientStateListener() {
            @SuppressLint("LongLogTag")
            @Override
            public void onBillingServiceDisconnected() {
                // 连接断开
                Log.d(TAG, "onBillingServiceDisconnected: 连接断开");
            }

            @Override
            public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                // 连接成功
                if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {

                    SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
                    List<String> skuList = new ArrayList<>();
                    skuList.add(str);//str是商品ID
                    skuList.add("gas");// 这个参数不能为空,值随便传
                    if (//这里判断是商品订阅还是商品购买) {
                        params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);//针对一次性商品
                    } else {
                        params.setSkusList(skuList).setType(BillingClient.SkuType.SUBS);//针对订阅
                    }

                    //商品查询
                    billingClientAfter.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
                        @SuppressLint("LongLogTag")
                        @Override
                        public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List<SkuDetails> list) {
                            if (list != null && list.size() > 0) {
                                for (SkuDetails skuDetails : list) {
                                    String sku = skuDetails.getSku();
                                    // 唤起GooglePay支付
                                    if (str.equals(sku)) {
                                        BillingFlowParams flowParams = BillingFlowParams.newBuilder()
                                                .setSkuDetails(skuDetails)
                                                .build();
                                        billingClientAfter.launchBillingFlow(ExhibitionPaymentActivity.this, flowParams);
                                    }
                                }
                            } else {
                                Log.d(TAG, "onSkuDetailsResponse: 未找到订阅商品");
                            }
                        }
                    });
                } else {
                    // TODO 连接失败
                }
            }
        });

回调中还有一些内容我都列出来 方便理解

private PurchasesUpdatedListener purchasesUpdatedListenerAfter = new PurchasesUpdatedListener() {
        @SuppressLint("LongLogTag")
        @Override
        public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
            int responseCode = billingResult.getResponseCode();
            if (responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
                for (Purchase purchase : purchases) {

                  

                    if (//这里判断是商品订阅还是商品购买)) {
                   		//这是消耗商品
                        handlePurchaseBUY(purchase); //这个方法是说表明某件一次性商品已被消耗
                    } else {
                    	//这是订阅商品
                        handlePurchase(purchase);//这个方法是订阅判断用户是否以及订阅 如果没订阅就是用来确认交易商品
                    }
					
					// 这里是获取支付后订单号
                    String orderId = purchase.getOrderId();

                    int purchaseState = purchase.getPurchaseState();//判断用户是否付款了 2代办 1付款 0未指定
                    if (purchaseState == Purchase.PurchaseState.PURCHASED) {
                    //用户如果付款了在这里面做其他操作
					
					//这是非常重要的一步就是结束商品回调 要是不加这一步 应用内如果有多处商品购买的代码 这个回调就会瞎跑 加上就行了
					billingClientAfter.endConnection();
					
                    } else {
                        UIUtils.showToast(getString(R.string.支付失败));
                    }
                }
                Log.d(TAG, "onPurchasesUpdated: 支付完成");
            } else if (responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
                // Handle an error caused by a user cancelling the purchase flow.
                Log.d(TAG, "onPurchasesUpdated: 用户取消了支付");
            } else if (responseCode == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) {
                // Handle an error caused by a user cancelling the purchase flow.
                Log.d(TAG, "onPurchasesUpdated: 商品已经购买过(重复购买了此商品,如果需要支持重复购买,需要将商品购买成功后消费掉)");
            } else {
                // Handle any other error codes.
            }
        }
    };

大部分内容都加注解了 对照着Google集成都文档一看就明白了

//这是确认消耗类型商品被消耗都方法
void handlePurchaseBUY(Purchase purchase) {
        // Purchase retrieved from BillingClient#queryPurchasesAsync or your PurchasesUpdatedListener.
        // Verify the purchase.
        // Ensure entitlement was not already granted for this purchaseToken.
        // Grant entitlement to the user.
        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.
                }
            }
        };
        billingClientAfter.consumeAsync(consumeParams, listener);
    }
//这是对于订阅商品的确认方法
AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListenerAfter;

    void handlePurchase(Purchase purchase) {
        if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
            if (!purchase.isAcknowledged()) {
                AcknowledgePurchaseParams acknowledgePurchaseParams =
                        AcknowledgePurchaseParams.newBuilder()
                                .setPurchaseToken(purchase.getPurchaseToken())
                                .build();
                billingClientAfter.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListenerAfter);
            }
        }
    }

关于Google应用内支付或者订阅大致内容就是这些了

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: Android集成支付支付可以通过以下步骤完成。 首先,注册支付宝开发者账号并创建应用,获得必要的应用ID和密钥。 其次,将支付宝SDK导入到项目中。可以通过Gradle或手动导入方式进行。 接下来,在需要使用支付支付的Activity中,添加支付支付的逻辑。 首先,创建支付支付的请求参数,包括订单号、订单金额、商品名称等必要信息。然后使用支付宝提供的接口将请求参数进行签名,生成最终的支付参数。 接着,调用支付宝提供的支付接口,将支付参数传入,并设置支付结果的回调监听。用户触发支付时,将会跳转到支付宝的支付页面。 最后,在回调监听中处理支付结果。支付支付完成后,会通过回调返回支付结果。根据返回的支付结果,可以进行相应的操作,如更新订单状态、跳转到支付成功页面等。 需要注意的是,为了保障支付安全,建议在服务器端进行订单的签名和验签操作,避免将密钥等敏感信息暴露在客户端。 以上就是Android集成支付支付的基本流程,开发者可以根据具体需求进行相应的参数设置和结果处理。 ### 回答2: 在Android平台上集成支付支付是较为常见的一种支付方式,下面我会用300字回答这个问题。 首先,为了集成支付支付,我们需要在支付宝开放平台上注册一个开发者账号,并创建一个应用。然后,我们需要下载支付宝提供的SDK,并将其引入到我们的Android工程中。在引入SDK后,我们可以根据支付宝提供的文档和示例代码进行具体的集成操作。 集成支付支付的过程主要包括以下几个步骤: 1. 在AndroidManifest.xml文件中配置支付支付所需的权限、服务以及activity。 2. 在应用的代码中,我们需要创建一个支付宝客户端实例,并配置相应的支付参数,如商户ID、订单号、金额等。 3. 调用支付宝客户端实例的支付接口,将支付参数传递给支付宝服务器。 4. 支付宝服务器会返回一个支付结果,我们可以在回调方法中处理这个支付结果,并根据支付结果的状态进行相应的操作,如更新订单状态、跳转到支付成功页面等。 除了以上基本的支付流程外,我们还可以根据需求添加一些附加功能,如查询订单状态、退款等。 在集成支付支付时,我们还需要注意一些细节问题。例如,支付宝要求我们的应用必须使用HTTPS协议与其服务器进行通信,因此我们需要确保我们的应用开启了相应的网络权限,并在网络请求时使用HTTPS协议。 另外,为了保证支付安全,我们还需要在支付宝开放平台上生成一个RSA密钥,并将其配置到我们的应用中。 总的来说,集成支付支付相对来说并不复杂,只需要按照支付宝的文档和示例代码进行操作,就可以使我们的应用支持支付支付功能了。而支付支付作为一种简单、安全、方便的支付方式,可以为我们的应用提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真庆幸.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值