微信分享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 相关文章推荐
javascript 尚未实现错误解决办法
Nov 27 Javascript
超级酷和最实用的jQuery实例收集(20个)
Apr 21 Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
javascript内置对象arguments详解
Mar 16 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
Dec 29 Javascript
基于javascript实现窗口抖动效果
Jan 03 Javascript
提高JavaScript执行效率的23个实用技巧
Mar 01 Javascript
Django与Vue语法的冲突问题完美解决方法
Dec 14 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 Javascript
Vue中 axios delete请求参数操作
Aug 25 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
Sep 22 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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
使用新浪微博API的OAuth认证发布微博实例
2015/03/27 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
获取URL地址中的文件名和参数的javascript代码
2009/09/02 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
JS+CSS实现大气的黑色首页导航菜单效果代码
2015/09/10 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JS简单获取及显示当前时间的方法
2016/08/03 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
[01:32:10]NAVI vs VG Supermajor 败者组 BO3 第一场 6.5
2018/06/06 DOTA
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
Python深入学习之装饰器
2014/08/31 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python实现telnet服务器的方法
2015/07/10 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
python-numpy-指数分布实例详解
2019/12/07 Python
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
控制工程专业个人求职信
2013/09/25 职场文书
项目经理岗位职责
2013/11/11 职场文书
家长寄语大全
2014/04/02 职场文书
建筑工地标语
2014/06/18 职场文书
2014新生大学四年计划书
2014/09/21 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android