更换苹果支付模式

This commit is contained in:
@fawn-nine
2024-07-19 13:29:35 +08:00
parent 54694548f4
commit a582e56af5
4 changed files with 99 additions and 109 deletions

View File

@@ -546,14 +546,6 @@
"navigationBarTitleText" : "工单提交页面",
"enablePullDownRefresh": true
}
},
{
"path" : "pages/stsViode/index/index",
"style" :
{
"navigationBarTitleText" : "STS加密视频播放页面",
"enablePullDownRefresh": true
}
}
],
"globalStyle": {
@@ -607,8 +599,8 @@
"current": 0, //当前激活的模式(list 的索引项)
"list": [
{
"name": "sts测试", //模式名称
"path": "pages/stsViode/index/index", //启动页面,必选
"name": "", //模式名称
"path": "", //启动页面,必选
"query": "" //启动参数在页面的onLoad函数里面得到
}
]

View File

@@ -188,7 +188,7 @@
// if (!that.checking) {
// that.checking = true
// console.log(this.iapChannel, 'this.iapChannel')
await this.iapChannel.restoreComplateRequest({
await this.iapChannel.restoreCompletedTransactions({
manualFinishTransaction: true
}, function(results) {
// console.log(that.checking)
@@ -255,62 +255,87 @@
}
// console.log(this.radioValue)
},
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);
}
});
})
},
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 通道
}
});
})
},
async iphonepay() {
const that = this;
// 如果ios已经绑定支付信息就直接支付如果没有绑定就需要先绑定
uni.showLoading({
title:'检测支付环境'
title:"检测支付环境"
})
// console.log("检测支付环境...");
plus.payment.getChannels(async (channels) => {
console.log(channels, "channels");
for (var i in channels) {
if (channels[i].id === "appleiap") {
that.iapChannel = channels[i];
// 先检测有没有未完成的订单
uni.showLoading({
title:'检测历史订单'
})
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)
// console.log('that.checking',that.checking)
/// 限制调用
}
}
});
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;
const that = this;
console.log(that.stepsCj.priceTypeId, 88888888);
// ['xxxxx'] 是平台申请拿到的内购商品的id
let IAPOrders = [];
IAPOrders.push("p"+that.stepsCj.priceTypeId);
console.log(IAPOrders, "IAPOrders");
IAPOrders.push('p' + that.stepsCj.priceTypeId);
// console.log(IAPOrders, "IAPOrders");
// 新建订单
uni.showLoading({
title: "正在创建订单",
mask: true,
});
that.iapChannel.requestOrder(
that.iapChannel.requestProduct(
IAPOrders,
function(event) {
// uni.hideLoading()
@@ -330,47 +355,20 @@
}
);
},
topay(id) {
const that = this;
async topay(id) {
const that = this;
uni.showLoading({
title: "正在支付",
mask: true,
});
plus.payment.request(
that.iapChannel, {
});
let orderInfo = {
productid: id,
username: that.orderSn, // 用户标识/订单标识
quantity:1,
manualFinishTransaction: true, // 3.5.1+ 支持,设置此参数后需要开发者主动关闭订单,参见下面的关闭订单方法 finishTransaction()
},
function(result) {
// that.checking = false
that.transaction = result;
// 支付成功result 为 IAP商品交易信息对象 IAPTransaction 需将返回的支付凭证传给后端进行二次认证
that.iapCheck(result);
},
function(e) {
// that.checking = false
console.log("错误回调", e);
if (e.code == 2) {
uni.showToast({
title:'取消支付,内购订单即将关闭',
icon:'none'
})
// 用户未绑定支付方式app内支付流程结束系统弹出框引导用户绑定支付方式此过程将跳转到系统应用 AppStore 进行绑定支付方式,绑定成功同步支付成功,用户成功付款
// plus.runtime.openURL("https://apps.apple.com/account/billing");
} else {
uni.showToast({
title:'支付失败,内购订单即将关闭',
icon:'none'
})
console.log('其他支付错误',e);
}
// that.finishTransaction(result);
that.restoreComplateRequest()
}
);
this.transaction = await this.requestPayment(orderInfo)
console.log('支付后的that.transaction',this.transaction);
},
iapCheck(result) {
let that = this;
@@ -401,12 +399,7 @@
.then((res) => {
console.log(JSON.stringify(res));
if (res.code == 0) {
uni.hideLoading()
// that.userInfo.restoreFlag == true ?
// that.setUserInfo({
// restoreFlag: false
// }) :
// "";
uni.hideLoading()
uni.showToast({
title:'充值成功!',
icon:'success'

View File

@@ -35,10 +35,7 @@
<text>吴门医述</text>
</div>
</view>
</view>
<view class="">
<button @click="onPageJump('pages/stsViode/index/index')">进入sts播放页面</button>
</view>
</view>
<view class="newLeve2">
<view class="home_nar nomargin" style="padding: 0; background-color: #fff;">
<view class="flexbox">

View File

@@ -11,29 +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) {
// 判断是否苹果支付1
if (channels[i].id === "appleiap") {
console.log("存在苹果内购channels",channels, );
that.iapChannel = channels[i];
// 先检测有没有未完成的订单
that.restoreComplateRequest()
}else{
console.log('安卓客户端');
}
}
});
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) {
@@ -50,7 +58,7 @@ var iap = {
// return false
// 已经支付,但是没有走逻辑的内购订单 就发给后台做验证
that.iapCheck(item, index)
// that.finishTransaction(item)
// that.finishTransaction(item)
} else {
// 其他状态的内购订单
that.finishTransaction(item)