【微信登录】开发回调URL

在这里插入图片描述


# 微信开放平台 重定向url
wx.open.redirect_url=http://回调地址/api/ucenter/wx/callback

在这里插入图片描述


@GetMapping("callback")

public String callback(String code, String state, HttpSession session) {


    //得到授权临时票据code

    System.out.println("code = " + code);

    System.out.println("state = " + state);

}

在这里插入图片描述

<!--httpclient-->

<dependency>

    <groupId>org.apache.httpcomponents</groupId>

    <artifactId>httpclient</artifactId>

</dependency>

<!--commons-io-->

<dependency>

    <groupId>commons-io</groupId>

    <artifactId>commons-io</artifactId>

</dependency>

<!--gson-->

<dependency>

    <groupId>com.google.code.gson</groupId>

    <artifactId>gson</artifactId>

</dependency>

在这里插入图片描述
在这里插入图片描述

/**

* @param code

* @param state

* @return

*/

@GetMapping("callback")

public String callback(String code, String state){

    //得到授权临时票据code

    System.out.println(code);

    System.out.println(state);

    //从redis中将state获取出来,和当前传入的state作比较

    //如果一致则放行,如果不一致则抛出异常:非法访问

    //向认证服务器发送请求换取access_token

    String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" +

        "?appid=%s" +

        "&secret=%s" +

        "&code=%s" +

        "&grant_type=authorization_code";

    String accessTokenUrl = String.format(baseAccessTokenUrl,
                                          ConstantPropertiesUtil.WX_OPEN_APP_ID,
                                          ConstantPropertiesUtil.WX_OPEN_APP_SECRET,

                                          code);

    String result = null;

    try {

        result = HttpClientUtils.get(accessTokenUrl);

        System.out.println("accessToken=============" + result);

    } catch (Exception e) {

        throw new GuliException(20001, "获取access_token失败");

    }


    //解析json字符串
    Gson gson = new Gson();

    HashMap map = gson.fromJson(result, HashMap.class);

    String accessToken = (String)map.get("access_token");

    String openid = (String)map.get("openid");

    //查询数据库当前用用户是否曾经使用过微信登录
    Member member = memberService.getByOpenid(openid);

    if(member == null){

        System.out.println("新用户注册");

        //访问微信的资源服务器,获取用户信息

        String baseUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo" +

            "?access_token=%s" +

            "&openid=%s";

        String userInfoUrl = String.format(baseUserInfoUrl, accessToken, openid);

        String resultUserInfo = null;

        try {

            resultUserInfo = HttpClientUtils.get(userInfoUrl);

            System.out.println("resultUserInfo==========" + resultUserInfo);

        } catch (Exception e) {

            throw new GuliException(20001, "获取用户信息失败");

        }

        //解析json

        HashMap<String, Object> mapUserInfo = gson.fromJson(resultUserInfo, HashMap.class);

        String nickname = (String)mapUserInfo.get("nickname");

        String headimgurl = (String)mapUserInfo.get("headimgurl");

        //向数据库中插入一条记录

        member = new Member();

        member.setNickname(nickname);

        member.setOpenid(openid);

        member.setAvatar(headimgurl);

        memberService.save(member);

    }

    //TODO 登录

    return "redirect:http://localhost:3000";

}

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_树先森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值