微信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 相关文章推荐
实现png图片和png背景透明(支持多浏览器)的方法
Sep 08 Javascript
Jquery 数组操作大全个人总结
Nov 13 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
Aug 12 Javascript
深入了解Node.js中的一些特性
Sep 25 Javascript
javascript工厂方式定义对象
Dec 26 Javascript
Js为表单动态添加节点内容的方法
Feb 10 Javascript
javascript实现随机读取数组的方法
Aug 03 Javascript
jQuery内容过滤选择器用法示例
Sep 09 Javascript
BootstrapValidator不触发校验的实现代码
Sep 28 Javascript
对Vue beforeRouteEnter 的next执行时机详解
Aug 25 Javascript
深入理解Vue keep-alive及实践总结
Aug 21 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
Dec 26 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短域名转换为实际域名函数
2011/01/17 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
php常用Stream函数集介绍
2013/06/24 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
JQuery 弹出框定位实现方法
2010/12/02 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
vue实现几秒后跳转新页面代码
2020/09/09 Javascript
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
Python制作简易注册登录系统
2016/12/15 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
python 字典访问的三种方法小结
2019/12/05 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
家长给孩子的评语
2014/01/30 职场文书
表决心的诗句大全
2014/03/11 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
论文致谢词范文
2015/05/14 职场文书
四年级数学教学反思
2016/02/16 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS