返回顶部
首页 > 资讯 > 前端开发 > html >Vue微信公众号开发踩坑的示例分析
  • 1188
分享到

Vue微信公众号开发踩坑的示例分析

2024-04-02 19:04:59 1188人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关Vue微信公众号开发踩坑的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求微信授权登录(基于公众号的登录方案)接入js-SDK实现图

这篇文章将为大家详细讲解有关Vue微信公众号开发踩坑的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

需求

  • 微信授权登录(基于公众号的登录方案)

  • 接入js-SDK实现图片上传,分享等功能

现状及难点

  • 采用的Vue框架,前后端分离模式(vue工程仅作为客户端),用户通过域名访问的是客户端,但是微信授权中涉及签名和token校验依赖服务端

  • JS-SDK需要向服务端获取签名,且获取签名中需要的参数包括所在页面的url,但由于单页应用的路由特殊,其中涉及到iOSAndroid微信客户端浏览器内核的差异性导致的兼容问题

解决方案

授权登录

授权流程如下:

Vue微信公众号开发踩坑的示例分析

详细说明:

  1. 用户访问网站主域名

  2. vue客户端(domain/)接收请求,在路由解析前判断用户是否登录(比如检查cookie);

  3. 如果没有登录,则通过api获取微信授权地址,获取后跳转到微信服务端授权页面;

  4. 用户确认授权,微信服务器发起回调请求,这时需要回调到服务器端(domain/api/xxx)

  5. 服务器端保存用户信息,进行注册登录操作(记录cookie),重定向到vue客户端(domain/)

  6. 重复第一步,授权登录成功

踩坑记录:

以下是一个错误授权方案

Vue微信公众号开发踩坑的示例分析

这个方案为什么错误呢?其实如果只实现授权登录到话,这个方案是可以的,而且也很清晰,vue客户端单方面在服务器和微信服务器之间进行通信,微信服务器不能直接和服务器通信。这种方案的坑在于当微信授权回调时会携带一个code参数,该参数会污染vue路由导致ios上进行JS-SDK签名时失败(后续会具体描述这个问题)

JS-SDK签名

对于签名,官方是这么说的

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的WEB app可在每次url变化时进行调用

