前端H5实现微信授权

这篇具有很好参考价值的文章主要介绍了前端H5实现微信授权。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

前段时间做了一个H5项目,H5项目需要放在微信公众号里面,并且需要通过微信授权拿到openId,所以就需要实现h5授权微信这个功能了。

原理:

其实原理就是前端在本项目首页去请求微信端提供的一个地址,并且在地址上配置微信所需要的参数,比如最重要的就是你要配置微信最后获取到参数之后跳转你自己项目的地址,所以这就是h5授权微信的方式,通过用户项目跳转微信提供的地址,微信会把你所需要的参数拼接在你所填写的地址上面,最后跳转回来,你就可以直接从路径上获取了。        

参考地址:微信公众号官方文档 网页授权 | 微信开放文档

实现方式:

由于实现起来原理都是一个,所以大概有三种实现方式,分为前端获取和后端获取

方法一:(前端获取授权)

我们自己去请求微信的地址, 并且带上需要的参数

https://open.weixin.qq.com/connect/oauth2/authorize?appid=$%7Bappid%7D&redirect_uri=$%7BencodeURIComponent%28local%29%7D&response_type=code&scope=snsapi_userinfo&state=123&connect_redirect=1#wechat_redirect

    getCode() {
      // 非静默授权,第一次有弹框
      var local = window.location.href; // 获取页面url
      var appid = '你们公众号项目的appid'
      window.location.href=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
      const unionId = this.getQueryString('unionId')
      const openId = this.getQueryString('openId')
    if(unionId&&openId) {
      // 授权成功之后直接存储在vuex中
      this.$store.commit('setwxRowData',this.RowData)
    }
    },
    getQueryString(name) {
      const queryString = window.location.search;
      const params = new URLSearchParams(queryString);
      const value = params.get(name);
      return value ? decodeURIComponent(value) : null;
    }

我的代码逻辑是先判断地址栏上和vuex中有没有openId,unionId,如果都没有说明需要进行授权,于是我们在mounted里面去调用授权的方法进行授权,授权成功拿到数据之后我们可以把数据存储在vuex中,之后的话在进入项目我们直接从vuex里面去取就行了,如果请求接口提示openId,unionId失效的话,我们则清空vuex里面存储的数据重新授权获取新的参数即可。

 mounted() {
    var unionId = this.getQueryString('unionId')
    var unionId = this.getQueryString('openId')
    if(!unionId&&unionId){
      // 不存在则去授权
      this.getCode();
    }else {
      // 存在直接获取进行业务编写即可
    }
  },

存在的问题:

微信跳转的地址需要备案好的地址,所以我们在本地就是无法调试的,跳转回来会报一个redirect_url参数错误的问题

前端微信授权,vue,前端,微信,html5

解决方式:需要进行内网穿透

要在本地进行H5微信授权的联调,可以按照以下步骤进行操作:

1. 在微信公众平台上创建一个测试号,并获取测试号的AppID。

2. 在本地开发环境中创建一个H5页面,用于进行微信授权。

3. 在H5页面中引入微信JS-SDK,并使用测试号的AppID初始化。

4. 在H5页面中编写授权逻辑,包括调用微信JS-SDK的接口进行授权验证、获取用户信息等。

5. 在本地启动一个Web服务器,将H5页面部署到该服务器上。

6. 在微信公众平台的测试号设置中,配置授权回调域名为本地Web服务器的域名。

7. 在本地浏览器中访问H5页面,进行微信授权的测试。

需要注意的是,由于微信授权需要在公网环境下进行,所以在本地进行联调时,需要将本地Web服务器暴露到公网,可以使用工具如ngrok来实现内网穿透,将本地服务器映射到一个公网地址上。

另外,为了方便调试和排查问题,可以在H5页面中添加日志输出,查看授权过程中的返回结果和错误信息。

总结来说,H5微信授权的本地联调需要创建测试号、配置授权回调域名、启动本地Web服务器,并使用微信JS-SDK进行授权验证和获取用户信息。通过内网穿透工具将本地服务器暴露到公网,可以在本地浏览器中进行授权的测试。

可以对如下文章进行参考

微信h5开发网页授权-本地如何开发调试?_微信开发者如何测试本地h5登录_沐雪架构师的博客-CSDN博客

配置好之后就可以正常进行授权了

前端微信授权,vue,前端,微信,html5

允许之后就会跳转到自己项目并且带上我们所需要的参数 

 方法二:(前后端结合获取授权)

优点:前后端结合获取其实原理还是一样的原理,实现方式与前端自己获取主要变化是,我们不在需要去请求微信端的地址,后台会在微信公众平台上做一个地址映射,我们直接去请求后台提供的地址,原理是一样的,当我们请求后台地址的时候,他会去帮我们请求微信地址,最后跳转回来并且把参数带给我们,这样我们就解决了方法一前端获取参数调试需要做地址映射的步骤

 getCode() {
      // 非静默授权,第一次有弹框
      var local = window.location.href; // 获取页面url
      // 后台提供的地址 (https://cgw.cunwedu.com.cn/wx/whitelist/user/render/wechat_mp/A11)
      // 配置参数:由于后台进行配置了,我们这就不需要传递appid了,只需要带上跳转回来的地址即可
      window.location.href=`https://cgw.cunwedu.com.cn/wx/whitelist/user/render/wechat_mp/A11?part=${encodeURIComponent(local)}`
    },
    getQueryString(name) {
      const queryString = window.location.search;
      const params = new URLSearchParams(queryString);
      const value = params.get(name);
      return value ? decodeURIComponent(value) : null;
    }
  }

