微信分享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 (三) 管理jQuery包装集
Feb 23 Javascript
Jquery css函数用法(判断标签是否拥有某属性)
May 28 Javascript
AngularJs Scope详解及示例代码
Sep 01 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
js实现常见的工具条效果
Mar 02 Javascript
jQuery动态移除和添加背景图片的方法详解
Mar 07 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
Jul 12 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
Aug 17 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
Jun 16 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截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
2014/06/10 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
解决Extjs 4 Panel作为Window组件的子组件时出现双重边框问题
2013/01/11 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
Vue.js实现文章评论和回复评论功能
2020/05/30 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
Python基于OpenCV实现视频的人脸检测
2018/01/23 Python
解读python如何实现决策树算法
2018/10/11 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
Python在后台自动解压各种压缩文件的实现方法
2020/11/10 Python
一个精品风格的世界:Atterley
2019/05/01 全球购物
市场专员岗位职责
2014/02/14 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
工作后的感想
2015/08/07 职场文书
毕业设计工作总结
2015/08/14 职场文书
周一给客户的问候语
2015/11/10 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js