vue 微信登录

news2024/10/3 6:36:44

文章目录

  • 前言
  • 一、第一步用户授权获取code
    • 1、PC扫码
      • 方式一
      • 方式二:
      • 踩坑记录
    • 2、移动端微信内置浏览器授权获取code
  • 二、第二步 通过code获取access_token
  • 三、获取用户个人信息


前言

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的 AppID 和AppSecret,申请微信登录且通过审核后,可开始接入流程。
流程图:
在这里插入图片描述
网站应用微信登录开发指南

一、第一步用户授权获取code

1、PC扫码

方式一

在这里插入图片描述
在这里插入图片描述

let APPID = "这个是申请的APPID";
let REDIRECT_URI = encodeURIComponent("这个是在微信开发工具网页端的地方填写的地址 - 授权回调域 中 后面可添加");
this.codeUrl= `https://open.weixin.qq.com/connect/qrconnect?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect`;
 <iframe  src="this.urltest"
          frameborder="0"
          width="100%"
          height="400px"
          scrolling="auto"
        ></iframe>

方式二:

在页面中先引入如下 JS 文件(支持https):

http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js

页面中使用

  // 第二种方法获取微信二维码
let APPID = "这个是申请的APPID";
let REDIRECT_URI = encodeURIComponent("这个是在微信开发工具网页端的地方填写的地址 - 授权回调域 中 后面可添加");
    this.urltest = `https://open.weixin.qq.com/connect/qrconnect?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=snsapi_login&state=3d6be0a4035d839573b04816624a415e#wechat_redirect`;
 var obj = new WxLogin({
            self_redirect: false,
            id: "login_container",
            appid: APPID ,
            scope: "snsapi_login",
            redirect_uri: REDIRECT_URI ,
            state: "A123DC35165464",
            style: "black",
            href:
              "data:text/css;base64,LmltcG93ZXJCb3ggLm5vcm1hbFBhbmVse21hcmdpbi10b3A6IDE1cHg7fQouaW1wb3dlckJveCAucXJjb2RlIHt3aWR0aDogMjMwcHg7Ym9yZGVyLWNvbG9yOiNDNUUxRkY7fQouaW1wb3dlckJveCAudGl0bGUge2Rpc3BsYXk6IG5vbmU7fQ==",
          });

在这里插入图片描述

踩坑记录

    1. 回调地址必须和回调域中填写的一直,不支持二级域名。
    1. 项目运行域名要在公众号同一域下(不确定)

2、移动端微信内置浏览器授权获取code

在这里插入图片描述
在这里插入图片描述
微信网页开发网页授权:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

// 是微信端浏览器——公众号
        let APPID = "开发者工具公众号平台注册的地方";
        let REDIRECT_URI = encodeURIComponent(“重定向地址”);
        let URL = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${REDIRECT_URI}&response_type=code&scope=snsapi_login&state=STATE&connect_redirect=1#wechat_redirect`;
        window.location.href = URL;

关于网页授权的scope的区别说明

  1. 以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
  2. 以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
  3. 如果为网页应用则填写snsapi_login
  4. 用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

二、第二步 通过code获取access_token

在上边pc扫码或者微信内置浏览器中授权登录后,会重定向到我们指定的地址。
例:域名/login/wechat/callback?code=071w80Ga1DIkmE0tdhHa1hA3QU0w80Gn&state=test
可以看到回调地址会有code和state两个参数

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

在这里插入图片描述
正确的返回:

