微信扫码登录(2)

一、准备工作
1、全局配置的跳转路径
1

微信开放平台 重定向url

2
wx.open.redirect_url=http://回调地址/api/ucenter/wx/callback
2、修改当前项目启动端口号为8150

3、测试回调是否可用
在WxApiController中添加方法
1
@GetMapping(“callback”)
2
public String callback(String code, String state, HttpSession session) {
3
4
//得到授权临时票据code
5
System.out.println("code = " + code);
6
System.out.println("state = " + state);
7
}
二、后台开发
1、添加依赖
1

2

3
org.apache.httpcomponents
4
httpclient
5

6

7

8
commons-io
9
commons-io
10

11

12

13
com.google.code.gson
14
gson
15

2、创建httpclient工具类
放入util包
1
HttpClientUtils.java
3、创建回调controller方法
在WxApiController.java中添加如下方法
1
/**
2

  • @param code
    3
  • @param state
    4
  • @return
    5
    */
    6
    @GetMapping(“callback”)
    7
    public String callback(String code, String state){
    8
    9
    //得到授权临时票据code
    10
    System.out.println(code);
    11
    System.out.println(state);
    12
    13
    //从redis中将state获取出来,和当前传入的state作比较
    14
    //如果一致则放行,如果不一致则抛出异常:非法访问
    15
    16
    //向认证服务器发送请求换取access_token
    17
    String baseAccessTokenUrl = “https://api.weixin.qq.com/sns/oauth2/access_token” +
    18
    “?appid=%s” +
    19
    “&secret=%s” +
    20
    “&code=%s” +
    21
    “&grant_type=authorization_code”;
    22
    23
    String accessTokenUrl = String.format(baseAccessTokenUrl,
    24
    ConstantPropertiesUtil.WX_OPEN_APP_ID,
    25
    ConstantPropertiesUtil.WX_OPEN_APP_SECRET,
    26
    code);
    27
    28
    String result = null;
    29
    try {
    30
    result = HttpClientUtils.get(accessTokenUrl);
    31
    System.out.println(“accessToken=============” + result);
    32
    } catch (Exception e) {
    33
    throw new GuliException(20001, “获取access_token失败”);
    34
    }
    35
    36
    //解析json字符串
    37
    Gson gson = new Gson();
    38
    HashMap map = gson.fromJson(result, HashMap.class);
    39
    String accessToken = (String)map.get(“access_token”);
    40
    String openid = (String)map.get(“openid”);
    41
    42
    //查询数据库当前用用户是否曾经使用过微信登录
    43
    Member member = memberService.getByOpenid(openid);
    44
    if(member == null){
    45
    System.out.println(“新用户注册”);
    46
    47
    //访问微信的资源服务器,获取用户信息
    48
    String baseUserInfoUrl = “https://api.weixin.qq.com/sns/userinfo” +
    49
    “?access_token=%s” +
    50
    “&openid=%s”;
    51
    String userInfoUrl = String.format(baseUserInfoUrl, accessToken, openid);
    52
    String resultUserInfo = null;
    53
    try {
    54
    resultUserInfo = HttpClientUtils.get(userInfoUrl);
    55
    System.out.println(“resultUserInfo==========” + resultUserInfo);
    56
    } catch (Exception e) {
    57
    throw new GuliException(20001, “获取用户信息失败”);
    58
    }
    59
    60
    //解析json
    61
    HashMap<String, Object> mapUserInfo = gson.fromJson(resultUserInfo, HashMap.class);
    62
    String nickname = (String)mapUserInfo.get(“nickname”);
    63
    String headimgurl = (String)mapUserInfo.get(“headimgurl”);
    64
    65
    //向数据库中插入一条记录
    66
    member = new Member();
    67
    member.setNickname(nickname);
    68
    member.setOpenid(openid);
    69
    member.setAvatar(headimgurl);
    70
    memberService.save(member);
    71
    }
    72
    73
    //TODO 登录
    74
    75
    return “redirect:http://localhost:3000”;
    76
    }
    4、业务层
    业务接口:MemberService.java

1
Member getByOpenid(String openid);
业务实现:MemberServiceImpl.java

1
@Override
2
public Member getByOpenid(String openid) {
3
4
QueryWrapper queryWrapper = new QueryWrapper<>();
5
queryWrapper.eq(“openid”, openid);
6
7
Member member = baseMapper.selectOne(queryWrapper);
8
return member;
9
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值