微信分享invalid signature签名错误踩过的坑


Posted in Javascript onApril 11, 2020

前一段时间做了一个微信分享的东西,而且前端框架用的是VUE,被这个东西快折磨疯了,一个列表页,一个详情页,分享详情页的时候,会报错invalid signature签名错误。

当时就不淡定了,然后开始了排坑之路,根据官网的各种校验错误问题,没有发现有什么区别

建议按如下顺序检查:

1.确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

2.确认config中nonceStr(js中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

3.确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及'?'后面的GET参数部分,但不包括'#'hash后面的部分。

4.确认 config 中的 appid 与用来获取 jsapi_ticket 的 appid 一致。

5.确保一定缓存access_token和jsapi_ticket。

6.确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

究竟什么导致呢,后来发现是history在微信中的问题,就是当从列表进入详情页的时候,往后台传入URL,跟你直接从详情页进入传的URL不一致。比如:A=>B,分享B

这时候你需要记录初始页的url,解决办法在你的main.js里,添加

router.beforeEach((to, from, next) => {
 if (!window.initUrl) {
 window.initUrl = location.href.split('#')[0]
 }
 next()
})

然后在你的详情页里B获取

url: '....?url=' + encodeURIComponent(that.isIosOrAndroid() === 'android' ? location.href.split('#')[0] : window.initUrl)

在这里要判断是android还是ios,因为再android里显示是正常的,所以就用

location.href.split('#')[0]

直接获取当前的url即可。

// 判断ios还是android
 Vue.prototype.isIosOrAndroid = function () {
 let u = navigator.userAgent;
 let isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1 // android终端
 let isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios终端
 let isStr = ''
 if (isAndroid) {
 isStr = 'android'
 }
 if (isiOS) {
 isStr = 'ios'
 }
 return isStr
 }

总结

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

Javascript 相关文章推荐
window.showModalDialog使用手册
Jan 11 Javascript
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
善用事件代理,警惕闭包的性能陷阱。
Jan 20 Javascript
JavaScript 基础篇(一)
Mar 30 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
JavaScript中的变量定义与储存介绍
Dec 31 Javascript
跟我学习javascript的arguments对象
Nov 16 Javascript
javascript实现拖放效果
Dec 16 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 Javascript
vue+SSM实现验证码功能
Dec 07 Javascript
vue项目实现图片上传功能
Dec 23 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 #Javascript
vue使用微信扫一扫功能的实现代码
Apr 11 #Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 #Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
Apr 11 #Javascript
JavaScript实现轮播图特效
Apr 10 #Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 #Javascript
Vue实现Layui的集成方法步骤
Apr 10 #Javascript
You might like
PHP&MYSQL服务器配置说明
2006/10/09 PHP
收藏的PHP常用函数 推荐收藏保存
2010/02/21 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
2016/05/27 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
mui框架移动开发初体验详解
2017/10/11 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
2018/08/15 Javascript
详解angularjs4部署文件过大解决过程
2018/12/05 Javascript
基于three.js实现的3D粒子动效实例代码
2019/04/09 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python pickle模块用法实例
2015/04/14 Python
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python制作数据导入导出工具
2015/07/31 Python
python3 requests中使用ip代理池随机生成ip的实例
2018/05/07 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Python for循环与getitem的关系详解
2020/01/02 Python
蒙蒂塞罗商店:Monticello Shop
2018/11/25 全球购物
英国在线女鞋目的地:SIMMI
2018/12/27 全球购物
经典的班主任推荐信
2013/10/28 职场文书
揭牌仪式主持词
2014/03/19 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
公司仓库管理制度
2015/08/04 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
如何Python使用re模块实现okenizer
2022/04/30 Python