{ 
	"access_token":"ACCESS_TOKEN", 
	"expires_in":7200, 
	"refresh_token":"REFRESH_TOKEN",
	"openid":"OPENID", 
	"scope":"SCOPE",
	"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

在这里插入图片描述
错误返回样例:

{"errcode":40029,"errmsg":"invalid code"}

返回openId和unionId这个时候就可以跟自己的业务进行关联了

三、获取用户个人信息

http请求方式: GET
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

在这里插入图片描述
返回说明
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

没想到吧,Spring中还有一招集合注入的写法

Spring作为项目中不可缺少的底层框架&#xff0c;提供的最基础的功能就是bean的管理了。bean的注入相信大家都比较熟悉了&#xff0c;但是有几种不太常用到的集合注入方式&#xff0c;可能有的同学会不太了解&#xff0c;今天我们就通过实例看看它的使用。 首先&#xff0c;声…

[附源码]JAVA毕业设计衡水特产展销系统(系统+LW)

[附源码]JAVA毕业设计衡水特产展销系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

正则匹配删除指令

// 删除以 SameSeed 开头的整行 ^SameSeed.*$执行前&#xff1a; 执行后&#xff1a; 这样我们就可以在代码发布时删除代码中所有的调试信息&#xff0c;使代码中不包含任何 DEADCODE&#xff0c;但这样会导致一个问题&#xff0c;就是会出现一个空行&#xff0c;同时代码中…

生命在于学习——docker逃逸

注意&#xff1a;本篇文章仅用于学习记录&#xff0c;不得用于其他用途。 一、docker逃逸 docker逃逸就是从当前docker容器权限中逃逸出来&#xff0c;获得宿主机的权限。 二、常见的逃逸方法 1、配置不当引起的逃逸 &#xff08;1&#xff09;Docker Remote API未授权访问…

jsp汽车租赁管理系统Myeclipse开发sqlserver数据库web结构java编程计算机网页项目

一、源码特点 jsp汽车租赁管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库sqlserver2008&#xff…

应用现代化方案实践,重塑企业应用价值—工业篇

应用现代化是指通过更现代和新兴的IT技术来改造或部署传统应用&#xff0c;从而使应用更适合企业发展的一种优化方式。在企业上云背景下&#xff0c;应用现代化改造是将遗留的传统应用改造升级到云计算环境&#xff0c;从而兼容更现代和新兴的计算技术的过程。这种改造升级的同…

软件测试分类

1、是否关注源代码 黑盒测试 - 不关注代码逻辑&#xff0c;只关注输入输出 白盒测试 - 看代码的具体实现逻辑 灰盒测试 - 既关注输入输出&#xff0c;也关注代码 2、基于测试的不同阶段 单元测试 - 在底层进行的测试&#xff0c;又称模块测试&#xff08;module testing&a…

python数组处理方法

一、数组对象的属性 数组的大小&#xff08;元素个数&#xff09; array.size数组的维度 array.ndim数组元素的数据类型 array.dtype数组的形状 array.shape数组中每个元素占用的内存空间 array.itemsize数组所有元素占用的内存空间&#xff08;字节&#xff09; array.nbytes…

实验7 Spark初级编程实践

一、实验目的 掌握使用 Spark 访问本地文件和 HDFS 文件的方法掌握 Spark 应用程序的编写、编译和运行方法 二、实验平台 操作系统&#xff1a;Ubuntu18.04&#xff08;或 Ubuntu16.04&#xff09;Spark 版本&#xff1a;2.4.0Hadoop 版本&#xff1a;3.1.3 三、实验内容和…

举个栗子~Alteryx 技巧(3):离线激活 Alteryx Designer

之前我们分享了 如何下载并安装 Alteryx Designer。然而&#xff0c;对于内网环境的用户来说&#xff0c;就无法使用上述方法来激活软件了&#xff01;那么&#xff0c;不能连接外网的电脑该如何离线激活 Alteryx Designer 呢&#xff1f; 本期《举个栗子&#xff01;Alteryx …

opencv c++ 边缘提取

1、边缘 1.1 边缘定义 以图像像素值突变最大的方向作为边缘法线&#xff0c;与边缘法线垂直的就是边缘。 边缘强度&#xff1a;局部图像上的像素值突变程度&#xff08;图像局部一阶梯度和二阶梯度值&#xff09;。 1.2 边缘类别 跃迁类型 …

645仪表以JSON格式上发方法

1.概述 之前我们已经介绍了Modbus RTU仪表实现JSON格式上发云服务器的方法&#xff0c;类似的现在也可以支持645协议的仪表通过JSON格式上发服务器。 卓岚实现645仪表转JSON网关的特点有&#xff1a; 1.提供透传、MQTT、POST、GET等上位机协议&#xff0c;结合JSON格式进行传…

CSS三大特性之层叠性

CSS的三个特性&#xff1a;层叠性&#xff0c;继承性&#xff0c;优先级 层叠性&#xff1a; 相同选择器给设置相同的样式&#xff0c;此时一个样式就会覆盖(层叠)另一个冲突的样式&#xff0c;层叠性主要解决样式冲突的问题。 层叠性原则&#xff1a; 样式冲突&#xff0c…

Deadlock found when trying to get lock; try restarting transaction

报错详情 Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction The error may involve com.iss.cms.fdrb.common.dao.entity.InterfaceQueue.updateInt…

数据库、计算机网络,操作系统刷题笔记6

数据库、计算机网络&#xff0c;操作系统刷题笔记6 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&…

RK3588平台开发系列讲解(Thermal篇)Thermal介绍及用法

平台内核版本安卓版本RK3588Linux 5.10Android12🚀返回专栏总目录 文章目录 一、Thermal介绍二、相关代码路径三、用户态接口说明四、常见问题4.1 关温控4.2 获取当前温度沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍Thermal的相关内容及调试手段。 一…

环境配置之终端WezTerm

前言 其实是在复习的过程中发现终端非常别扭&#xff0c;了解了一些大佬的使用方式后&#xff0c;尝试使用一个多平台的终端应用。 环境配置 之前在MAC上使用过的终端包括ZenTermLite和Item2&#xff0c;这次使用一个跨平台的终端WezTerm&#xff01; 缺点就是自定义的地方太…

JUC并发编程第七篇,volatile凭什么可以保证可见性和有序性?我们该如何正确使用它?

JUC并发编程第七篇&#xff0c;volatile凭什么可以保证可见性和有序性&#xff1f;我们该如何正确使用它&#xff1f;一、volatile的作用是什么&#xff1f;二、什么是内存屏障&#xff1f;三、四大内存屏障指令源码解析&#xff01;四、volatile如何通过内存屏障保证可见性和有…

Spring MVC数据绑定和表单标签的应用(附带实例)

为了让读者进一步学习数据绑定和表单标签&#xff0c;本节给出了一个应用范例 springMVCDemo04。该应用中实现了 User 类属性和 JSP 页面中表单参数的绑定&#xff0c;同时在 JSP 页面中分别展示了 input、textarea、checkbox、checkboxs、select 等标签。 应用的相关配置 在…