更新记录

1.2.0(2025-04-12)

1、使用新版本谷歌结算库:7.1.1 2、新增支持更新订阅方法 3、新增显示应用内消息方法

1.1.1(2023-08-16)

1、解决多次执行初始化方法,导致支付结果多次返回问题。

1.1.0(2023-07-31)

新版本发布

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 14.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


Google支付 Google Pay 谷歌支付(支付内购,订阅,支持V5,V6,V7。插件有问题请联系QQ:1684729125)

插件仅支持Android版本

插件提供的方法 -- 详情请参考demo

谷歌官方政策:从2025 年 8 月 31 日起,所有新应用都必须使用结算库版本 7 或更高版本。自 2025 年 11 月 1 日起,现有应用的所有新版本都必须使用结算库版本 7或更高版本。

谷歌结算库版本:7.1.1

相关文档

插件方法,参数参考demo或谷歌文档

  • doInit
    • 初始化
  • doQuerySku
    • 查询sku
  • doPay
    • 支付
  • doPayAll
    • 支付,支持更多参数
  • doUpdateSubs
    • 更新订阅
  • doConsume
    • 确认交易--消耗品
  • doAcknowledgePurchase
    • 确认交易--非消耗品(订阅商品)
  • doQueryPurchases
    • 查询应用内购买的当前拥有的商品的购买详情
    • 仅返回有效订阅和未消费(确认交易)的一次性购买
  • doShowInAppMessages
    • 显示应用内消息

引用插件

const GooglePayV5 = uni.requireNativePlugin('GT-GooglePay-V5__PayModule');

使用插件代码如下,更多代码请参考Demo

/**
 * 初始化
 */
doInit() {
    let that = this;
    GooglePayV5.doInit({}, (e) => {
        if (e.code == 200) {
            // 初始化成功
            console.log("初始化成功");
            that.showToast("初始化成功");
        } else {
            // 初始化失败
            console.log("初始化失败");
            that.showToast("初始化失败");
        }
    });
},

/**
 * 查询sku
 */
doQuerySku() {
    let that = this;
    let params = {};
    if (this.isInapp) {
        //消耗商品
        params = {
            inapp: ["google_product_21", "google_product_11""], // 与subs二选一
            // subs: ["10000"],
        };
    } else {
        //订阅商品
        params = {
            subs: ["10000"],
        };
    }
    GooglePayV5.doQuerySku(params, (e) => {
        console.log("查询结果:", e);
        that.showToast("查询结果:" + JSON.stringify(e));
        if (e.code == 200) {
            // 查询成功
            // e.list; // 查询结果, array
            that.prdList = e.list;
        } else {
            // 查询失败
            console.log("查询失败");
        }
    });
},

/**
 * 发起支付
 * 支付参数为查询sku结果的某一项
 */
doPay() {
    let that = this;
    console.log("do pay function.");
    if (
        that.prdList == null ||
        that.prdList.length == 0 ||
        !that.prdList[0].productId
    ) {
        that.showToast("产品不能为空,不可支付");
        return;
    }

    let payPrams = {
        productId: that.prdList[0].productId,
    };

    // V7版本,非订阅商品,不用传offerToken
    // V7版本,订阅产品必须传offerToken值,且不能为空,offerToken的值为doQuerySku方法返回
    if (!this.isInapp) {
        // payPrams.offerToken =
        //  "AQ2SJC/E1M9cIzCkpjba57hkz81a4vr9sGx7BKy+agizCT2IVOBCdMsYO3xiozVv01+0XYNhbKfZpAGUJkys"
        payPrams.offerToken =
            that.prdList[0].subscriptionOfferDetails[0].offerToken;
    }
    GooglePayV5.doPay(payPrams, (e) => {
        console.log("支付结果:", e);
        that.showToast("支付结果:" + JSON.stringify(e));
        if (e?.code == 200 && e?.data) {
            // 支付成功,可以确认交易,必须purchaseState才调用
            if (e.data[0].purchaseState == 1) {
                console.log("支付成功,可以确认交易");
                that.payList = e.data;
            } else { // purchaseState==2
                // 调用doQueryPurchases方法查询订单状态,purchaseState==1后才可以确认
                console.log("支付成功,订单状态为等待中,暂不可确认交易");
            }
        } else {
            // 支付失败
            console.log("支付失败: ", e);
        }
    });
},

/**
 * 发起支付2
 * 支付参数为查询sku结果的某一项
 */
doPayAll() {
    let that = this;
    console.log("do pay function.");
    if (
        that.prdList == null ||
        that.prdList.length == 0 ||
        !that.prdList[0].productId
    ) {
        that.showToast("产品不能为空,不可支付");
        return;
    }

    let payPrams = {
        productId: that.prdList[0].productId,
        accountId: "", // 可选,用户Id
        profileId: "", // 可选,个人资料Id
    };
    // V7版本,非订阅商品,不用传offerToken
    // V7版本,订阅产品必须传offerToken值,且不能为空,offerToken的值为doQuerySku方法返回
    if (!this.isInapp) {
        // payPrams.offerToken =
        //  "AQ2SJC/E1M9cIzCkpjba57hkz81a4vr9sGx7BKy+agizCT2IVOBCdMsYO3xiozVv01+0XYNhbKfZpAGUJkys"
        payPrams.offerToken =
            that.prdList[0].subscriptionOfferDetails[0].offerToken;
    }

    GooglePayV5.doPayAll(payPrams, (e) => {
        console.log("支付结果:", e);
        that.showToast("支付结果:" + JSON.stringify(e));
        if (e?.code == 200 && e?.data) {
            // 支付成功,可以确认交易,必须purchaseState才调用
            if (e.data[0].purchaseState == 1) {
                console.log("支付成功,可以确认交易");
                that.payList = e.data;
            } else { // purchaseState==2
                // 调用doQueryPurchases方法查询订单状态,purchaseState==1后才可以确认
                console.log("支付成功,订单状态为等待中,暂不可确认交易");
            }
        }  else {
            // 支付失败
            console.log("支付失败: ", e);
        }
    });
},

/**
 * 更新订阅,更新订阅后,也要确认交易才可以
 */
doUpdateSubs() {
    let that = this;
    console.log("do pay function.");

    if (that.isInapp) {
        that.showToast("应用内商品不支持更新订阅");
        return;
    }

    if (
        that.prdList == null ||
        that.prdList.length == 0 ||
        !that.prdList[0].productId
    ) {
        that.showToast("产品不能为空,不可支付");
        return;
    }

    // V7版本必须传offerToken值,且不能为空,offerToken的值为doQuerySku方法返回
    let params = {
        productId: that.prdList[0].productId,
        offerToken: that.prdList[0].subscriptionOfferDetails[0].offerToken,
        // 要更改的订阅的PurchaseToken
        oldPurchaseToken: "fgdhindmocfgigfcjdbdphgo.AO-J1Ow0Dd7GdaVuKexAQR2lazs3hBzkAuT6772_kKYGIm-stoxtsIf-CLVVSs_sReR3ZiPyWqKgnButkSAZ6rV6dBOrpFPpOg",
        replacementMode: 0,
    };
    GooglePayV5.doUpdateSubs(params, (e) => {
        console.log("更新订阅结果:", e);
        that.showToast("更新订阅结果:" + JSON.stringify(e));
        if (e.code == 200) {
            // 支付成功
            console.log("更新订阅成功: ", e);
            if (e && e.data) {
                that.payList = e.data;
            }
        } else {
            // 支付失败
            console.log("更新订阅失败: ", e);
        }
    });
},

/**
 * 确认交易,消耗品
 * 实际开发中payList[0]请使用具体的某个订单,demo中为方便测试不严谨写法
 */
doConsume() {
    let that = this;
    console.log("do pay function.",that.payList);
    // purchaseState==1才调用确认交易
    if(that.payList[0].purchaseState != 1){
        that.showToast("订单状态未就绪")
        return
    }
    if(that.payList[0].acknowledged){
        that.showToast("该订单已确认交易过了")
        return
    }

    if (
        that.payList == null ||
        that.payList.length == 0 ||
        !that.payList[0].purchaseToken
    ) {
        that.showToast("支付信息不能为空");
        return;
    }
    //purchaseToken参数是支付结果中的purchaseToken字段或token字段
    GooglePayV5.doConsume({
            purchaseToken: that.payList[0].purchaseToken || that.payList[0].token,
        },
        (e) => {
            console.log("Consume结果:", e);
            that.showToast("Consume结果:" + JSON.stringify(e));
            if (e.code == 200) {
                console.log("Consume成功");
            } else {
                console.log("Consume失败");
            }
        }
    );
},

/**
 * 确认交易,非消耗品
 * 实际开发中payList[0]请使用具体的某个订单,demo中为方便测试不严谨写法
 */
doAcknowledgePurchase() {
    let that = this;
    console.log("do pay function.");
    if (that.payList == null || that.payList.length == 0) {
        that.showToast("支付信息不能为空");
        return;
    }
    if(that.payList[0].purchaseState != 1){
        that.showToast("订单状态未就绪")
        return
    }
    if(that.payList[0].acknowledged){
        that.showToast("该订单已确认交易过了")
        return
    }

    //original,signature两个参数不能为空,参数来自支付结果
    //original参数是支付结果中的original字段或originalJson字段
    GooglePayV5.doAcknowledgePurchase({
            original: that.payList[0].original || that.payList[0].originalJson || "",
            signature: that.payList[0].signature,
        },
        (e) => {
            console.log("acknowledgePurchase结果:", e);
            that.showToast("acknowledgePurchase结果:" + JSON.stringify(e));
            if (e.code == 200) {
                console.log("acknowledgePusrchase成功");
            } else {
                console.log("acknowledgePurchase失败");
            }
        }
    );
},

/**
 * 查询购买交易
 * 返回您在应用内购买的当前拥有的商品的购买详情。
 * 仅返回有效订阅和未消费的一次性购买。
 * 
 * acknowledged  字段是是否已确认交易 true false
 * purchaseState 是订单状态  1--支付成功,可确认交易,2--等待中
 */
doQueryPurchases() {
    let that = this;
    console.log("do doQueryPurchases function.");
    //参数inapp或subs
    GooglePayV5.doQueryPurchases(this.isInapp ? "inapp" : "subs", (e) => {
        console.log("queryPurchases结果:", e);
        that.showToast("queryPurchases结果:" + JSON.stringify(e));
        if(e?.purchasesList){
            // 支付成功后,如果没确认交易,doQueryPurchases查询到订单且订单purchaseState==1,再调用确认交易方法
            that.payList = e.purchasesList
        }
    });
},

/**
 * 显示应用内消息
 */
doShowInAppMessages() {
    let that = this;
    console.log("do doShowInAppMessages function.");
    //参数inapp或subs
    GooglePayV5.doShowInAppMessages({
            inAppMessageCategoryId: 2, //0或2,详情参考谷歌文档
        },
        (e) => {
            console.log("doShowInAppMessages结果:", e);
            that.showToast("doShowInAppMessages结果:" + JSON.stringify(e));
            if (e.code == 200) {
                // responseCode为谷歌返回的结果码,详情参考谷歌文档
                if (e.data?.responseCode == 0) {
                    // NO_ACTION_NEEDED
                    //  The flow has finished and there is no action needed from developers.
                } else if (e.data?.responseCode == 1) {
                    // SUBSCRIPTION_STATUS_UPDATED
                }
            }
        }
    );
},

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件支付功能使用Google SDK,参考其官方网站 https://policies.google.com/privacy

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问