微信登录——授权登录获取用户信息

引言

实现微信扫码登录关键之处就是获取到微信用户信息,那么这就涉及到了微信授权,通过微信授权我们可以获取到用户信息;微信官方文档写的还是比较详细的,但是没有代码演示,这里我就用代码演示一下如何实现微信授权登录;

可以先看看文档:网页授权

流程梳理

文档中把整个授权流程分为以下几步:

image-20220930180834077

总结来说就是需要通过这几部操作获取一些参数从而通过参数进而获取一些其他信息;


其实我感觉就第一步可能不好理解些,因为参数比较多,调用接口为:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

这里主要注意的就是 redirect_uri 和 scope 两个参数;

scope 文档有解释,就是获取信息的内容和方式的区别,挺好理解的;

image-20220930181252778

而redirect_uri 是该授权接口调用后要重定向的链接,该链接是需要自己实现的,其实就是实现一个重定向的接口,并且重定向后该接口会携带两个参数:code和state:

image-20220930181539741

这个code就是第一步需要获取的主要参数;

剩下的步骤就是继续向下调用接口就好了,就不是特别难理解了;

代码实现

在实现代码前还是需要一些准备工作,准备工作看我的这篇文章:微信公众号扫码登录(一)—— 获取微信公众号二维码这几块部分:

image-20220930181930014

当一切都配置好后,就可以开始具体代码开发了;


其实代码并不难,就是实现两个接口:

image-20220930182146405

第一个接口(/redirect)代码:

