uni-app restoreComplateRequest丢单无法补单bug
uni-app restoreComplateRequest丢单无法补单bug
信息项 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 3.4.13 |
手机系统 | iOS |
手机系统版本号 | iOS 15 |
手机厂商 | 苹果 |
手机机型 | iphonex |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
<template>
<view class="Test-container">
<navbar></navbar>
<view class="btns">
<button type="primary" @click="getChannels">获取支付通道</button>
<button type="primary" @click="restoreComplateRequest" v-if="iap">获取已购买商品</button>
</view>
<view class="list">
<view class="item" v-for="i in product_list" :key="i.productid">
<view class="title">{{i.title}}</view>
<view class="price">{{i.price}}元</view>
<button type="warn" @click="pay(i)">支付</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
iap: null, // 支付通道
ids: ['snsapp1', 'snsapp2', 'snsapp4'], // 应用内购项目产品 ID 数组
product_list: [
{"title":"1元","price":1,"productid":"snsapp1"},
{"title":"6元","price":6,"productid":"snsapp2"},
{"title":"30元","price":30,"productid":"snsapp4"},
] // 应用内购项目列表
};
},
methods: {
// 获取支付通道
getChannels() {
// #ifdef APP-PLUS
plus.payment.getChannels(res => {
let channel = res.find(i => i.id === 'appleiap')
this.iap = channel ? channel : null
this.requestOrder()
}, function(e) {
})
// #endif
},
// 获取内购项目列表
requestOrder() {
// #ifdef APP-PLUS
this.iap.requestOrder(
this.ids,
res => {
this.product_list = res
},
function(errormsg) {
plus.nativeUI.alert("获取应用内购项目失败,请稍后重试。", function() {}, "提示");
}
)
// #endif
},
// 调起支付
pay(i) {
// #ifdef APP-PLUS
plus.payment.request(this.iap, {
productid: i.productid,
optimize: true // 支付时设置 optimize: true
}, result => {
// 支付成功回调
console.log("plus.payment.request-success--------------------",JSON.stringify(results));
}, e => {
// 用户取消支付或者调起支付失败回调
restoreComplateRequest()
});
// #endif
},
// 此方法百分之一万拿不到results,可能是bug
restoreComplateRequest() {
this.iap.restoreComplateRequest({}, results => {
// results 格式为数组存放恢复的IAP商品交易信息对象 IAPTransaction,通用需将返回的支付凭证传给后端进行二次认证
console.log('restoreComplateRequest-results---', JSON.stringify(results))
}, e => {
// 错误回调
console.log('restoreComplateRequest-results ---fail---', JSON.stringify(e))
});
}
}
}
</script>
<style lang="scss">
.Test-container {
padding: 24rpx;
.btns {
button {
margin-bottom: 24rpx;
}
}
.list {
margin-top: 24rpx;
.item {
margin-bottom: 24rpx;
padding: 30rpx;
border-radius: 24rpx;
box-shadow: 0rpx 12rpx 36rpx 0rpx rgba(0, 0, 0, 0.04);
background-color: #252526;
.title {
margin-bottom: 24rpx;
font-size: 36rpx;
font-weight: bold;
color: #FFFFFF;
}
.price {
margin-bottom: 24rpx;
font-size: 36rpx;
font-weight: bold;
color: #FF2C4C;
}
}
}
}
</style>
操作步骤:
- 跑代码
预期结果:
- 拿到丢单的内容
实际结果:
- 空数组
bug描述:
restoreComplateRequest无法补单
当用户未绑定支付方式,或支付完成后退出app,restoreComplateRequest拿不到内容,
就无法补单造成丢单,希望严肃处理此问题,附上代码
9 回复
恢复内购确实不好用,恢复不了。
代码是测试用的,复现出后拿不到results,实际线上app用户支付情况是楼上情况说的那样,社区帖子也有很多,希望官方重视,重视,重视内购!!!
bug bug bug
是啊,别人也这样,但是没解决啊
请不要敷衍好不好,您认真看贴了吗
我也遇到了次问题