微信sdk之终章

266 阅读2分钟

当当你使用sdk以后你会发现碰到以下这几种情况时候,会使用不了,在ios上报签名错误。andriod上没问题。

  • 1.当spa微信公众号的sdk使用和授权在一个页面上
  • 2.当你在页面上,使用window.location.href时候
  • 3.当你使用redirect的时候。

这几个情况在ios上报签名错误又一个共同的特点。没错。那就是,首次进入系统的页面跟你重定向后的链接不一样了,所以会出现签名错误问题。(ios上刷新,导致sdk签名错误也是同理。)

首先,说下这个问题出现的原因:

spa应用在ios的微信来回切换时候,微信记录的是首次进入的链接,切换路由时候,传给后端的链接都是不变的

知道了这个原因,你会发现,当使用微信登录时候,回调地址中ios会加一些参数,而这些参数你直接在微信中复制链接,是发现不了的。使用微信开发工具,就会发现,授权后的地址中多了code和state参数。

签名错误(是比较后才知道对错的),谁和谁对比呢?就是你传给后端的链接,后端用你这个链接,和随机数,和时间戳,appid生成签名,同微信自己生成的签名做对比。ios授权后由于微信往链接里面加参数了,所以生成的签名,跟你直接穿得不加参数的链接生成的签名是不一样的。因此也就会报签名错误。

那我把链接修改一下不就可以啦。小伙子,悟性很高嘛。。

对!就是你在调用登录时候或重定向时候,修改你本地存储的这个链接。然后每次调用sdk时候传这新链接即可(详情的可看sdk的使用这一篇)。

   let state = this.$route.query.state || getUrlParam("state");
        let code = this.$route.query.code || getUrlParam("code");
    let initLink = `http://baidu.com?state=${state}&code=&{code}`
    sessionStorage.setItem('initLink',initLink)

加上这个后会发现ios终于好啦。

最后,前端有兴趣的可以关注下,也可以加群,一起成长。还有githubgithub.com/qdleader/qd…github.com/qdleader/qd…