现在的 H5 开发,微信授权和微信分享基本是必备功能,昨天将微信分享的相关功能和踩坑过程做了一个总结,今天就来说下微信授权的功能具体到 vue 项目中该要怎么做。
Vue 爬坑之旅 – history 路由模式下微信分享爬坑总结

准备工作

在开始码代码之前需要先做一些准备工作,其实也是做微信分享需要做的准备工作,申请公众号,绑定域名,申请 AppId 等。这些事情做完之后还需要做的事情就是先通读一下 微信网页授权官方文档 ,先读一遍文档,了解一些基本的概念,我这篇文章中并不会讲解这些基本概念。

微信网页授权流程

在微信文档里面说到,要获取微信授权需要经过四步,其他微信文档里面说的四步是针对整个授权流程的,这四步是前后端加在一起需要走这四步流程。具体到我们前端,其实只需要两步。

  1. 拼接授权链接,向微信发起授权请求
  2. 获取微信返回的授权 code,用这个 code 请求后端服务,拿到用户信息

拼接链接,发起授权请求

一个应用,何时发起授权请求是根据业务需要来定的,有的是在一进入应用的时候就要求授权,有的是达到了什么条件之后才触发的,比如说点击了微信登录。我这次碰到的需求是要求在刚进入页面时就要授权,所以就以这种情况来说下该怎么做。

首先来分析下这个需求,要想一进入应用就触发授权操作,那么相关代码就必须写在具体的业务代码之前。符合这个条件的其实有二个地方,分别为作为整个应用入口的 main.js,然后就是路由的 router.beforeEach 钩子函数。具体到我们这个需求,其实是不能放在 main.js 里面的,因为微信授权的时候需要进行路由跳转,所以放在 router.beforeEach 里面比较合适。

文档里面说了,发起授权的链接里面需要拼接一个重定向的 redirectUrl ,这个 url 是用来获取微信返回的 code 的,微信在收到授权请求后,会把 code 拼接到我们定义的 redirectUrl 后面返回给我们。我们拿到这个 code 后传给后端,后端再用这个 code 和另外一个参数 access_token,去请求微信的服务器,这样才能拿到发起授权请求的客户端相对应的用户信息。

所以我们需要定义一个接收微信 code 的路由页面 WxAuth,路由为 ‘/WxAuth’,将重定向的 redirectUrl 指向这个路由,**这里有二点需要注意,redirectUrl 需要是 https 开始的全链接,并且拼接之前需要用 encodeURIComponent 方法转义下,**做好上面这些之后,我们就可以在定义路由的 router.js (vue-cli3下)或者是 router 文件夹的 index.js (vue-cli2下)文件中写入如下代码:

router.beforeEach((to, from, next) => {if (!/micromessenger/i.test(navigator.userAgent)) {next()return}//不要对 WxAuth 路由进行拦截,不进入 WxAuth 路由就拿不到微信返回的授权 codeif (to.name === 'WxAuth') {next()return}let wxUserInfo = localStorage.getItem('wxUserInfo')if (!wxUserInfo) {//保存当前路由地址,授权后还会跳到此地址sessionStorage.setItem('wxRedirectUrl', to.fullPath)//请求微信授权,并跳转到 /WxAuth 路由let appId = '测试服的AppId'let redirectUrl = encodeURIComponent('https://m1.xxxxxx.com/WxAuth')//判断是否为正式环境if (window.location.origin.indexOf('https://m.xxxxxx.com') !== -1) {appId = '正式服的AppId'redirectUrl = encodeURIComponent('https://m.xxxxxx.com/WxAuth')}window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUrl}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`} else {next()}
})

这样的话,当用户从 WxAuth 以外的路由进入应用时都会先判断是否有微信的用户信息,没有的话就发起微信授权请求,请求发起成功后微信会跳转到我们指定的 redirectUrl ,也就是上面的 /WxAuth 路由。

获取微信授权 code,向后端请求用户信息

在 WxAuth 页面中,我们要做的事情就简单了,

  1. 从 url 中拿到微信返回的授权 code
  2. 用该 code 向后端请求用户信息

具体代码如下:

