微信分享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 相关文章推荐
jquery radio 操作代码
Mar 16 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
Feb 07 Javascript
js导航菜单(自写)简单大方
Mar 28 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
Jun 26 Javascript
js实现可键盘控制的简单抽奖程序
Jul 13 Javascript
微信小程序实现滑动删除效果
May 19 Javascript
微信小程序实现图片放大预览功能
Oct 22 Javascript
mongoose更新对象的两种方法示例比较
Dec 19 Javascript
加快Vue项目的开发速度的方法
Dec 12 Javascript
bootstrap table实现横向合并与纵向合并
Jul 18 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
May 15 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
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字符串函数学习之strstr()
2015/03/27 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
javascript实现模拟时钟的方法
2015/05/13 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
详解Bootstrap创建表单的三种格式(一)
2016/01/04 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
JS实现的base64加密解密操作示例
2018/04/18 Javascript
JavaScript使用math.js进行精确计算操作示例
2018/06/19 Javascript
微信小程序实现弹出层效果
2020/05/26 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
[13:18]《一刀刀一天》之DOTA全时刻21:详解TI新赛制 A队再露獠牙
2014/06/24 DOTA
python 判断自定义对象类型
2009/03/21 Python
Python中的index()方法使用教程
2015/05/18 Python
Python第三方库的安装方法总结
2016/06/06 Python
Django 内置权限扩展案例详解
2019/03/04 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
详解python函数的闭包问题(内部函数与外部函数详述)
2019/05/17 Python
pycharm设置鼠标悬停查看方法设置
2019/07/29 Python
wxPython绘图模块wxPyPlot实现数据可视化
2019/11/19 Python
Pycharm内置终端及远程SSH工具的使用教程图文详解
2020/03/19 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
Chemist Warehouse官方海外旗舰店:澳洲第一连锁大药房
2017/08/25 全球购物
高三历史教学反思
2014/01/09 职场文书
人事任命书怎么写
2014/06/05 职场文书
销售竞赛活动方案
2014/08/23 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
推广普通话共筑中国梦演讲稿
2014/09/21 职场文书
Python实现打乒乓小游戏
2021/09/25 Python