Google Pay is a convenient and secure digital payment platform offered by Google. With Google Pay, users can easily make payments, send money to friends and family, and even store their loyalty cards for quick access. This innovative service simplifi

访客 174 0

在使用Google创建商品和查询支付之前,您需要先提交到Google商店。
1. 导入Google Pay。

```java
// 添加GooglePay支付工具类
implementation com.android.billingclient:billing:4.1.0
``` 
class GooglePayHelper {    private val TAG = "GooglePayHelper"    private var mActivity: Activity;    constructor(mActivity: Activity) {        this.mActivity = mActivity    }    /**     * 购买监听     */    private val purchasesUpdatedListener =        PurchasesUpdatedListener { billingResult, purchases ->            // To be implemented in a later section.            if (billingResult.responseCode == BillingResponseCode.OK) {                //支付成功                if (!purchases.isNullOrEmpty()) {                    for (i in 0 until purchases.size) {                        var purchase = purchases[i];                        //购买成功 消耗掉  同步后台                        consume(purchase)                    }                }            } else if (billingResult.responseCode == BillingResponseCode.ITEM_ALREADY_OWNED) {                //未消耗掉 查询补单                queryPurchases()            } else if (billingResult.responseCode == BillingResponseCode.USER_CANCELED) {               //取消支付            } else {//                when (billingResult.responseCode) {//                    BillingResponseCode.SERVICE_TIMEOUT -> {//                        //服务连接超时//                    }//                    BillingResponseCode.FEATURE_NOT_SUPPORTED -> {//                    }//                    BillingResponseCode.SERVICE_DISCONNECTED -> {//                        //服务未连接//                    }//                    BillingResponseCode.USER_CANCELED -> {//                        //取消//                    }//                    BillingResponseCode.SERVICE_UNAVAILABLE -> {//                        //服务不可用//                    }//                    BillingResponseCode.BILLING_UNAVAILABLE -> {//                        //购买不可用//                    }//                    BillingResponseCode.ITEM_UNAVAILABLE -> {//                        //商品不存在////                    }//                    BillingResponseCode.DEVELOPER_ERROR -> {//                        //提供给 API 的无效参数//                    }//                    BillingResponseCode.ERROR -> {//                        //错误//                    }//                    BillingResponseCode.ITEM_NOT_OWNED -> {//                        //不可购买//                    }//                }            }        }    private var billingClient = BillingClient.newBuilder(Application)        .setListener(purchasesUpdatedListener)        .enablePendingPurchases()        .build()    //检查之前的商品是否被消费    fun init() {        //已经连接查询订单        if (billingClient.isReady) {            queryPurchases()        } else {            //开始连接            billingClient.startConnection(object : BillingClientStateListener {                override fun onBillingSetupFinished(billingResult: BillingResult) {                    if (billingResult.responseCode == BillingResponseCode.OK) {                        //BillingClient准备好了。你可以在这里查询购买情况。                        queryPurchases()                    } else {                        Log.d(TAG, "init 连接失败 code:" + billingResult.responseCode)                    }                }                override fun onBillingServiceDisconnected() {                    // Try to restart the connection on the next request to                    // Google Play by calling the startConnection() method.                    Log.d(TAG, "init onBillingServiceDisconnected")                }            })        }    }    /**     * 购买商品     */    private fun purchase(mSku: String, orderId: String) {        if (billingClient.isReady) {            val skuList: MutableList<String> = ArrayList()            skuList.add(mSku)            val params = SkuDetailsParams.newBuilder()            params.setSkusList(skuList).setType(SkuType.INAPP)            billingClient.querySkuDetailsAsync(                params.build()            ) { billingResult, skuDetailsList ->                // Process the result.                if (billingResult.responseCode == BillingResponseCode.OK) {                    if (!skuDetailsList.isNullOrEmpty()) {                        for (i in 0 until skuDetailsList.size) {                            val skuDetails = skuDetailsList[i]                            Log.d(TAG, "purchase skuDetails $skuDetails")                            if (mSku == skuDetails.sku) {                                val flowParams = BillingFlowParams.newBuilder()                                    .setSkuDetails(skuDetails)                                    .setObfuscatedAccountId(orderId)                                    .build()                                //吊起支付                                val responseCode =                                    billingClient.launchBillingFlow(                                        mActivity,                                        flowParams                                    ).responseCode                                Log.d(TAG, "purchase 去支付 code $responseCode")                            }                        }                    } else {                        Log.d(TAG, "purchase 未查询到商品")                    }                } else {                    Log.d(TAG, "purchase 查询连接失败 cede" + billingResult.responseCode)                }            }        } else {            Log.d(TAG, "purchase 购买 未连接")        }    }    /**     * 消耗商品     *     * @param purchaseToken 商品token     */    private fun consume(purchase: Purchase) {        if (billingClient.isReady) {            val consumeParams =                ConsumeParams.newBuilder()                    .setPurchaseToken(purchase.purchaseToken)                    .build()            billingClient.consumeAsync(                consumeParams            ) { billingResult, s ->                if (billingResult.responseCode == BillingResponseCode.OK) {                    // Handle the success of the consume operation.                    Log.d(TAG, "consume 消耗成功${googlePayResult.purchaseToken}")                    //同步给服务器                    //do something                } else {                    Log.d(TAG, "consume 消耗失败 code:" + billingResult.responseCode)                }            }        } else {            billingClient.startConnection(object : BillingClientStateListener {                override fun onBillingSetupFinished(billingResult: BillingResult) {                    if (billingResult.responseCode == BillingResponseCode.OK) {                        //重连后 消耗掉                        val consumeParams =                            ConsumeParams.newBuilder()                                .setPurchaseToken(purchase.purchaseToken)                                .build()                        billingClient.consumeAsync(                            consumeParams                        ) { billingResult, s ->                            if (billingResult.responseCode == BillingResponseCode.OK) {                                // Handle the success of the consume operation.                                Log.d(TAG, "consume 消耗成功${googlePayResult.purchaseToken}")                                 //同步给服务器                    //do something                            } else {                                Log.d(TAG, "consume 消耗失败 code:" + billingResult.responseCode)                            }                        }                    } else {//                        Log.d(TAG, "consume init 连接失败 code:" + billingResult.responseCode)                    }                }                override fun onBillingServiceDisconnected() {                    // Try to restart the connection on the next request to                    // Google Play by calling the startConnection() method.                }            })        }    }    /**     * 补单消耗商品     *     * @param purchaseToken 商品token     */    private fun consume2(purchaseToken: String) {        if (billingClient.isReady) {            val consumeParams =                ConsumeParams.newBuilder()                    .setPurchaseToken(purchaseToken)                    .build()            billingClient.consumeAsync(                consumeParams            ) { billingResult, s ->                if (billingResult.responseCode == BillingResponseCode.OK) {                    // Handle the success of the consume operation.                    Log.d(TAG, "consume 消耗成功$purchaseToken")                } else {                    Log.d(TAG, "consume 消耗失败 code:" + billingResult.responseCode)                }            }        } else {            billingClient.startConnection(object : BillingClientStateListener {                override fun onBillingSetupFinished(billingResult: BillingResult) {                    if (billingResult.responseCode == BillingResponseCode.OK) {                        //重连后 消耗掉                        val consumeParams =                            ConsumeParams.newBuilder()                                .setPurchaseToken(purchaseToken)                                .build()                        billingClient.consumeAsync(                            consumeParams                        ) { billingResult, s ->                            if (billingResult.responseCode == BillingResponseCode.OK) {                                // Handle the success of the consume operation.                                Log.d(TAG, "consume 消耗成功$purchaseToken")                            } else {                                Log.d(TAG, "consume 消耗失败 code:" + billingResult.responseCode)                            }                        }                    } else {                        Log.d(TAG, "consume init 连接失败 code:" + billingResult.responseCode)                    }                }                override fun onBillingServiceDisconnected() {                    // Try to restart the connection on the next request to                    // Google Play by calling the startConnection() method.                    Log.d(TAG, "consume init onBillingServiceDisconnected")                }            })        }    }    /**     * 补单操作 查询购买交易,以确保所有购买交易都得到成功处理,如购买未发货,或者未消耗     */    private fun queryPurchases() {        if (billingClient.isReady) {            billingClient.queryPurchasesAsync(                SkuType.INAPP            ) { billingResult, mutableList ->                if (billingResult.responseCode == BillingResponseCode.OK) {                    if (mutableList.isNullOrEmpty()) {                        Log.d(TAG, "queryPurchases null")                    } else {                        for (i in 0 until mutableList.size) {                            Log.d(TAG, "queryPurchases init " + mutableList[i].purchaseState)                            if (mutableList[i].purchaseState == Purchase.PurchaseState.PURCHASED) {                                //已购买,消耗即可                                consume2(mutableList[i].purchaseToken)                            }                        }                    }                } else {                    Log.d(TAG, "queryPurchases error code" + billingResult.responseCode)                }            }        } else {            billingClient.startConnection(object : BillingClientStateListener {                override fun onBillingSetupFinished(billingResult: BillingResult) {                    if (billingResult.responseCode == BillingResponseCode.OK) {                        //BillingClient准备好了。你可以在这里查询购买情况。                        Log.d(TAG, "queryPurchases init 连接成功")                    } else {                        Log.d(TAG, "queryPurchases init 连接失败 code:" + billingResult.responseCode)                    }                }                override fun onBillingServiceDisconnected() {                    // Try to restart the connection on the next request to                    // Google Play by calling the startConnection() method.                    Log.d(TAG, "queryPurchases init onBillingServiceDisconnected")                }            })        }    }    /**     * google支付     */    fun googlePay() {        //向服务端获取订单ID 开始支付purchase("sku","orderid")    }    fun release() {        if (billingClient.isReady) {            billingClient.endConnection();        }        mPayCallBack = null        Log.d(TAG, "billingClient release")    }}

标签: 消耗 商品 订单

发表评论 (已有0条评论)

还木有评论哦,快来抢沙发吧~