Java微信授权登陆的实现示例
作者:JavaManual 发布时间:2021-12-11 22:03:04
前提:
微信公众平台:注册微信认证的公众号也就是服务号 ,拥有跟高级权限的微信接口。(注册服务号需要一些企业信息,需自己或者公司解决)
注: 2018年12月起 订阅号不能认证升级为服务号。但可以将你的订阅号迁移至另一个公众号,需300元费用。
准备公众号的:APPID 与 APPSECRET
二、服务号注册成功后,如果项目也有服务号的公众号平台,跟项目负责人沟通将你个人的微信号添加为服务号的管理
找到左边导航栏最下面的 基本配置 进去, 记住公众号的 AppId 与 AppSevrect , 如果AppServret忘记了重置重新记住。
配置IP白名单,项目所处的IP配置进去,如拿自己的本机ip用于临时的配置上去,等项目上线重新配置IP。
然后微信登陆需要微信网页授权,在公众中网页授权需要配置一个域名,准备一个备案的域名,域名备案好大概需要20个工作日,如果没有可以下载 花生壳软件 新手注册 会送一个免费域名 可以用来做测试,如果有备案好的域名当然更好。
没有备案的域名情况,用花生壳 内网穿透测试
自己注册 会送个免费的域名 然后花6块永久的内网穿透体验版 注册好后,内网穿透配置
配置好后可以诊断测试,确保配置的端口 在运行中,如果是项目的端口项目要处于运行中状态,不然会连接失败
这些都没问题后回到 在公众号内的左边导航找到 公众号设置 ----- 功能设置 --- 网页授权域名 进行域名授权配置。
一、域名授权需要你下载一个文件放置你的域名根目录下,也就就是你域名访问的项目的根目录下,然后在通过浏览器 域名/文件名.txt 可以访问到文件中的内容,这个是重点,一定要可以访问的到文件内容,然后在去网页授权域名绑定域名保存就好。配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权
如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可
二、记住是域名,不是URL。不需要带http。
文件放置项目的根目录或者webapp下,可以通过浏览器 域名/文件名.txt 访问文件内容,也可放置项目的目录下,访问时 域名/目录名/文件名
这里你可能会遇见配置失败 报 找不到这个文件或时文件内容不匹配
注意看你是否放置根目录下,位置没错。项目是否有 * 拦截了导致访问不到该文件
以上都都弄好了开始我们重点编码。
微信授权登陆流程:
登陆授权作用域分为两种:
一 、静默登陆 scope参数值为 snsapi_base;只能获取到用户openid。好处是静默认证,无需用户手动点击认证按钮,感觉上像是直接进入网站一样。
二、 授权登陆 scope参数值为 snsapi_userinfo;可以获取到openid、昵称、头像、所在地等信息。需要用户手动点击认证按钮
授权登陆步骤:
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)和openid
3、通过网页授权access_token和openid获取用户基本信息
一、 微信登陆触发按钮或图片链接
在首页准备一个按钮或者一个链接用来发起请求。
这里我们用一个链接做示例
1.通过微信接口获取code
微信获取code接口: https://open.weixin.qq.com/connect/oauth2/authorize?
参数下表:
参数 | 是否必须 | 说明 |
appid | 是 | 公众号的唯一标识 |
redirect_uri | 是 | 授权后重定向的回调链接地址,请使用urlencode对链接进行处理 |
response_type | 是 | 返回类型,请填写code |
scope | 是 | 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息) |
state | 否 | 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节 |
#wechat_redirect | 是 | 无论直接打开还是做页面302重定向时候,必须带此参数 |
code作为换取access_token的票据,每次用户授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期。
Controller控制器:
微信用户授权确认登陆
第一步登录链接拼好后,在手机微信中打开,微信便会跳转到确认授权页面,点击确认授权即可。(这一步,不用开发者做处理!)
用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE。
二、获取 openid
请求与带携带参数
返回的数据字段
代码
三、获取用户信息
请求与参数
返回的JSON数据及字段解释
代码:
最后的 回调请求 回授权成功页面
获取到用户信息可进一步进行业务处理,
成功页面
结果图
首页:
用户授权确定登陆:
授权成功:
详情也可去看官方文档:https://mp.weixin.qq.com/wiki?action=doc&id=mp1421140842&t=0.2934098934066318#2
来源:https://blog.csdn.net/qq_37130983/article/details/88372936


猜你喜欢
- screenshot截图展示import step1. Add it in your root build.gradle at the en
- 本文实例讲述了基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览的方法。分享给大家供大家参考。具体分析如下:一
- 四种隔离机制不要忘记:(1,2,4,8)1.read-uncommitted:能够去读那些没有提交的数据(允许脏读的存在)2.read-co
- equals函数在基类object中已经定义,源码如下 public boolean equals(Object obj) { return
- Drawable天天用,可你是否对Drawable家族有一个完整的认知?今天我们就来系统的学习一下Drawable的使用。1.概述用过Dra
- 本文实例为大家分享了Android Service实现自动更换手机壁纸的具体代码,供大家参考,具体内容如下先看下效果:使用界面:划重点,使用
- 目录1 CyclicBarrier方法说明2 CyclicBarrier实例3 CyclicBarrier源码解析CyclicBarrier
- 今天,简单讲讲android里关于@id和@+id的区别。之前,自己在布局里无论什么情况都使用@+id,可是后来发现有些代码用的是@id,自
- 在开发过程中,我们需要统一返回前端json格式的数据,但有些接口的返回值存在 null或者""这种没有意义的字段。不仅影
- 这篇文章主要介绍了java操作elasticsearch的案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 本文为大家分享了 Android Retrofit 2.0框架上传图片解决方案,具体内容如下1.单张图片的上传/** * 上传一
- 本文实例为大家分享了使用aop实现全局异常处理的具体代码,供大家参考,具体内容如下日常业务中存在的问题使用大量的try/catch来捕获异常
- 前言在之前学习如何使用MediaPlayer后,了解到Android系统提供开发者播放多媒体全家桶能力,但对于开发者希望DIY自由度更高的播
- 在Material Design里,CoordinatorLayout通常用来作为顶层视图,来协调处理各个子View之间的动作,从而实现各种
- 本文实例为大家分享了Android表格布局TableLayout的具体代码,供大家参考,具体内容如下1.TableLayout TableL
- 一、maven引入依赖,数据库驱动根据项目需求自行引入<!-- https://mvnrepository.com/artifact/
- 绘制模糊数学中隶属函数分布图using System; using System.Collect
- listview实现上拉加载以及下拉刷新的方式有很多。下面是我写的一种自定义的布局,复用性也比较的强。首先就是继承的listview的自定义
- 本文假设读者已经有一定Dagger2使用经验使用疑惑之前工作中一直在使用dagger2进行开发,用起来确实很爽,但是我从我第一次使用我就一直
- 一、在GitHub上创建一个OAuth二、OAuth的原理Spring官方文档三、OkHttp的使用OkHttp官方网站1.Post代码示例