Java快速对接微信登录

OAuth2.0是在客户端和服务端之间有一个授权层,用来将用户和客户端进行分开客户端登录授权层使用的是令牌,意思是给了多少的权限也就只能有多少的权限之类的资源

OAuth的四种模式

A-授权码模式:

你要去学校,学校有保安把大门守着,你先去找你的班主任说你要进学校,你班主任给你一个code,你把这个code去保安看,保安知道了,给你大门的钥匙(token)你拿到这个token就进入了学校

B-简化模式

就是你直接去找保安,他直接就把token给你,你拿到这个token就去开门去进入

一般是用于第三方单页面应用

C-密码模式

给你账号和密码你去开门,

这种是用于第一方的单页面应用以及第一方的原生app (内部使用)

D-客户端模式

你是个人就直接进入学校

所有最安全的模式是授权码模式

3.准备工作--以开发网站为案列

进行相关的注册和申请的步骤

获取到该网站的APPID 和APPSECRET 回调域(如果在公司,这里是直接找公司拿即可)

大致流程图如下

4.实现步骤

A-获取code

前端进行调用获取到code给后端进行传入

public AjaxResult wechat(Map<String, String> map) {
        // 1.接收code,做校验
        String code = map.get("code");

B-根据code进行发送http请求获取到token和appid

这是请求的链接,对应的填入要的数据即可

我这里是把这个请求的链接进行封装为一个枚举,然后在进行数据的替换

C-发送数据进行获取到返回的数据

这里返回的数据我进行了一个对象来进行接受,在进行json数据转实体对象的转化

/*发送Http获取到的是Stirng类型*/

        String httpGet = HttpClientUtils.httpGet(getToken);
        /*把String类型用JSON对象来接受一波*/
        JSONObject jsonObject = JSONObject.parseObject(httpGet);
        /*把里面的openid 和token拿出来*/
        String access_token = jsonObject.getString("access_token");
        String openid = jsonObject.getString("openid");

D-将数据进行返回给前端即可,进行登录

5.其他步骤

如果第二次,第n次登录的时候怎么办,这么实现免密登录?

5.1设计数据库

要知道是否是第一次还是第二次,那么就要在你的数据库留下东西来证明

这里我把登录成功之后会返回一些东西进行作为字段放在数据库

5.2验证是否存在---(存在)

拿出里面的数据openid去本地数据去查询有无这个包含该字段的对象

----(这里是存在就进行免密登录)

String access_token = jsonObject.getString("access_token");
        String openid = jsonObject.getString("openid");
        // 3.根据openId查询本地的t_wxuser,看是否曾今已经扫码过
        Wxuser wxuser = wxuserMapper.loadByOpenId(openid);
        // 3.1. 有值且t_wxuser表中的user_id有值 曾今已经扫过,本次是第二...N扫码
        if (wxuser != null && wxuser.getUserId() != null) {

            /*以下是免密登录*/
            Logininfo logininfoTmp = logininfoMapper.loadByUserId(wxuser.getUserId());

5.3创建自己程序端的用户

自己程序端用户:意思是通过比如手机号注册,短信注册,账号密码注册等;而不是第三方的用户

5.4验证是否存在--(不存在)

这里需要给正在登录的用户跳转到本地用户注册的页面,拿就要告诉前端验证不存在进行跳转,所有这里我直接把验证失败消息放回,并且把openid和token一起带回

这里是通过Ajax后置拦截器(后面有时间写4大拦截器)跳转到注册页面(在这里简称callback页面)

在callback页面用户进行手机号注册,

大致页面就是获取用户的手机号

因为他是第一次登录,所有我要给他进行新建一个本地用户对象,我的本地用户对象里面的字段有个手机号(为了后面的业务)所有我这里可以先获取到他的手机号

当点击注册按钮之后的操作

前端携带上openid和token手机号,到后端

这里大致说一下步骤

A-先把前端给的数据进行基本的校验

B-拿到手机去本地用户表查询有无对象

E-进行免密登录,把相关的信息进行封装为map放回前端即可

以下是相关的代码

当这里不管是第一次还是第n次的对于的步骤都有

以下是所有的大致的步骤流程图

完整的图在下面的链接

经验分享 程序员 微信小程序 职场和发展