VUE解决微信签名及SPA微信invalid signature问题(完美处理)


Posted in Javascript onMarch 29, 2019
前端小菜鸟,因为项目要对接微信的jssdk,对接就需要签名认证,但是无奈安卓和IOS各有各的坑,本篇文章只讨论签名,和一个分享的坑,希望大家有所收获,能够解决问题,如果解决不到,请麻烦在评论区留言,本文综合了所有的回答,才调试出来坑

需求: 使用微信的功能

原因:

1. 项目基于vue,在微信上的web应用

2. 要使用上传功能(不同系统的兼容真的很多BUG,最后只能使用微信方案),支付功能,定位....

3. 签名一直存在bug和问题,那么后面的功能都会唤不起(偶尔也可以)

签名

1. 流程详细请看文档,反正能力有限,没看出什么名堂,总结一句话,要使用先签名

2. 开启填坑之路,由于微信使用会区分IOS和安卓系列,不同系列产生不一样的问题

(公司项目第一版的时候就给微信大坑过,所以本次重构的时候,就格外注意这一点)

安利一个在微信下能检测内核的判断:window.__wxjs_is_wkwebview(是否为webview内核),如果是的情况下就变成true

因为SPA应用下,会有一定的问题,路由采用的是history模式(不带#号)。因为在页面每次进入到路由之后才去获取签名授权,所以将方法公用写在路由的模块下

VUE解决微信签名及SPA微信invalid signature问题(完美处理)

router.afterEach((to, from) => {    //   伸手党福利
 // window.__wxjs_is_wkwebview
  // true 时 为 IOS 设备
  // false时 为 安卓 设备
 if (window.__wxjs_is_wkwebview) { // IOS
  if (window.entryUrl == '' || window.entryUrl == undefined) {
   var url = `${FRONT_BASE}${to.fullPath}`
   window.entryUrl = url  // 将后面的参数去除
  }
  getWxAuth(to.fullPath,"ios")
 }else {    // 安卓
  setTimeout(function () {
   getWxAuth(to.fullPath,"android")
  }, 500);
 }
})
  • window.entryUrl这个是什么鬼?这个是自己定义的全局属性,就是为了获取IOS第一次进入页面的时候存储起来的,如果IOS的签名的路径不是第一次进入的页面,那么就一定会失败,所以这个路由第一次进入就要储存起来
  • 为什么要写在router.afterEach,因为页面进入了再去做申请和签名,如果在beforeEach,会导致页面申请签名的时候还是上一个页面,但是到了新页面却没有注册签名,或者因为签名的路径不同,导致invalid signature
  • 为什么安卓的时候要增加一个延时器,因为安卓会存在一些情况,就是即便签名成功,但是还是会唤不起功能,这个貌似是一个比较稳妥的解决办法,
看完路由模式了,就来进入逻辑部门,来看看如何处理

VUE解决微信签名及SPA微信invalid signature问题(完美处理)

有同学疑惑这个encodeURIComponent是干嘛用的,其实具体很简单,就是因为我们在微信分享的时候,会自动给我们带上参数(记得告诉后端的伙伴要decodeURIComponent),切记只要带参数就一定要转码!

对于IOS系统会自动增加如下参数:

  • 朋友圈 from=timeline&isappinstalled=0
  • 微信群 from=groupmessage&isappinstalled=0
  • 好友分享 from=singlemessage&isappinstalled=0

对于安卓系统会自动添加如下参数:

  • 朋友圈 from=timeline
  • 微信群 from=groupmessage
  • 好友分享 from=singlemessage

然后就直接去请求签名,写法就不深究,getWeChat是封装的axios,只是为了统一管理才这么写,大家可以写成正常的请求axios('xxxx.com/get-wx',obj).then()这样的写法,一样的效果

VUE解决微信签名及SPA微信invalid signature问题(完美处理)

到了这一步就基本上是请求签名成功,但是有同学疑惑,那么IOS每次分享的时候会不会是进去的第一个路由,我的回答是会的(需要稍加处理)

VUE解决微信签名及SPA微信invalid signature问题(完美处理)

重点关注再与这个link,需要在每次分享的时候记录当前的路由,如果直接读location.href在IOS端的时候会是第一次进入的页面。安卓则没有问题,所以我统一采用我记录的这个参数,这个参数可以直接在方法传递过来,路由afterEach的to.fullpage,然后再加上自己的域名就OK了最后写几句话,希望大家都能顺便解决一下BUG,也希望能对大家有所帮助,如果遇到一些其他的问题,欢迎评论区留言,只要有时间就会及时跟大家交流探讨!也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
特殊字符、常规符号及其代码对照表
Jun 26 Javascript
JavaScript静态的动态
Sep 18 Javascript
javascript删除数组元素并且数组长度减小的简单实例
Feb 14 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
May 29 Javascript
JQuery球队选择实例
May 18 Javascript
JSON简介以及用法汇总
Feb 21 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
May 30 Javascript
JS实现颜色梯度与渐变效果完整实例
Dec 30 Javascript
学习使用jQuery表单验证插件和日历插件
Feb 13 Javascript
AngularJs 禁止模板缓存的方法
Nov 28 Javascript
微信小程序点击列表跳转到对应详情页过程解析
Sep 26 Javascript
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
微信小程序生成分享海报方法(附带二维码生成)
Mar 29 #Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
Mar 29 #Javascript
微信小程序生成二维码的示例代码
Mar 29 #Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
Mar 29 #Javascript
JavaScript实现无限级递归树的示例代码
Mar 29 #Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 #Javascript
详解a标签添加onclick事件的几种方式
Mar 29 #Javascript
You might like
高性能PHP框架Symfony2经典入门教程
2014/07/08 PHP
php导入模块文件分享
2015/03/17 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
php resizeimage 部分jpg文件 生成缩略图失败的原因分析及解决办法
2016/03/23 PHP
PDO::exec讲解
2019/01/28 PHP
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
js基于myFocus实现轮播图效果
2017/02/14 Javascript
微信小程序 侧滑删除(左滑删除)
2017/05/23 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
详解Python中映射类型的内建函数和工厂函数
2015/08/19 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python三引号如何输入
2020/07/06 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
广州盈通面试题
2015/12/05 面试题
主治医师岗位职责
2013/12/10 职场文书
成考报名单位证明范本
2014/01/16 职场文书
好家长事迹材料
2014/01/23 职场文书
企业优秀员工事迹材料
2014/05/28 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
质检员岗位职责范本
2015/04/07 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
使用Oracle命令进行数据库备份与还原
2021/12/06 Oracle
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏
代码复现python目标检测yolo3详解预测
2022/05/06 Python