道远石头
道远石头
  • 发布:2022-06-30 16:14
  • 更新:2022-07-08 13:02
  • 阅读:690

ios下苹果支付首次支付会无法正确的执行回调

分类:uni-app

ios下使用苹果支付的时候,如果是首次,那么会让你选择支付方式,我选择的是微信快捷支付,一步步完成微信快捷支付签约后,苹果支付会提示我支付完成,但是uniapp中,则会进入fail中,这导致经常会有用户反馈支付问题,我买也不得已去appstore中查询订单,然后给用户再手动加一个订单,报错如截图。

特别注明:在沙盒账号状态下,是没有问题的,每次都可以成功

      async payInIOS() {  
            uni.showLoading({  
                mask: true,  
                title: '支付中'  
            });  
            uni.requestPayment({  
                provider: 'appleiap',  
                orderInfo: {  
                    productid: this.goodMap[this.selectedGoods[0]].productid  
                },  
                success: iapTransaction => {  
                    uni.hideLoading();  
                    this.$refs.popup.close();  
                    uni.showToast({  
                        title: '支付成功',  
                        icon: 'none'  
                    });  
            if (this.isIOS && !this.isLogin) {  
            iapTransaction.device_code = this.$store.state.uuid;  
            }  
                    request({  
                        url: `${API.order}/ios`,  
                        method: 'POST',  
                        data: iapTransaction  
                    }) .then((res) => {  
            uni.hideLoading();  
            uni.redirectTo({  url: '/pages/vip/success' });   
                    }) .catch(e => {  
            uni.showModal({  
                content: `err:${JSON.stringify(e)}`,  
                showCancel: false  
            })  
                        uni.hideLoading();  
                     });  
                },  
                fail: err => {  
                    uni.hideLoading();  
                    uni.showModal({  
            content: "支付完成: " + JSON.stringify(err),  
            showCancel: false  
            })  
                }  
            });  
        }

除了首次支付之外,后续的支付测试,也有几率会出现,支付成功,但是回调没进去,导致界面一直处于支付中的状态

2022-06-30 16:14 负责人:无 分享
已邀请:
DCloud_uniAD_HDX

DCloud_uniAD_HDX

详细描述下操作和整个支付流程,是否为首次绑卡?

我们目前正在优化整个支付逻辑,解决某些情况下订单丢失问题

  • 道远石头 (作者)

    1、首次绑卡,几乎是必现,步骤为:唤起苹果支付 - 确认后选择支付方式 - 选择微信快捷支付 - 完成微信快捷支付 - 苹果提示快捷支付签约成功 - 提示支付完成(这时没有自动返回到app)- 我手动切换到app - 出现失败的提示(实际是已经付款成功了)


    2、已绑过卡,偶现,操作步骤:唤起苹果支付 - 确定购买并付款 - 一直处于等待中(此时已付款成功,但未走回调)- 我手动退出 - 再次购买 - 苹果直接提示购买成功并执行了回调(我并未付款,看起来像是上次的付款回调出发了,但用户肯定不会像我这么去再次购买)

    2022-06-30 18:21

  • DCloud_uniAD_HDX

    回复 2***@qq.com: 了解了,我们改进后这些问题都可以解决

    2022-07-01 19:20

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 期望下个版本里可以解决

    2022-07-05 17:46

DCloud_uniAD_HDX
  • 道远石头 (作者)

    非常感谢,我重新打包试一下

    2022-07-09 09:51

  • 道远石头 (作者)

    还有一个问题,我设置了manualFinishTransaction: true,首次绑卡支付失败后,通过restoreComplateRequest可以拿到订单,但是执行完finishTransaction(确认成功,因为进入了成功的回调函数),但是下次调用restoreComplateRequest仍然可以拿到订单,期望关闭订单后,下次就应该拿不到

    2022-07-11 14:21

  • DCloud_uniAD_HDX

    回复 2***@qq.com: 调用关闭订单后,订单不一定能实时关闭,苹果的服务器可能有延时,建议方案将订单交易id在服务器数据库做标记,如果已经处理过了,就在调用一次关闭或忽略掉,不用提示用户

    2022-07-11 14:26

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 调用关闭订单后,过了一天仍然还能查询到,这仍然是延时的问题吗?

    2022-07-12 10:25

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 我上面列举的第二种偶现情况,现在仍然存在,苹果提示支付完成,点击确定后,没有回调,是否是因为苹果那边没有响应导致了你们也未给前台回调?

    2022-07-12 15:09

  • DCloud_uniAD_HDX

    回复 2***@qq.com: 是否购买了相同产品且上次的订单未关闭?

    2022-07-13 17:54

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 对的,我现在一直是在正式环境(非沙盒)测试支付,我在appstore创建了一个1美元的订阅产品。

    流程是:唤起苹果支付 --- 首次支付绑卡 --- 支付完成 --- uni支付进入fail事件 --- 调用restoreComplateRequest查询订单 --- 查询到订单做业务处理 --- 调用finishTransaction关闭订单 --- 1天后我再次购买这个商品 --- 唤起苹果支付 --- 取消购买 --- 进入uni支付的fail事件 --- 调用restoreComplateRequest仍然可以查询到订单(而且2天后也依然可以查到,似乎订单并没有关闭)

    2022-07-14 09:38

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 你好,有确认问题吗

    2022-07-18 09:43

  • DCloud_uniAD_HDX

    回复 2***@qq.com: 提供一个测试工程

    2022-07-20 11:22

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 我私信发你了

    2022-08-09 13:53

  • 道远石头 (作者)

    回复 DCloud_uniAD_HDX: 什么时候有空帮看下呢

    2022-08-12 16:31

要回复问题请先登录注册