diff --git a/manifest.json b/manifest.json index 3cb6a12..5ad9622 100644 --- a/manifest.json +++ b/manifest.json @@ -12,8 +12,8 @@ "src" : "图片路径" } ], - "versionName" : "1.2.50", - "versionCode" : 1250, + "versionName" : "1.2.51", + "versionCode" : 1251, "app-plus" : { "compatible" : { "ignoreVersion" : true diff --git a/pages/peanut/reCharge.vue b/pages/peanut/reCharge.vue index 5b4f5f9..b240d9d 100644 --- a/pages/peanut/reCharge.vue +++ b/pages/peanut/reCharge.vue @@ -234,117 +234,120 @@ } // console.log(this.radioValue) }, - async iphonepay() { - const that = this - // 如果ios已经绑定支付信息,就直接支付,如果没有绑定,就需要先绑定 - uni.showLoading({ - title: '检测支付环境' - }) - plus.payment.getChannels(async (channels) => { - // console.log(channels, 'channels') - for (var i in channels) { - // 判断是否苹果支付1 - if (channels[i].id === 'appleiap') { - that.iapChannel = channels[i] - uni.showLoading({ - title: '检测历史订单' + getProvider() { + return new Promise((resolve, reject) => { + uni.getProvider({ + service: 'payment', + success: (res) => { + const iapChannel = res.providers.find((channel) => { + return (channel.id === 'appleiap') }) - await that.restoreComplateRequest() - var timer = setInterval(() => { - console.log('检测历史订单数量'); - that.iapChannel.restoreComplateRequest({ - manualFinishTransaction: true - }, function(results) { - if (results.length > 0) { - console.log('未处理订单还存在,继续轮询...'); - } else { - console.log('没有历史订单,开始请求新订单..'); - that.requestOrder(); - clearInterval(timer) - console.log('timer清除了吗', timer); - } - }) - }, 1000) + resolve(iapChannel); + // 如果 iapChannel 为 null,说明当前包没有包含iap支付模块。注意:HBuilder基座不包含 iap 通道 } - // else{ - // uni.showToast({ - // title:'支付环境不支持IAP', - // icon:'none' - // }) - // } - } + }); }) - + }, + requestPayment(orderInfo) { + let that = this + return new Promise((resolve, reject) => { + uni.requestPayment({ + provider: 'appleiap', + orderInfo: orderInfo, + success: (res) => { + that.iapCheck(res); + resolve(res); + }, + fail: (err) => { + uni.hideLoading() + // console.log('其他支付错误', err); + that.restoreComplateRequest() + if (err.code == 2) { + uni.showToast({ + title: '取消支付,内购订单即将关闭', + icon: 'none' + }) + } else { + uni.showToast({ + title: '支付失败,内购订单即将关闭', + icon: 'none' + }) + + } + reject(err); + } + }); + }) + }, + async iphonepay() { + const that = this; + uni.showLoading({ + title:"检测支付环境" + }) + console.log("检测支付环境..."); + this.iapChannel = await this.getProvider() + console.log('that.iapChannel',this.iapChannel); + if(this.iapChannel){ + this.requestOrder(); + }else{ + uni.hideLoading() + uni.showToast({ + title:'不支持内购支付', + icon:'none' + }) + console.log("获取iap支付通道失败:" + e.message, that.iapChannel); + } }, requestOrder() { uni.showLoading({ - title: '获取商品信息', - mask: true - }) - const that = this - console.log(that.stepsCj.priceTypeId, 88888888) - // ['xxxxx'] 是平台申请拿到的内购商品的id - let IAPOrders = [] + title: "获取商品信息", + mask: true, + }); + const that = this; + console.log(that.stepsCj.priceTypeId, 88888888); + // ['xxxxx'] 是平台申请拿到的内购商品的id + let IAPOrders = []; IAPOrders.push(that.stepsCj.priceTypeId+''); - console.log(IAPOrders, 'IAPOrders') + // console.log(IAPOrders, "IAPOrders"); // 新建订单 uni.showLoading({ title: "正在创建订单", mask: true, }); - that.iapChannel.requestOrder(IAPOrders, function(event) { - // uni.hideLoading() - console.log(event, 'event') - for (var index in event) { - var OrderItem = event[index] - // console.log(OrderItem, 'OrderItem') - console.log(OrderItem.productid, 'OrderItem.productid') - that.topay(OrderItem.productid) + that.iapChannel.requestProduct( + IAPOrders, + function(event) { + // uni.hideLoading() + console.log(event, "event"); + for (var index in event) { + var OrderItem = event[index]; + // console.log(OrderItem, 'OrderItem') + console.log(OrderItem.productid, "OrderItem.productid"); + that.topay(OrderItem.productid); + } + }, + function(erroemsg) { + uni.showToast({ + title: "商品获取失败", + icon: "none", + }); } - }, function(erroemsg) { - uni.showToast({ - title: "商品获取失败", - icon: 'none' - }) - }) + ); }, - topay(id) { - const that = this + async topay(id) { + const that = this; uni.showLoading({ title: "正在支付", mask: true, - }); - // this.setUserInfo({ - // restoreFlag: true - // }); - // console.log(this.userInfo, '更新后的用户信息') - plus.payment.request(that.iapChannel, { - productid: id, - username: that.orderSn, // 用户标识/订单标识 - manualFinishTransaction: true // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction() - - }, function(result) { - // restoreFlag = false; // 支付成功清除标记 restoreFlag = false - that.transaction = result - // 支付成功,result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证 - that.iapCheck(result) - }, function(e) { - uni.hideLoading() - console.log('错误回调', e) - if (e.code == 2) { - uni.showToast({ - title:'取消支付,内购订单即将关闭', - icon:'none' - }) - }else { - uni.showToast({ - title:'支付失败,内购订单即将关闭', - icon:'none' - }) - console.log('其他支付错误',e); + }); + let orderInfo = { + productid: id, + username: that.orderSn, // 用户标识/订单标识 + quantity:1, + manualFinishTransaction: true, // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction() } - that.restoreComplateRequest() - }); + this.transaction = await this.requestPayment(orderInfo) + console.log('支付后的that.transaction',this.transaction); }, iapCheck(result) { let that = this diff --git a/utils/myIapCheck.js b/utils/myIapCheck.js index e529008..180aaa2 100644 --- a/utils/myIapCheck.js +++ b/utils/myIapCheck.js @@ -11,28 +11,37 @@ const ComplateRequestArr = [] var iap = { + getProvider() { + return new Promise((resolve, reject) => { + uni.getProvider({ + service: 'payment', + success: (res) => { + const iapChannel = res.providers.find((channel) => { + return (channel.id === 'appleiap') + }) + resolve(iapChannel); + // 如果 iapChannel 为 null,说明当前包没有包含iap支付模块。注意:HBuilder基座不包含 iap 通道 + } + }); + }) + }, // 检测支付通道 - getChannels(){ + async getChannels(){ const that = this; console.log('检测支付通道') - plus.payment.getChannels(async (channels) => { - for (var i in channels) { - console.log("channels",channels, ); - // 判断是否苹果支付1 - if (channels[i].id === "appleiap") { - console.log("存在苹果内购channels",channels, ); - that.iapChannel = channels[i]; - // 先检测有没有未完成的订单 - that.restoreComplateRequest() - } - } - }); + this.iapChannel = await this.getProvider() + if(this.iapChannel){ + // this.requestOrder(); + this.restoreComplateRequest() + }else{ + console.log("不支持iap支付"); + } }, // 检测是否有未关闭订单 restoreComplateRequest() { let that = this console.log('检测未完成订单') - this.iapChannel.restoreComplateRequest({ + this.iapChannel.restoreCompletedTransactions({ manualFinishTransaction: true }, function(results) { if (!that.checking) { @@ -49,7 +58,7 @@ var iap = { // return false // 已经支付,但是没有走逻辑的内购订单 就发给后台做验证 that.iapCheck(item, index) - // that.finishTransaction(item) + // that.finishTransaction(item) } else { // 其他状态的内购订单 that.finishTransaction(item) @@ -110,7 +119,7 @@ var iap = { .catch((e) => { console.log('后台验证失败=>',e); uni.showModal({ - title: "提示", + title: "提示", cancelColor:'#0081ff', content: `您的账户下存在验证异常的订单(订单编号为:${e.data.orderId}),可尝试稍后重启app,如不能解决您的问题,可联系官方客服`, cancelText:'已验证关闭订单',