app绑定微信第三方授权登录

一、继续上编文章的短信验证码账号注册登录,这次是微信授权登录

二、使用步骤

1.引入库

<!-- 苹果登录 -->
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
        <dependency>
            <groupId>com.auth0</groupId>
            <artifactId>jwks-rsa</artifactId>
            <version>0.9.0</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.2</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.2</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred -->
            <version>0.11.2</version>
            <scope>runtime</scope>

2.读入数据

controller层

 @ApiOperation(value = "微信授权登录")
    public DataResult loginByWeChat(@RequestParam("code") String code) throws Exception {
        return DataResult.success(sUserService.loginByWeChat(code));
    }

server层

public UserVO loginByWeChat(String code) {
        UserVO respVO = new UserVO();
        try {
            //通过第一步获得的code获取微信授权信息
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AuthUtil.APPID + "&secret="
                    + AuthUtil.APPSECRET + "&code=" + code + "&grant_type=authorization_code";
            JSONObject jsonObject = AuthUtil.doGetJson(url);
            String openid = jsonObject.getString("openid");
            String token = jsonObject.getString("access_token");
            String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + openid
                    + "&lang=zh_CN";
            JSONObject userInfo = AuthUtil.doGetJson(infoUrl);
            //成功获取授权,以下部分为业务逻辑处理
            if (userInfo != null && openid != null && openid.equals("")){
                String nickname = userInfo.getString("nickname");
                String headimgurl = userInfo.getString("headimgurl");// 昵称
                headimgurl = headimgurl.replace("\\", "");//头像
                SUserEntity sUser  = sUserMapper.selectOne(Wrappers.<SUserEntity>lambdaQuery().eq(SUserEntity::getOpenId, openid));
                if (ObjectUtils.isNotEmpty(sUser)){//已绑定微信
                    String accessToken = httpSessionService.createToken(sUser);

                    BeanUtils.copyProperties(sUser, respVO);
                    respVO.setAccessToken(accessToken);
                    return respVO;
                }else {//未绑定微信
                    respVO.setOpenId(openid);
                    return respVO;
                }
            }else {
                throw new RuntimeException("登录失败!!!");
            }
        } catch (Exception e) {
            throw new RuntimeException("登录失败!!!");
        }
    }

微信授权登录工具类

public UserVO loginByWeChat(String code) {
        UserVO respVO = new UserVO();
        try {
            //通过第一步获得的code获取微信授权信息
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + AuthUtil.APPID + "&secret="
                    + AuthUtil.APPSECRET + "&code=" + code + "&grant_type=authorization_code";
            JSONObject jsonObject = AuthUtil.doGetJson(url);
            String openid = jsonObject.getString("openid");
            String token = jsonObject.getString("access_token");
            String infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + openid
                    + "&lang=zh_CN";
            JSONObject userInfo = AuthUtil.doGetJson(infoUrl);
            //成功获取授权,以下部分为业务逻辑处理
            if (userInfo != null && openid != null && openid.equals("")){
                String nickname = userInfo.getString("nickname");
                String headimgurl = userInfo.getString("headimgurl");// 昵称
                headimgurl = headimgurl.replace("\\", "");//头像
                SUserEntity sUser  = sUserMapper.selectOne(Wrappers.<SUserEntity>lambdaQuery().eq(SUserEntity::getOpenId, openid));
                if (ObjectUtils.isNotEmpty(sUser)){//已绑定微信
                    String accessToken = httpSessionService.createToken(sUser);

                    BeanUtils.copyProperties(sUser, respVO);
                    respVO.setAccessToken(accessToken);
                    return respVO;
                }else {//未绑定微信
                    respVO.setOpenId(openid);
                    return respVO;
                }
            }else {
                throw new RuntimeException("登录失败!!!");
            }
        } catch (Exception e) {
            throw new RuntimeException("登录失败!!!");
        }
    }

总结

完成!!!!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值