• [转]关于微信JSSDK中遇到的“invalid signature”的天坑


    作者:MapleShaw
    链接:https://juejin.im/post/5a3cc5ae5188252103347221
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    wx.config()这块网上的信息太多了,基本的配置这里绕过,直接说这次遇到的最坑的问题 ---- invalid signature

    排查了各种情况总是找不出原因,而且神奇的是在安卓上可以正常获取位置,就只是在ios上一直“invalid signature”,打印出来的当前url跟签名的url也明明是一致的,为什么还是签名有问题呢!!???

    页面的结构如下:

    SPA:

    • 页面A
    • 页面B

    非常简单,整个应用从A进入,然后跳转到B,B需要获取位置,我也只是在B里面配置微信的JSSDK,然后就遇到了前面所说的问题。然后!!关键来了!!在某一次调试的时候,我就直接从B页面刷新了,然后就可以了!!!!!What the fuk?!!

    从B刷新加载的每一次都是那么丝滑,而从A到B,每一次都被枪毙,所以抱着这个问题,我来到了这个新世界 ---- 关于html5-History模式在微信浏览器内的问题

    原来,是酱紫?!!

    IOS:微信IOS版,微信安卓版,每次切换路由,SPA的url是不会变的,发起签名请求的url参数必须是当前页面的url就是最初进入页面时的url

    Android:微信安卓版,每次切换路由,SPA的url是会变的,发起签名请求的url参数必须是当前页面的url(不是最初进入页面时的)

    坑爹啊!亏我把请求签名的url跟当前页面的url(location.href)对比明明是一样的!

     

    解决方案:

    全局存储进入SPA的url(window.entryUrl),Android不变,依旧是获取当前页面的url,IOS就使用window.entryUrl,然后签名,done!

    // 记录进入app的url,后面微信sdk
    if (window.entryUrl === '') {
        window.entryUrl = location.href.split('#')[0]
    }
    // 进行签名的时候
    url: isAndroid() ? location.href.split('#')[0] : window.entryUrl

    题外话:貌似看到有人在处理微信分享的时候也有类似的问题



  • 相关阅读:
    TypeScript-基础-09-声明文件
    TypeScript-基础-08-类型断言
    TypeScript-基础-07-函数的类型
    TypeScript-基础-06-数组的类型
    TypeScript-基础-05-对象的类型—接口
    TypeScript-基础-04-联合类型
    TypeScript-工程
    小白学前端03
    小白学前端02
    小白学前端
  • 原文地址:https://www.cnblogs.com/sungong1987/p/12384322.html
Copyright © 2020-2023  润新知