vue中路由有history和hash两种模式;在history模式下,理想的设计方案是,当进入到需要用到JS-SDK组件时,获取以下当前url(也就是通过 location.href.split(‘#')[0]获得到的地址)传递到服务端进行签名,应该就没问题了,但是IOS获取的url并不是调用微信js的时候所在页面的地址,而是进入到网站第一个页面的地址。

网上查询到一个方案是针对ios设备进入页面时先将当前url记录下来,到授权页面时将记录的url传递给服务端进行签名。该方案经实践是可行的,妈妈再也不用担心我的网址很丑很难看啦。

另外一个方案就是使用hash模式,这种模式下,url永远都只是主域名地址,省去了传递url的烦恼,也没必要处理兼容,所以如果不建议路由中有#的话,该方案应该是首选方案。

这里还有一个深坑,那就是如果授权方案采用了上述中的vue客户端处理回调的方式,那么ios将永远无法签名成功,为什么呢,因为这种方案路由通常是这样子的:

Http://domain.com/?code=xxxxxx&stat=#/xxx

这种路由中带了参数的url是没法签名校验成功的!
这种路由中带了参数的url是没法签名校验成功的!
这种路由中带了参数的url是没法签名校验成功的!
重要的事情得说三遍啊

Coding

任何不上代码的吹逼都是耍流氓,这里笔者分享下在vue中具体怎么coding的。

微信授权登录

笔者在项目中使用的vue-router进行路由控制,使用了vuex记录用户登录信息,但是由于vuex中存储的内容在页面刷新后会丢失,所以服务端同时也写了用户登录状态到cookie中,vue中需要通过这两个条件进行登录判断,不多BB,直接看代码吧

// ... other code

router.beforeEach((to, from, next) => {
 if ((!VueCookie.get('user') && !store.state.userInfo)) {
  // 第一次访问
  console.log('授权登录')
  // 跳转到微信授权页面,微信授权地址通过服务端获得
  axios.post('/api/login').then(res => {
   var data = res.data
   if (data.code === 100) {
    window.location.href = data.data
   }
  })
 } else if (!store.state.userInfo) {
  // 刷新页面,获取数据存入vuex
  axios.get('/api/currentuser').then(res => {
   if (res.data.code === 100) {
    store.dispatch('setUserInfo', res.data.data)
    next()
   }
  })
  console.log('cookie生效期内登录')
  next()
 } else {
  // 已经登录
  console.log('已登录')
  next()
 }
})

//... other code

history模式下的JS-SDK签名

在入口文件中将当前url存入vuex

// ... other code
router.beforeEach((to, from, next) => {
 document.title = to.meta.title
 // 处理jssdk签名,兼容history模式
 if (!store.state.url) {
  store.commit('setUrl', document.URL)
 }
 // ... other code

在需要获取签名的组件中获取并进行配置

// ... other code
created () {
   var sef = this
   var url = ''
   // 判断是否是ios微信浏览器
   if (window.__wxjs_is_wkwebview === true) {
    url = this.$store.state.url.split('#')[0]
   } else {
    url = window.location.href.split('#')[0]
   }
   this.$http.get('/api/jssdk?url=' + url).then(function (res) {
    sef.lists = res.data.data
    hmTools.wechact(sef.lists, sef) //js-sdk配置
   })
  }
// ...other code

关于“Vue微信公众号开发踩坑的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: Vue微信公众号开发踩坑的示例分析

本文链接: https://lsjlt.com/news/74912.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue微信公众号开发踩坑的示例分析
    这篇文章将为大家详细讲解有关Vue微信公众号开发踩坑的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求微信授权登录(基于公众号的登录方案)接入JS-SDK实现图...
    99+
    2024-04-02
  • Koa2微信公众号开发之消息管理的示例分析
    这篇文章将为大家详细讲解有关Koa2微信公众号开发之消息管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。接收消息当普通微信用户向公众账号发消息时,微信服务器将...
    99+
    2024-04-02
  • Vue如何开发Html5微信公众号
    这篇文章主要介绍了Vue如何开发Html5微信公众号,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、调起微信支付在微信浏览器里面打开H5网...
    99+
    2024-04-02
  • 详解nodejs微信公众号开发——1.接入微信公众号
    接入微信公众号是开发的第一步,万事开头难,走好第一步,后面的路就更宽广。 1.公众平台测试帐号的使用 登录微信公众平台,由于很多开发人员并没有认证的的微信公众号,所以比较折中的方式是使用公众平台测试帐号...
    99+
    2022-06-04
    公众 详解 nodejs
  • 微信公众号开发入门
    实在是太折腾,太难懂了。也太坑了。 下面是这几天来,有关微信公众号的工作总结。算不上全面,只是作为一个初学者的记录,仅以备忘。 一、微信公众号开发,开发什么? 公众号与小程序不同。小程序类似手机APP...
    99+
    2023-09-03
    微信 小程序
  • web微信小程序开发踩坑举例分析
    这篇文章主要介绍“web微信小程序开发踩坑举例分析”,在日常操作中,相信很多人在web微信小程序开发踩坑举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”web微信小程序...
    99+
    2024-04-02
  • 微信小程序 | 微信公众平台SpringBoot开发实例 │ 开发一个简易的个人微信公众号
     开发一个简易的个人微信公众号,并演示对不同相对地址的整合方法、JSON数据的处理方法(处理后以HTML文件显示)。 1、应用开发 1●创建类InitMenu 在包edu.bookcode中创建caseex子包,并在包edu.boo...
    99+
    2023-08-31
    微信公众平台 spring boot java 微信
  • nodejs微信公众号支付开发
    odeJs 微信公众号功能开发,移动端 H5页面调用微信的支付功能。这几天根据公司的需要使用 node 和 h5页面调用微信的支付功能完成支付需求。现在把开发过程重新捋一遍,以帮助更多的开发者顺利的完成微信...
    99+
    2022-06-04
    公众 nodejs
  • PHP微信公众号开发函数大揭秘:curl、xml、sha1等函数的微信公众号开发指南
    PHP微信公众号开发函数大揭秘:curl、xml、sha1等函数的微信公众号开发指南导语:微信公众号已经成为了很多企业进行推广、营销以及与用户互动的重要平台,而PHP作为一种广泛应用的开发语言,在微信公众号开发中也有其独特的优势。本文将为大...
    99+
    2023-11-18
    微信 PHP 开发函数
  • Java 微信公众号开发相关总结
    目录首先必须要有一个个人微信公众号效果图后台路由代码完整代码首先必须要有一个个人微信公众号 个人微信公众号相关的接口权限有限,不过用于个人学习体验一下足够了,如图: 然后进入微信...
    99+
    2024-04-02
  • 如何使用Java开发微信公众号
    这篇文章给大家介绍如何使用Java开发微信公众号,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先必须要有一个个人微信公众号个人微信公众号相关的接口权限有限,不过用于个人学习体验一下足够了,如图:然后进入微信公众后台,...
    99+
    2023-06-15
  • 如何用PHP开发微信公众号的积分商城
    如何用PHP开发微信公众号的积分商城随着微信公众号的普及和发展,越来越多的企业开始关注并利用微信公众号来进行营销和推广。其中,积分商城是一种常见且受欢迎的功能,通过积分兑换商品,可以增强用户粘性和参与度。本文将详细介绍如何使用PHP开发微信...
    99+
    2023-10-27
    微信公众号 PHP开发 积分商城
  • 使用NodeJs 开发微信公众号(三)微信事件交互实例
    微信公众号有个规则,一旦开启了开发者模式,其他的常规功能就都必须通过接口调用完成。比如说自定义菜单功能,必须通过发送post请求的方式生成。本章就通过关注到取消关注的整个过程来谈一谈nodejs是怎么样与微...
    99+
    2022-06-04
    实例 公众 事件
  • 使用Nodejs开发微信公众号后台服务实例
    摘要: 微信,庞大的用户基数,极强的用户粘性,在近两年吸引了无数的开发者注意力。 Nodejs,近两年发展非常快的开发工具,尤其适合构建移动后台。本文就以笔者自己开发的实例,来描述如何基于Nodejs开发属...
    99+
    2022-06-04
    后台 实例 公众
  • nodejs中怎么实现微信公众号开发
    今天就跟大家聊聊有关nodejs中怎么实现微信公众号开发,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.公众平台测试帐号的使用登录微信公众平台,由...
    99+
    2024-04-02
  • C#微信公众号开发之消息处理
    前言: 回顾上一节服务器配置的内容,我们已经可以自己完成公众号服务器的配置。配置完成之后,我们就可以通过调用的方式,完成对消息管理的处理。当用户关注公众号或者发送消息的时候,我们应该...
    99+
    2024-04-02
  • C#微信公众号开发之用户管理
    前言: 微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号提供了相应的接口方便我们调用,可方便的把用户同步到...
    99+
    2024-04-02
  • PHP中如何进行微信公众号开发?
    随着移动互联网的发展和普及,微信已成为一个重要的社交平台和移动应用程序。因此,许多企业和组织都开始利用微信公众号来推广自己的产品和服务。而PHP语言是一种广泛应用于Web开发的编程语言,因此在PHP中进行微信公众号开发也是一种常见的选择。本...
    99+
    2023-05-14
    PHP 微信公众号 开发
  • 微信公众号开发消息推送功能
    目录微信公众号开发微信公众号简介注册微信公众号注册测试公众号搭建微信本地调试环境微信公众号接入(校验签名)给指定用户推送消息网页授权获取用户openid给指定用户发送模板信息微信公众...
    99+
    2023-02-15
    微信公众号开发消息推送 微信公众号开发
  • C#微信公众号开发之自定义菜单
    前言: 回顾之前的微信公众号配置和消息处理的内容,我们已经掌握了如何配置服务器与微信公众号建立连接,也掌握了通过消息管理的方式,对用户的信息进行处理,完成公众号消息回复功能,实现公众...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作