mounted里面进行执行,这里逻辑与方法一一样

 mounted() {
    var unionId = this.getQueryString('unionId')
    var unionId = this.getQueryString('openId')
    if(!unionId&&unionId){
      // 不存在则去授权
      this.getCode();
    }else {
      // 存在直接获取进行业务编写即可
    }
  },

方法三:(后端获取授权)

原理也是一样,也是跳转获取参数, 这个时候后端会给你提供一个地址,你直接访问他的地址就行了,他的地址会直接在微信授权成功之后拿到参数,这个时候后端会跳转我们项目的地址,并且把参数,带给我们,这对于前端来说,就轻松了很多,我们只需要直接从地址栏上获取就行了

例如http://hy-dev.xiaofugui.com.cn/sd/oauth/render/123456789/2 是后台提供的地址,https://xd-h5-dev.xiaofugui.com.cn是我们h5的项目地址,我们访问后台提供的地址之后,他就会跳转我们h5地址并且带上参数,例如https://xd-h5-dev.xiaofugui.com.cn?openId=1234&unionId=12345

对于前端来说,项目里面直接获取使用即可

  mounted() {
    var unionId = this.getQueryString('unionId')
    var openId = this.getQueryString('openId')
    if(unionId&&openId&) {
      this.$store.commit('setwxRowData',this.RowData)
    }
  },

h5授权微信分享到这里就结束了,谢谢大家的观看。文章来源地址https://www.toymoban.com/news/detail-647354.html

到了这里,关于前端H5实现微信授权的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • H5页面实现微信授权登录

    用户通过扫码海报携带活动二维码跳转到h5页面,并且完成微信授权,完成授权的用户进入小程序后不再进行授权操作。这里边涉及到了两个大问题: 一是怎样在一个域名下部署两个项目; 二是用户点击授权之后跳转当前页,获取到code值后,什么时候向服务端发送授权请求

    2023年04月08日
    浏览(40)
  • HTML5(H5)的前生今世

    HTML5是一种用于构建和呈现网页的最新标准。它是HTML(超文本标记语言)的第五个版本,于2014年由万维网联盟(W3C)正式推出。HTML5的前身可以追溯到互联网爆发的早期,当时网页设计师们面临着许多限制和挑战。 在互联网的早期阶段,网页的设计和构建主要依赖于HTML和C

    2024年02月14日
    浏览(42)
  • H5使用微信OAuth2.0授权登录,并实现内网调试。

    H5实现微信授权登录的流程不在过多赘述官方文档传送门,下面直接上如何在开发状态下实现授权登录调试。 微信公众号的开发权限,配置后续会讲。 内网穿透工具。 一个node服务点这里koa2快速搭建,传送门。 如图所示点击网页授权域名设置 将这个文件txt下载到本地,下面

    2024年02月16日
    浏览(41)
  • 前端毕业设计|课程设计|基于 HTML5 的健康减脂网站的设计与实现

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路  关注作者有好处 文末获取源码   语言环境:HTML5 开

    2024年02月04日
    浏览(46)
  • Html5版音乐游戏制作及分享(H5音乐游戏)

    这里实现了Html5版的音乐游戏的核心玩法。 游戏的制作借鉴了,很多经典的音乐游戏玩法,通过简单的代码将音乐的节奏与操作相结合。 可以通过手机进行游戏,准确点击下落时的目标,进行得分。 点击试玩 游戏内的下落数据是通过手打记录的,可能有些偏差哈。 1、Html中

    2023年04月17日
    浏览(45)
  • 前端实现微信支付(H5,微信小程序)

    通常一些电商项目使用到微信支付操作,所以简单地介绍一下微信支付的具体流程。 微信支付是微信内置微信浏览器(其他浏览器不支持)或者微信小程序的支付接口,主要负责用户对商家执行支付操作的流程。 例如常见的电商在下单环节,就需要通过使用微信支付接口,

    2024年02月08日
    浏览(53)
  • 前端H5微信支付宝支付实现

    支付宝的 首先是一个支付类型选择页面,在选择支付宝支付后,跳转到一个空白页,用于支付宝支付的中转页面。 在点击立即支付之后,直接跳转至自行设置好的空白页就好,并把你生成订单所需要的数据一并带过去。 接下来就是重点操作了(其实非常简单),在跳转这个

    2024年02月03日
    浏览(48)
  • HTML5+CSS3模拟实现《亮剑》平安县城一役精彩微信群聊-谁开的炮?

    转眼从2005年到现在,《亮剑》已经播出多年,但热度依然不减,而且每次重温我都会看出不一样的意蕴,今天,我就用 HTML5+CSS3 模拟实现《亮剑》平安县城一役精彩 微信群聊 -谁开的炮? 目录 1. 实现思路 2. 素材介绍 3. 微信群聊顶部 + 底部 + 聊天区域实现 4. 聊天区域的实现

    2024年02月02日
    浏览(42)
  • html5前端学习

    定义HTML文档,浏览器看到后就明白这个是HTML文档,所以其他元素要包裹在它里面,标签限定了文档的开始点和结束点。 head标签用于定义文档的头部,描述了文档的各种属性和信息,包括文档的标题、在Web的位置以及和其他文档的关系等,绝大多数文档头部包含的数据都不会

    2024年02月08日
    浏览(51)
  • 前端之html5

    html5优势:     语义化标签:             布局标签:              状态标签:         列表标签:        文本标签:          表单控件:         视频标签:          音频标签:         全局属性: article和section区别: 兼容性处理:            1 针对javascr

    2024年02月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包