关于javascript:uniappvue-实现苹果应用内支付

4次阅读

共计 2415 个字符,预计需要花费 7 分钟才能阅读完成。

背景

Appstore 审核报 PGPay SDK 不容许上架的问题
A:数字类产品(比方购买会员等不须要配送实物的商品),Apple 规定必须应用苹果 IAP 利用内领取,给 Apple 分成 30%。打包的时候不要勾选微信或支付宝等其余领取形式。如果你提交的包里蕴含了微信支付宝等领取的 sdk,即便没应用,Appstore 也会认为你有暗藏形式,当前会绕过 iap,不给 Apple 分成,因而回绝你的 App 上线。云打包时,manifest 里选上领取模块,但 sdk 配置里去掉微信领取和支付宝领取。很多开发者的 Android 版是蕴含微信和支付宝领取的,此时留神离开判断。

实现 iap 领取

1.Appstore 创立我的项目

在苹果开发者核心 https://developer.apple.com/a…

2. 进入创立的我的项目创立内购我的项目

内购我的项目有四种类型:

消耗型我的项目

用户能够购买各种消耗型我的项目 (例如游戏中的生命或宝石) 从而进一步摸索 app。消耗型我的项目只可应用一次,应用之后即生效,可再次购买。

非消耗型我的项目

用户可购买非消耗型我的项目,解锁更多 app 内的进阶性能。非消耗型我的项目只需购买一次,不会过期 (例如修图 app 中的其余滤镜)。Apple 能够托管您的非消耗型产品。

主动续期订阅

用户可购买周期性继续的服务或更新的内容 (例如云存储或每周更新的杂志)。此类订阅会主动续期,除非用户抉择勾销。

非续期订阅

用户可购买有时限性的服务或内容 (例如线上播放内容的季度订阅)。此类的订阅不会主动续期,用户须要逐次续订。

留神:内购我的项目的 productid 是惟一的 不可反复。

创立实现之后:

3.uniapp 实现 iap 领取:

大抵流程:
首先调用 plus.payment.getChannels 获取领取通道,IAP 领取通道的 ID 为“appleiap”
调用 ID 为“appleiap”的 PaymentChannel 对象的 requestOrder 办法,像 Appstore 申请无效的商品详情。留神:需先调用 requestOrder 办法而后在调用 payment.request 办法,否则间接调用 payment.request 将会报错。
调用 plus.payment.request 办法发动领取申请,传入 statement 的参数为 JSON 对象,能够设置如下参数
productid String(必选)要领取的商品的标识(必须是调用 requestOrder 返回的无效的商品标识)
username String(可选)购买商品用户的用户名
quantity String(可选)购买商品的数量,如果不填写默认为 1
调用后端接口校验订单信息

3.1 获取领取通道:
3.2 通过 productid 获取对应商品信息

            plusReady() {
                uni.showLoading({title: "加载中",});
                const that = this;
                const IAPOrders = ["1", "4", "3"];
                //uni-app 中将此 function 里的代码放入 vue 页面的 onLoad 生命周期中
                plus.payment.getChannels(function(channels) {console.log("channels-------------", channels);
                        for (var i in channels) {if (channels[i].id == "appleiap") {console.log("channels[i]-----------", channels[i]);
                                that.iapChannel = channels[i];
                                that.iapChannel.requestOrder(
                                    IAPOrders,
                                    function(event) {console.log(event, event.length);
                                        uni.hideLoading();
                                        for (var j in event) {
                                            that.vipList.push(Object.assign(event[j], {id: event[j].productid,
                                                    goodsName: event[j].title,
                                                })
                                            );
                                            that.goodInfo = that.vipList[0];
                                            console.log(that.vipList);
                                        }
                                    },
                                    function(errormsg) {
                                        console.log(
                                            "获取领取通道失败:" +
                                            JSON.stringify(errormsg) +
                                            "-" +
                                            errormsg.message
                                        );
                                        uni.showToast({title: '获取会员信息失败,请稍后重试'})
                                        uni.navigateBack()
                                        uni.hideLoading();}
                                );
                            }
                        }
                    },
                    function(e) {console.log("获取领取通道失败:" + e.message);
                    }
                );
            }

这里须要留神:
1.manifest.json 中须要勾选利用内领取,打自定义包进行调试
2.IAPOrders 就是创立的内购我的项目 productid 数组

3.3. 调起领取

                    uni.requestPayment({
                        provider: "appleiap",
                        orderInfo: {productid: productid,},
                        success: (result) => {console.log("success--------------------", result);
                            this.getIapPayChecked(result);
                        },
                        fail: (e) => {
                            uni.showToast({title: '领取失败'})
                            that.loading = false;
                        },
                        complete: () => {console.log("payment 完结");
                            that.loading = false;
                        },
                    });

留神:
1. 沙箱环境获取回调工夫较长,须要急躁期待
2. 消耗型我的项目只能购买一次,
3. 如果点击领取始终没有任何反馈,能够试试卸载软件重新安装

正文完
 0