微信小程序app嵌入h5页面的问题

项目背景:我们要做投保的页面,点击保存时要调用小程序的支付页面,通过小程序去支付

 

我方使用的技术框架 : VUE+Mint-ui

小程序使用矿机 :UNIAPP

在唤起支付时,第一种方案是引入微信的jsdk,通过

wx.miniProgram.navigateTo({
  url: strGoPath
})

发现偶尔会失效

第二种方案是引入uni.webview.1.5.2.js

uni.navigateTo({
  url: strGoPath,
  success: function(res) {
    console.log("调用第三方支付成功!")
  },
  fail: function(res) {
    console.log("调用第三方支失败付!", res)
  }
})

此种方法也会偶尔失效,调用不到小程序的支付,通过百度说是可能缺少complete方法,于是

uni.navigateTo({
  url:  strGoPath,
  success: function(res) {
    console.log("调用第三方支付成功!")
  },
  fail: function(res) {
    console.log("调用第三方支失败付!", res)
  },
  complete: function(res) {
    console.log(res)
  }
})

 

此种方法也会有偶尔换不起。

第三种方案,增加延时方法用redirectTo,发现还是有1%的时候,换不起支付

setTimeout(function() {
  uni.redirectTo({
    url: strGoPath,
    success: function(res) {
      console.log("调用第三方支付成功!")
    },
    fail: function(res) {
      console.log("调用第三方支失败付!", res)
    },
    complete: function(res) {
      console.log(res)
    }
  })
}, 500)

 

现在用的方案声明全局 wx.miniProgram.redirectTo

 

 

 在methods中添加方法,在保存后调用openWx

openWx(pageUrl){
  let This = this;
  // 若没有唤起支付,关闭弹框
  setTimeout(function() {
    console.log("唤起支付失败!已超过3s");
    This.$indicator.close();
  }, 3000);

  if(!wxR){
    console.info('wx.miniProgram.redirectTo 加载失败');
  }

  setTimeout(()=>{
    wxR({
      url: pageUrl,
      success: function(res) {
        console.info("调用第三方支付成功!pageUrl="+pageUrl)
      },
      fail: function(res) {
        console.info("调用第三方支付失败!", res+pageUrl)
      },
      complete: function(res) {
        try{
          This.strGoPath = ""
          console.log("打开页面完成complete", e)
          This.$indicator.close();
        }catch(e){
          This.strGoPath = ""
          console.log("打开页面完成complete报错", e)
      }
    }
   });
  },300);
},

posted @ 2021-05-06 09:51  逩跑得前端小学生  阅读(658)  评论(0)    收藏  举报