微信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 相关文章推荐
定义JavaScript二维数组采用定义数组的数组来实现
Dec 09 Javascript
原生js实现数字字母混合验证码的简单实例
Dec 10 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
判断是否存在子节点的实现代码
May 18 Javascript
JS制作适用于手机和电脑的通知信息效果
Oct 28 Javascript
JS生成和下载二维码的代码
Dec 07 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
微信小程序 视图容器组件的详解及实例代码
Jan 19 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
Bootstrap图片轮播效果详解
Oct 17 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
Apr 26 jQuery
three.js利用射线Raycaster进行碰撞检测
Mar 12 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抓取https的内容的代码
2010/04/06 PHP
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
浅谈php提交form表单
2015/07/01 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
一个tab标签切换效果代码
2009/03/27 Javascript
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
JavaScript中的console.dir()函数介绍
2014/12/29 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
微信小程序 弹框和模态框实现代码
2017/03/10 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 学习笔记
2008/12/27 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
简单了解django索引的相关知识
2019/07/17 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
研究生自荐信
2013/10/09 职场文书
应届生的求职推荐信范文
2013/11/30 职场文书
优秀士兵个人事迹材料
2014/01/19 职场文书
民生工程实施方案
2014/03/22 职场文书
创业女性典型材料
2014/05/02 职场文书
授权委托书(法人单位用)
2014/09/29 职场文书
银行自荐信怎么写
2015/03/05 职场文书
加班费申请报告
2015/05/15 职场文书
少年派的奇幻漂流观后感
2015/06/08 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python