微信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 相关文章推荐
模仿jQuery each函数的链式调用
Jul 22 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
Sep 05 Javascript
使用JS读秒使用示例
Sep 21 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
ExtJs纵坐标值重复问题的解决方法
Feb 27 Javascript
JavaScript函数获取事件源的小例子
May 14 Javascript
Vue.js每天必学之过滤器与自定义过滤器
Sep 07 Javascript
详解Angular2响应式表单
Jun 14 Javascript
vue结合element-ui使用示例
Jan 24 Javascript
JavaScript实现获取两个排序数组的中位数算法示例
Feb 26 Javascript
vue router动态路由设置参数可选问题
Aug 21 Javascript
js DOM的事件常见操作实例详解
Dec 16 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
ajax取消挂起请求的处理方法
2013/03/18 PHP
基于HBase Thrift接口的一些使用问题及相关注意事项的详解
2013/06/03 PHP
thinkphp实现图片上传功能
2016/01/13 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
Vue使用NProgress进度条的方法
2019/09/21 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
[00:59]DOTA2荣耀之路1:Doom is back!weapon X!
2018/05/22 DOTA
Python中的字符串替换操作示例
2016/06/27 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
意大利网上药房:Farmacia 33
2020/01/27 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
后勤岗位职责
2013/11/26 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
公司离职证明范本
2014/10/17 职场文书
2015新员工试用期工作总结
2014/12/12 职场文书
2015年领班工作总结
2015/04/29 职场文书
龙猫观后感
2015/06/09 职场文书
KTV员工管理制度
2015/08/06 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers