微信jssdk踩坑之签名错误invalid signature


Posted in Javascript onMay 19, 2020

最近做公众号网页开发,使用微信 jssdk 页面签名时 IOS 中一直报错,这才刚开始就被这只拦路虎拦住了,报错如下:

微信jssdk踩坑之签名错误invalid signature

然而 Android 和开发者工具中好得很,没有任何问题:

微信jssdk踩坑之签名错误invalid signature

既然提示 签名非法 ,那就是签名有问题咯,但是同样的接口,为什么Android没问题?是真是假还是用官方的签名校验工具验证下:

微信jssdk踩坑之签名错误invalid signature

微信jssdk踩坑之签名错误invalid signature

生成的签名完全没有问题,这就奇怪了,按照网上说的 url 改成如下方式也不行:

url = window.location.href.split('#')[0]

突然看到网上有人说是因为 SPA 的原因,经过几番测试,问题锁定在了 SPA 。先来解释下为什么会这样,我们使用 Vue Router 切换页面时,底层使用的是 pushState 技术,这是 H5 的一个新特性,虽然表面上看页面的 path 变了,内容也换了,但是页面是没有刷新的。

现在知道问题出在哪里,再来实际确认一下。首先进入项目的首页,地址是 https://www.abc.com/weixin/quan?rr=234wfwf ,然后点击进入我们要分享的页面,这时候会提示 invalid signature ,这时jssdk是配置失败的,分享出去的就是原始的页面链接,然而问题出现了:

微信jssdk踩坑之签名错误invalid signature

分享后的链接仍然是首页进入的链接,这是微信的BUG啊,原来在微信的网页中不支持 pushState ,这就导致我们在jssdk从配置时传入的 urlwindow.location.href 得到)和微信识别到的不一样,这时候在分享的页面刷新一下,配置就会正常。

后面再看官方文档时也提到了这一点:

微信jssdk踩坑之签名错误invalid signature

然而我的Android没这个问题,iOS反而出现了这个问题(IOS版本13.3.1,微信版本7.0.9,jssdk 1.6)

如何解决

在跳转到要分享的页面时,不用 pushState ,在 Vue router 中就是不用 push 方式跳转,方式如下:

window.location.href = 要跳转的链接
// _this.$router.push({
// …
// })

既然 SPA 在微信中只认第一个页面的 path ,那我们就在第一次进入页面时记录下 path ,其他页面用这个 path 。我们在 App.vue 或者 main.js 中记录下这个 path

window.sessionStorage.setItem('firstEntryUrl', window.location.href)

然后在需要分享的页面,使用这个 path

let url = window.location.href.split('#')[0]
if (utils.isIOS() && window.sessionStorage.getItem('firstEntryUrl')) {
	url = window.sessionStorage.getItem('firstEntryUrl').split('#')[0]
}

经测试,上述两种方法都能完美解决。

到此这篇关于微信jssdk踩坑之签名错误invalid signature的文章就介绍到这了,更多相关微信jssdk 签名错误 内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JS如何将UTC格式时间转本地格式
Sep 04 Javascript
设置checkbox为只读(readOnly)的两种方式
Oct 11 Javascript
JavaScript 实现打印,打印预览,打印设置
Dec 30 Javascript
js实现类似新浪微博首页内容渐显效果的方法
Apr 10 Javascript
AngularJS基础 ng-srcset 指令简单示例
Aug 03 Javascript
vue.js初学入门教程(2)
Nov 07 Javascript
JS匿名函数类生成方式实例分析
Nov 26 Javascript
前端JS面试中常见的算法问题总结
Dec 23 Javascript
使用gulp搭建本地服务器并实现模拟ajax
Apr 05 Javascript
bootstrap table使用入门基本用法
May 24 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
May 24 Javascript
vue在手机中通过本机IP地址访问webApp的方法
Aug 15 Javascript
JavaScript实现简单的弹窗效果
May 19 #Javascript
js实现自定义右键菜单
May 18 #Javascript
微信小程序手动添加收货地址省市区联动
May 18 #Javascript
怎么理解wx.navigateTo的events参数使用详情
May 18 #Javascript
django简单的前后端分离的数据传输实例 axios
May 18 #Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 #Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 #Javascript
You might like
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
JavaScript 中Date对象的格式化代码方法汇总
2017/09/06 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
详解element-ui级联菜单(城市三级联动菜单)和回显问题
2019/10/02 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
2020/12/14 Vue.js
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
使用tkinter实现三子棋游戏
2021/02/25 Python
详解HTML5 录音的踩坑之旅
2017/12/26 HTML / CSS
EJB的角色和三个对象
2015/12/31 面试题
考博自荐信
2013/10/25 职场文书
思想专业自荐信范文
2013/12/25 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
环保宣传标语
2014/06/12 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
《海上日出》教学反思
2016/02/23 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
Mysql数据库group by原理详解
2022/07/07 MySQL
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers