uni-app restoreComplateRequest丢单无法补单bug

发布于 1周前 作者 gougou168 来自 Uni-App

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 回复

恢复内购确实不好用,恢复不了。


有的是未绑定支付方式, 有的是支付完成后退出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用户支付情况是楼上情况说的那样,社区帖子也有很多,希望官方重视,重视,重视内购!!!

是啊,别人也这样,但是没解决啊

关于丢单的问题请仔细看这个帖子的说明 https://ask.dcloud.net.cn/article/497

请不要敷衍好不好,您认真看贴了吗

我也遇到了次问题

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!