美文网首页
Android GooglePay集成

Android GooglePay集成

作者: 靠睡大觉创新高 | 来源:发表于2021-02-23 16:56 被阅读0次
  • 流程
    1.跟你们的后台拿到商品ID
    2.连接到GooglePay服务
    3.查询这个商品ID得到商品详情
    4.根据商品详情打开GooglePay购买页面

  • 前言
    1.请使用海外版的手机或者你可以刷一个国际版MIUI,否则即使你的手机安装了Google服务也无法购买
    2.科学上网
    3.你的App必须已经在Google Play应用市场上架成功(https://play.google.com/apps/publish)
    4.当你把下面的代码集成好之后 需要先把这个APP发布到测试,并添加测试人员的账号,然后给链接邀请他们进入测试 并下载测试包。否则你会无法购买
    image.png
    5.有疑问请联系我的邮箱我每天上班的时候会看一下742831652@qq.com


  • AndroidManifest.xml
<!-- Google Play 内购权限 -->
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" />
  • build.gradle
dependencies {
    //GooglePay
    implementation 'com.android.billingclient:billing:3.0.0'
}
  • 开始支付
/**
 * 开始支付
 * 
 * @param activity
 * @param skuId    商品ID
 */
GooglePayUtil.getInstance().start(Activity activity, String skuId);

GooglePayUtil.java

import android.app.Activity;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.android.billingclient.api.BillingClient;
import com.android.billingclient.api.BillingClientStateListener;
import com.android.billingclient.api.BillingFlowParams;
import com.android.billingclient.api.BillingResult;
import com.android.billingclient.api.ConsumeParams;
import com.android.billingclient.api.ConsumeResponseListener;
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.PurchasesUpdatedListener;
import com.android.billingclient.api.SkuDetails;
import com.android.billingclient.api.SkuDetailsParams;
import com.android.billingclient.api.SkuDetailsResponseListener;

import java.util.ArrayList;
import java.util.List;

public class GooglePayUtil implements PurchasesUpdatedListener {

    private String TAG = "GooglePayUtil";
    private static GooglePayUtil instance;

    //获取实例
    public static synchronized GooglePayUtil getInstance() {
        if (instance == null) {
            instance = new GooglePayUtil();
        }
        return instance;
    }

    private Activity activity;
    private BillingClient billingClient;

    /**
     * 开始支付
     *
     * @param activity
     * @param skuId    商品ID
     */
    public void start(Activity activity, String skuId) {
        this.activity = activity;
        if (billingClient == null) {
            billingClient = BillingClient.newBuilder(activity).setListener(this).enablePendingPurchases().build();
        }
        if (billingClient.isReady()) {
            checkSku(skuId);
        } else {
            connectGooglePay(skuId);
        }
    }


    //连接到GooglePay
    private void connectGooglePay(String skuId) {
        //请求连接到GooglePay
        billingClient.startConnection(new BillingClientStateListener() {
            @Override
            public void onBillingSetupFinished(@NonNull BillingResult billingResult) {
                int code = billingResult.getResponseCode();
                if (code != BillingClient.BillingResponseCode.OK) {
                    String msg = billingResult.getDebugMessage();
                    Log.e(TAG, "连接到GooglePay失败    code = " + code + "    msg = " + msg);
                    onFail();
                    return;
                }
                Log.e(TAG, "连接到GooglePay成功");
                checkSku(skuId);
            }

            //连接失败
            @Override
            public void onBillingServiceDisconnected() {
                Log.e(TAG, "连接到GooglePay失败,请重试");
            }
        });
    }

    //查询商品
    private void checkSku(String id) {
        List<String> skuList = new ArrayList<>();
        skuList.add(id);
        SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder()
                .setSkusList(skuList)
                .setType(BillingClient.SkuType.INAPP);
        billingClient.querySkuDetailsAsync(params.build(), new SkuDetailsResponseListener() {
            @Override
            public void onSkuDetailsResponse(@NonNull BillingResult billingResult, @Nullable List<SkuDetails> list) {
                int code = billingResult.getResponseCode();
                if (code != BillingClient.BillingResponseCode.OK || list == null || list.isEmpty()) {
                    String msg = billingResult.getDebugMessage();
                    Log.e(TAG, "查询商品失败    code = " + code + "    msg = " + msg);
                    onFail();
                    return;
                }
                Log.e(TAG, "查询商品成功");
                buyIt(list.get(0));
            }
        });
    }

    //购买
    private void buyIt(SkuDetails skuDetails) {
        BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
                .setSkuDetails(skuDetails)
                .build();
        BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
        int code = billingResult.getResponseCode();
        if (code != BillingClient.BillingResponseCode.OK) {
            String msg = billingResult.getDebugMessage();
            Log.e(TAG, "购买商品失败    code = " + code + "    msg = " + msg);
            onFail();
            return;
        }
        Log.e(TAG, "购买商品" + skuDetails.toString());
    }

    @Override
    public void onPurchasesUpdated(@NonNull BillingResult billingResult, @Nullable List<Purchase> list) {
        int code = billingResult.getResponseCode();
        String msg = billingResult.getDebugMessage();
        Log.e(TAG, "onPurchasesUpdated:code = " + code + "    msg = " + msg);
        if (list != null) {
            for (Purchase purchase : list) {
                Log.e(TAG, "onPurchasesUpdated:" + purchase.toString());
            }
        }
        if (code == BillingClient.BillingResponseCode.OK && list != null) {
            Log.e(TAG, "支付成功");
            onSuccess(list);
        } else if (code == BillingClient.BillingResponseCode.USER_CANCELED) {
            Log.e(TAG, "支付取消");
            onFail();
        } else {
            Log.e(TAG, "支付失败:code = " + code + "    msg = " + msg);
            onFail();
        }
    }

    //消耗商品   使得商品可以重复购买
    private void consume(List<Purchase> list) {
        if (list == null || list.isEmpty() || billingClient == null) {
            return;
        }
        for (Purchase purchase : list) {
            billingClient.consumeAsync(ConsumeParams.newBuilder().setPurchaseToken(purchase.getPurchaseToken()).build(), new ConsumeResponseListener() {
                @Override
                public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
                    Log.e(TAG, "onConsumeResponse    code = " + billingResult.getResponseCode() + " ,  msg = " + billingResult.getDebugMessage() + " , purchaseToken = " + purchaseToken);
                }
            });
        }
    }

    private void onFail() {
        //自己写关于支付失败后的操作
    }

    private void onSuccess(List<Purchase> list) {
        //自己写关于支付成功后的操作
    }
}

  • 支付成功JSON数据示例
{
  "orderId": "GPA.3326-0188-4891-58028",
  "packageName": "com.xxx.xxx",//你APP的包名
  "productId": "1235",//你的SkuId
  "purchaseTime": 1613978031669,
  "purchaseState": 0,
  "purchaseToken": "kcjjnpeomlglnbnodpfdocdm.AO-J1OwrW_apUdDL6icLsqUlvp8JH-CD8ID35fCF1WtPnDvRUnS-AbkW_eNiwAoVFoYEnrho1txWinDibganiZRv8cSspkXXXQ",
  "acknowledged": false
}

  • 1.GooglePay默认只能购买一次,如果你需要重复购买一个商品 请调用consume方法

相关文章

网友评论

      本文标题:Android GooglePay集成

      本文链接:https://www.haomeiwen.com/subject/yttdfltx.html