微信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 相关文章推荐
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
JavaScript高级程序设计 阅读笔记(十八) js跨平台的事件
Aug 14 Javascript
网页整体变灰白色(兼容各浏览器)实例
Apr 21 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
javascript闭包入门示例
Apr 30 Javascript
vue移动端项目缓存问题实践记录
Oct 29 Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 Javascript
vue中格式化时间过滤器代码实例
Apr 17 Javascript
小程序根据手机机型设置自定义底部导航距离
Jun 04 Javascript
vue2配置scss的方法步骤
Jun 06 Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 Javascript
京东优选小程序的实现代码示例
Feb 25 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防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
2018/02/11 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
JavaScript动态绑定详解
2017/09/14 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
[00:32]2018DOTA2亚洲邀请赛Mineski出场
2018/04/04 DOTA
总结Python编程中三条常用的技巧
2015/05/11 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
详解python和matlab的优势与区别
2019/06/28 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
英国在线发型和美容产品商店:Beauty Cutie
2019/04/27 全球购物
土木工程毕业生自荐信
2013/09/21 职场文书
夜班门卫岗位职责
2013/12/09 职场文书
电钳专业个人求职信
2014/01/04 职场文书
银行介绍信范文
2014/01/10 职场文书
安全生产投入制度
2014/01/29 职场文书
环保建议书100字
2014/05/14 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
病危通知单
2015/04/17 职场文书
爱国影片观后感
2015/06/18 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书