config:invalid signature在IOS中报错,安卓成功

为什么在安卓中生效在IOS中失败?

appId: process.env.APPID, // 必填,公众号的唯一标识
timestamp: timestamp, // 必填,生成签名的时间戳
nonceStr: nonceStr, // 必填,生成签名的随机串nonceStr
signature: createSignature(timestamp, nonceStr), // 必填,签名
jsApiList: ['getLocation', 'scanQRCode', 'closeWindow'] // 必填,需要使用的JS接口列表
scanQRCodeView() {
      var _this = this;
      //扫描二维码点击,调用扫码
      weChatReady().then(() => {
        scanQRCode()
          .then(res => {
            console.log(res, "扫码结果&&&&&&&&&");
            if (res.data.projectId && res.data.spaceId) {
              console.log("判断成功");
              let samaoMatch = {
                projectId: res.data.projectId,
                spaceId: res.data.spaceId
              };
              console.log(res.data.projectId, "res.data.projectId");
              console.log(this, "UUUUUUUUUUUUUUUUUUUU");
              console.log(_this, "PPPPPPPPPPPPPPPPPPP");
              _this.$emit("scanMathc", samaoMatch);
            } else {
              Toast("无效二维码");
              return; //都为空的话,是么都不做
            }
          })
          .catch(err => {
            Toast("扫码失败了");
            console.error(err);
          });
      });
阅读 4.6k
1 个回答
✓ 已被采纳新手上路,请多包涵

因为用的是vue单页spa,在单页spa方面vue的history在iOS中页面地址会始终为第一次进入的链接地址。
而这里的授权会有一个获取openId的过程,所以就会有在iOS中授权失败的问题。
解决思路:

将授权页的地址链接利用vuex保存下来,判断机型,如果是iOS机型就将授权页的链接参数发送给微信权限校验接口,最后返回的结果是成功。
let url = /(Android)/i.test(navigator.userAgent) ? location.href.split('#')[0] : process.env.BASE_URL + process.env.AUTHO_URI + '?code=' + tools.getStorage('code') + '&state=' + encodeURIComponent(tools.getStorage('state'));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题