<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>
- 发布:2022-06-01 21:41
- 更新:2022-06-13 22:53
- 阅读:798
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 3.4.13
手机系统: iOS
手机系统版本号: iOS 15
手机厂商: 苹果
手机机型: iphonex
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
跑代码
跑代码
预期结果:
拿到丢单的内容
拿到丢单的内容
实际结果:
空数组
空数组
bug描述:
restoreComplateRequest无法补单
当用户未绑定支付方式,或支付完成后退出app,restoreComplateRequest拿不到内容,
就无法补单造成丢单,希望严肃处理此问题,附上代码
7 个回复
FireFlyTest - 萤火虫鸿蒙开发
恢复内购确实不好用,恢复不了。
流云决 (作者)
有的是未绑定支付方式,
有的是支付完成后退出app
有的是正常支持返回
requestPayment:fail Payment_appleiap:Error Domain=SKErrorDomain Code=2 "无法连接iTunes Store" UserInfo={NSLocalizedDescription=无法连接iTunes Store},https://ask.dcloud.net.cn/article/282
内购这么大的东西,真的不知道怎么解决!!!
流云决 (作者)
代码是测试用的,复现出后拿不到results,实际线上app用户支付情况是楼上情况说的那样,社区帖子也有很多,希望官方重视,重视,重视内购!!!
流云决 (作者)
bug bug bug
BoredApe - 有问题就会有答案。
重复问题:https://ask.dcloud.net.cn/question/145082
https://ask.dcloud.net.cn/question/145933
流云决 (作者)
是啊,别人也这样,但是没解决啊
2022-06-07 19:30
DCloud_iOS_XHY
关于丢单的问题请仔细看这个帖子的说明 https://ask.dcloud.net.cn/article/497
流云决 (作者)
请不要敷衍好不好,您认真看贴了吗
2022-06-07 19:31
d***@col.com
我也遇到了次问题