// 调用微信授权接口重定向
@GetMapping("/redirect")
public String toRedirectUrl(HttpServletResponse response) {String redirectUrl = "https://open.weixin.qq.com/connect/oauth2/authorize" +"?appid=" + WXConstant.APP_ID +"&redirect_uri=" + WXConstant.REDIRECT_URL +"&response_type=code" + "&scope=snsapi_userinfo" +"&state=STATE" + "&connect_redirect=1#wechat_redirect";try {response.sendRedirect(redirectUrl); // 重定向url} catch (IOException e) {log.error("获取微信code失败: " + e.getMessage());}return "重定向成功";
}

这里还是说一下redirect_uri,该重定向url需要重定向到**/redirect/info接口**,所以我的WXConstant.REDIRECT_URL实际是:

http://内网穿透域名/api/wx/redirect/info

那么当我调用/redirect接口时,该接口内部逻辑就是重定向url,然后重定向到/redirect/info接口,此时该接口对应url上就会携带有code和state参数,可以通过微信开发者工具看一下:

image-20220930182939229

调用该接口:

image-20220930183019217

因为scope参数为userinfo,所以需要用户同意授权才行;

点击同意,可以观察network内的请求:

image-20220930183301475

可以看到成功重定向到了/redirect/info接口,并且附带了code和state参数;

到这里文档的第一步就完成了,下面几步就不难了;


第二个接口就是重定向到的/redirect/info接口,下面是代码实现:

// 授权接口重定向回调方法
@GetMapping("/redirect/info")
public BaseResponse<String> redirectInfo(@RequestParam(value = "code") String code,@RequestParam(value = "state", required = false) String state,HttpServletResponse response) {String username = ""; // 微信用户名try {// 第二步:通过code获取access_token和openidString getAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +"?appid=" + WXConstant.APP_ID +"&secret=" + WXConstant.APP_SECRET +"&code=" + code +"&grant_type=authorization_code";String accessTokenRes = HttpClientUtil.doGet(getAccessTokenUrl);log.info("accessTokenRes=>" + accessTokenRes);String accessToken = (String) JSON.parseObject(accessTokenRes).get("access_token");String openid = (String) JSON.parseObject(accessTokenRes).get("openid");// 第四步:通过access_token和openid获取到用户信息String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo" +"?access_token=" + accessToken +"&openid=" + openid +"&lang=zh_CN";String userInfoRes = HttpClientUtil.doGet(getUserInfoUrl);WxUserInfo userInfo = JSON.parseObject(userInfoRes, WxUserInfo.class); // 获取到了微信用户信息username = userInfo.getNickname(); // 获取微信用户名// TODO 微信用户注册并登录逻辑log.info("注册成功");} catch (Exception e) {e.printStackTrace();}return ResultUtils.success(" 用户:" + username + "登录成功!");
}

首先就是该接口会携带有code和state参数,所以就得接收一下code和state;

文档中第三步并不是必须,可以根据实际自行调用;

该接口实际就是调用文档中的第二步和第四步微信提供的接口;

第四步调用就可以获取到用户信息了,主要有以下信息:

image-20220930184311055

也是文档中的,这些看文档就行;


测试一下,授权完成后,重定向到该接口:

image-20220930184852576

可以看到获取到我的微信名,当然也可以获取其他参数,这里就不演示了;

到这里这个接口也就完成了,其实这个接口调用并不难,细心看文档都能实现;


下面是上面代码用到的一些类:

HttpClientUtil在微信公众号扫码登录(一)—— 获取微信公众号二维码一文中有,太长了,这里就不占位了;

然后是WxUserInfo封装类返回用户的一些信息

import lombok.Data;/*** 微信用户信息实体*/
@Data
public class WxUserInfo {private String openid;private String nickname;private Integer sex;private String language;private String city;private String province;private String country;private String headimgurl;
}

总结

这就是我们经常用到的微信授权,其实看文档并不是特别难,希望本文对你有帮助,也欢迎各位交流!

这里再多提一嘴,我在实现微信扫码登录时感觉接口调用并不难,但是稍微感觉有点困难的就是如何让用户主动调用到授权接口;我没有找到太好的方法,于是就在公众号界面加了一个登录链接,让用户主动点击从而调用授权接口;

还有一点是用户授权并获取信息是发生在后端的,那么如何把授权成功从而获取到的用户信息通知给前端呢?我看牛客网和微信网易版的微信登录好像在扫码前一直向后端发送请求,应该是获取登录信息;但是我对这一块并不是特别了解,所以我选择了另一种方法,就是通过websocket向前端发送授权登录后的信息,这样也实现了这一功能,但是并不确定这样做到底好不好,所以代码也就不放出来了,如果各位有更好的方法,希望指点一二;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

空指针的传说——从神秘出生到打败AI败类

大家好&#xff0c;我是数行天下&#xff0c;某C9双985硕士&#xff0c;交叉学科专业背景&#xff0c;具有多元化思维视角&#xff0c;拥有金融科技、互联网等多行业职业经历&#xff0c;现为某头部金融机构高级系统架构师。热爱思考&#xff0c;从过去到未来都有强烈的好奇心&…

LLM-2023:Auto-GPT

从本质上来看,Auto-GPT 是一种自动文本生成技术,它使用深度学习算法来生成类似人类的文本。它基于生成式预训练转换器 ( GPT ) 架构,是一种旨在生成自然语言文本的神经网络。 来源:https://github.com/Significant-Gravitas/Auto-GPT 据开发者介绍,Auto-GPT 是由 GPT-4 …

强烈推荐一个Python可视化模块,简单又好用!

超级无敌干货&#xff0c;第一时间送达&#xff01;&#xff01;&#xff01; 数据可视化动画还在用Excel做&#xff1f; 现在一个简单的Python包就能分分钟搞定&#xff01; 而且生成的动画也足够丝滑&#xff0c;效果是酱紫的&#xff1a; 这是一位专攻Python语言的程序员开发…

如何在家赚钱?宅在家里做点什么能挣钱

当今社会&#xff0c;由于各种原因&#xff0c;越来越多的人宅在家里&#xff0c;或者说下班之余宅家的空闲时间很多。这个时候呢&#xff0c;大家就会想利用空闲时间做点兼职副业来增收。 在这个信息爆炸的时代&#xff0c;互联网无疑是你实现在家赚钱的理想平台。宅在家里&am…

2023年,知识付费行业呈现哪些发展趋势?

艾媒咨询数据显示&#xff0c;2022年中国知识付费市场规模达1126.5亿元&#xff0c;较2015年增长约70倍&#xff0c;预计将在2025年超过2800亿元。随着疫情形势持续好转&#xff0c;知识付费的“居家红利”或将逐渐消退&#xff0c;但三年来用户的付费求知和在线学习习惯已经养…

一起推动更为广泛的创新发生!AIGC分布式创新联盟#工作小组介绍

AIGC 破圈前行 闯荡星际 分布式 无地域限制 跨领域整合 社区参与~ 游戏化积分激励 开放共享的创新生态 对于时代的声音&#xff0c;你会选择 一探究竟 加入我们 一波正经的自我介绍 AIGC分布式创新联盟由无界社区Mixlab、青年DAO、AIGC涌现小酒馆发起。联盟采取超级个体社群的共…

如何通过AI图片数字人引流变现,轻松日入1000+

AI图片数字人项目 项目分析 今天要跟大家分享关于AI图片数字人项目的玩法思路&#xff0c;最近有一个大佬通过玩AI图片数字人&#xff0c;在各大平台获得了惊人的涨粉效果&#xff0c;通过收徒变现和电商带货&#xff0c;轻松日收1000&#xff0c;我希望每一次的分享不仅仅是…

对不起,ChatGPT 不会干掉你,而是干掉整个行业

观点| Mr.K 主笔| Wendy.L 来源| 技术领导力(ID&#xff1a;jishulingdaoli) 近日&#xff0c;根据网站流量监测平台SimilarWeb的数据&#xff0c;自从OpenAI的对话人工智能工具ChatGPT推出以来&#xff0c;程序员们交流技术问题的问答网站平台Stack Overflow的流量骤降&…

借助ChatGPT,每天制作100条短视频

原文&#xff1a;‍‬‍‍⁡‬‌‬⁤‌⁡⁣‌⁡⁣⁤‬⁣‌‌&#xfeff;⁢⁡‌⁤‍⁢⁣‌‌⁣&#xfeff;‍⁤⁣⁤⁡⁢⁡⁣⁢https://wfscknagql.feishu.cn/docx/HZAPd1iIXoHo5mxcUBZcd3ILnsc 一直研究ChatGPT究竟能做什么&#xff0c;网上有太多的文章&#xff0c;不管别人…

43 岁硅谷技术大拿命丧街头,真凶落网:熟人作案,是 Expand IT 创始人

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 据旧金山警察局( SFPD )官网发布的警情通报显示&#xff0c;4 月 4 日凌晨 2 点 35 分左右&#xff0c;旧金山南站警察在 Main Street 的第 300 街区接到一起刺伤案&#xff0c;一名 43…

Twitter CEO辞任,硅谷印度裔高管再添一人

“不知道你们听说了没&#xff0c;但是我已辞去推特的工作了”。 当地时间11月29日&#xff0c; Twitter联合创始人、CEO杰克多西&#xff08;Jack Dorsey&#xff09;发布推文正式宣布辞去CEO职位&#xff0c;由CTO帕拉格阿格拉瓦尔&#xff08;Parag Agrawal&#xff09;接替…

硅谷华人天才CEO被开除,是否会有奇迹发生?

目录 1、事件始末2、侯晓迪是谁&#xff1f;3、全球自动驾驶卡车领军者4、侯晓迪公开信5、会有奇迹发生&#xff1f; 1、事件始末 著名自动驾驶卡车公司图森未来&#xff08;TuSimple, TSP&#xff09;10 月 31 日突然表示&#xff0c;已将首席执行官兼联合创始人侯晓迪解雇&a…

文案改写原创用什么软件v.1.2.1

文案改写原创软件是一款用于改写文本内容的专业软件&#xff0c;它可以帮助用户快速地改写文章而不会丢失文章的原意。它可以帮助用户从现有文章中获取原创性内容&#xff0c;并让文章更有创意和独到之处。 文案改写原创用什么软件&#xff1a; 自去年11月发布以来&#xff0c;…

下班后有什么可以做的副业?分享几个靠谱线上和线下副业

工作之余&#xff0c;做副业不仅可以增加收入&#xff0c;还有助于提高技能以及开拓人际关系。以下是几种可以尝试的副业&#xff0c;每一种都有其独特的优势和挑战。 一、代理销售&#xff1a;找到适合自己的代理销售产品&#xff0c;比如化妆品、保健品、服装等。可以通过社交…

普通人可以做的七个小众副业,让你告别死工资

现在有什么副业又简单又可以赚得一定的收入呢&#xff0c;当然是有的&#xff0c;下面分享七个适合普通人操作的七个小众副业。 1.手工制品 现在手工制品越来越贵&#xff0c;可以做的种类也很多&#xff0c;比如粘土.针织.滴胶.奶油.手机壳.发夹之类的&#xff0c;又是兴趣&a…

涨姿势!国外程序员搞副业的 10 大方式

千禧一代是最不教条的一代&#xff0c;我们开始追求自由职业&#xff0c;追求远程办公&#xff0c;那么势必需要很多方式来创造收入养活自己&#xff0c;最近看了一篇非常好的文章&#xff0c;介绍如何搞副业致富&#xff0c;分享给大家。 如果你和我一样&#xff0c;是一个精通…

一个专门帮助前端搞副业的社群

大家好&#xff0c;我是大帅&#xff0c;一个老程序猿。 在掘金社区&#xff0c;哔哩哔哩&#xff0c;微信公众号都叫这个名字哟。2021年以来&#xff0c;我一直坚持写原创技术专栏&#xff0c;获得了不少朋友的认可和支持。2022年我的目标是把自己的经验分享给广大的热爱编程的…

这些肺腑之言,送给想搞副业的程序员们

本公众号的大多数读者应该都是从事程序开发或者相关&#xff0c;或许在北京上海深圳&#xff0c;或许在南京武汉广州&#xff0c;或许在郑州合肥&#xff0c;或许在其他一些二线三线城市。大多数程序员其实是单纯而又朴实的&#xff0c;晚上可能在骂老板抠门、产品经理SB&#…

走进独自开,带你轻松干副业

今天给大家分享一个开发者的福利平台——独自开&#xff08;点击直接注册&#xff09;&#xff0c;让你在家就能解决收入问题。 文章目录 一、平台介绍二、系统案例三、获取收益四、使用平台1、用户注册2、用户认证3、任务报价 五、文末总结 一、平台介绍 简单说明 独自开信息…

别再光靠工资过日子,外国程序员教你如何通过副业赚钱

除了主要收入外&#xff0c;本文介绍了7种兼职赚钱的方法&#xff0c;让你拥有“睡后收入” 坦白说&#xff0c;如果你希望在一两年内通过工作成为百万富翁&#xff0c;那么实现这个目标的可能性很小。考虑到就业安全性的不确定性&#xff0c;公司在财务困难时可能被迫裁员。尽…