流云决
流云决
  • 发布:2022-06-01 21:41
  • 更新:2022-06-13 22:53
  • 阅读:798

【报Bug】restoreComplateRequest丢单无法补单bug

分类:uni-app

产品分类: 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拿不到内容,
就无法补单造成丢单,希望严肃处理此问题,附上代码

2022-06-01 21:41 负责人:DCloud_uni-ad_HDX 分享
已邀请:
FireFlyTest

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
  • 流云决 (作者)

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

    2022-06-07 19:30

DCloud_iOS_XHY

DCloud_iOS_XHY

  • 流云决 (作者)

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

    2022-06-07 19:31

d***@col.com

d***@col.com

我也遇到了次问题

该问题目前已经被锁定, 无法添加新回复