<template><div></div>
</template><script>/*** 微信网页授权*/export default {name: 'WxAuth',async created(){// 如果连接中有微信返回的 code,则用此 code 调用后端接口,向微信服务器请求用户信息// 如果不是从微信重定向过来的,没有带着微信的 code,则直接进入首页if (this.$route.query.code) {let res = await this.apis.public.getWxUserInfo({code: this.$route.query.code,platform: 1,})alert(JSON.stringify(res))localStorage.setItem('wxUserInfo', JSON.stringify(res))let redirectUrl = sessionStorage.getItem('wxRedirectUrl')this.$router.replace(redirectUrl)} else {this.$router.replace('/')}},}
</script>

总结

其实整个过程做下来,代码不多,一共就几十行,但是如果是初次做的话还是有点绕,需要把这里面的弯弯绕绕理清楚,一旦想通了,理解了,做起来也就顺了。

参考资料:
vue脚手架,微信公众号授权(微信网页授权)

Vue 爬坑之旅 -- 微信网页授权相关推荐

  1. VUE 爬坑之旅 -- 用 ES6 语法写一个工具类,并全局引用

    在我前面的有一篇文章里有说过怎么引入外部的 JS 文件,详情见 VUE 爬坑之旅– 如何对公共JS,CSS进行统一管理,全局调用 .这里所说的外部 JS 文件指的是用 ES6 之前的老语法编写的各种 ...

  2. 解决vue路由hash模式下,微信网页授权问题

    解决vue路由hash模式下,微信网页授权问题 本人开发负责微信公众号端,菜单都是自定义菜单,然后每个菜单路径都是经过授权如:http://xxxx.com/ceshi/wechat/authoriz ...

  3. Vue 爬坑之旅 -- history 路由模式下微信分享爬坑总结

    现在做 H5 开发,微信平台基本是一个绕不过去的坑,这里面又分为微信授权和微信分享.说它坑,主要提现在以下几个方面: 文档不够清晰详细.开发文档这块是国内所有互联网公司的通病,文档写的不清不楚,长期不 ...

  4. VUE 爬坑之旅 -- vue 项目中将简体转换为繁体

    一 安装相关的包 npm i language-tw-loader 二 修改 webpack 配置文件 在 build 文件夹下找到 webpack.base.conf.js 这个文件,在 modul ...

  5. Vue爬坑之旅(二十一):vue使用富文本编辑器vue-quill-editor实现配合后台将图片上传至七牛

    一.全局注册:main.js import Vue from 'vue' import VueQuillEditor, { Quill } from 'vue-quill-editor' import ...

  6. 微信授权Java重定向前端地址_微信网页授权+分享踩过的坑

    页面用浏览器自带返回和安卓物理返回死循环的话,直接看高潮部分 背景 折磨我两个工作日加周末一天的问题,我觉得还是有必要记录一下,为什么程序员总是加班,就是遇到这些意想不到的问题 需求 领导:我想做两个 ...

  7. React Native微信支付开发爬坑之旅

    早闻微信支付一直为移动开发者所诟病,这次公司项目新增微信支付需求,一试果然是一把辛酸泪,从配置到与后台调试真是一波三折,整整花了一天的时间才从坑里爬出来,效率也是低.所以有必要做下总结,日后再有微信支 ...

  8. vue开发本地调试微信网页授权

    vue开发本地调试微信网页授权 相关信息: 微信开发者工具 vue-cli3 1.修改hosts文件 这里可能会遇到无法修改的问题,可以通过修改权限或管理员权限打开修改 修改用户权限的操作如下: 修改 ...

  9. 手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP)

    wechat github 手把手实现微信网页授权和微信支付,附源代码(VUE and thinkPHP) 概述 公众号开发是痛苦的,痛苦在好多问题开发者文档是没有提到的,是需要你猜的. 在开发过程中 ...

最新文章

  1. 算法原理:大数据处理的分治思想!
  2. 自学python推荐书籍2019-2019最强Python书单!
  3. 上证所Level-2在信息内容和传送方式方面的比较优势[逐笔数据与分笔数据的根本区别]...
  4. 京东10亿级调用量背后的高可用网关系统架构实践!
  5. 网联能否一统天下,取决于三个问题
  6. Android应用中去掉标题栏方法总结(Eclipse+Android Studio)
  7. php反序列化漏洞 freebuf,最全的PHP反序列化漏洞的理解和应用
  8. vue里面is_vue中的is
  9. git 拉取代码失败
  10. 初学Python——字符串相关操作
  11. Unity3d地形刷入自定义树木
  12. 2019icpc南京网络赛 A The beautiful values of the palace(离线+树状数组)
  13. IO流 Buffered 综合练习
  14. 金万维异速联远程接入解决方案
  15. 腾达u12如何安装linux驱动,解决Centos7 安装腾达U12无线网卡驱动问题
  16. 【NOI OJ】1818 红与黑
  17. 面试中的SQL分析二
  18. 智能在线客服是如何工作的?
  19. 开源财务会计软件(搬运)
  20. 中南大学计算机2020研究生分数线,2020年中南大学考研分数线公布

热门文章

  1. IPv6地址格式统一工具类
  2. c/c++中的inf与nan
  3. 00后博士毕业拟任顶级985副研究员,网友扒出论文后吵翻了
  4. 虎课网二级python_计算机二级python:python第三方库概述
  5. win 10 无法删除系统文件的解决方法(提示:无法枚举容器中的对象 访问被拒绝)...
  6. 八大经典优雅的CSS鼠标悬浮动画-hover属性
  7. 用LCD1602制作可调电子钟
  8. 黑马点评项目全部功能实现及详细笔记--Redis练手项目
  9. 奠定现代计算机发展的人物和思想,计算机发展历程ppt
  10. 房产贷款利息计算公式