SpringBoot2.0(九):实现微信授权登录并且获取用户信息

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/xiaofeivip_top/article/details/88724413

第一步:配置域名

由于我是本地测试,需要一个域名映射工具,改工具使用非常简单,如果自己有域名可以使用自己的域名(自己的域名必须备案)如果没有可以在第一个输入框里面输入自己的域名前缀!微信授权登录端口必须为80,然后点击后台运行映射既可以了!
在这里插入图片描述
工具下载地址: 点我下载
下面是怎么配置域名,配置完域名以后需要把一个MP_verify_xK4DtJdHxlgIHIju.txt放到项目根目录里面

/**
  * 配置微信文件
  */
 @GetMapping(value = "/MP_verify_xK4DtJdHxlgIHIju.txt")
 @ResponseBody
 public String config() {
     return "xK4DtJdHxlgIHIju121";
 };

具体配置域名查看以下连接:
https://jingyan.baidu.com/article/3c48dd34a2e52ee10be358f0.html

第二步:配置yml文件

# 项目相关配置
XF:
  # 微信授权登录配置
  # 凭证获取GET
  wx_token_url: https://open.weixin.qq.com/connect/oauth2/authorize?
  # 用户同意授权,回调url----你的域名后面再加上/getcode
  wx_redirect_url: XXXX.XXX/getcode
  # 获取openid
  wx_openid_url: https://api.weixin.qq.com/sns/oauth2/access_token?
  # 拉取用户信息
  wx_userinfo_url: https://api.weixin.qq.com/sns/userinfo?
  # 微信appid-----换成自己的
  wx_appid: XXXXX
  # 微信appSecret-----换成自己的
  wx_secret: XXXX

第三步:跳转微信然后获取code

@GetMapping(value = "/wxLogin")
    public String get() {
        String url = wx_token_url + "appid=" + wx_appid + "&redirect_uri=" + wx_redirect_url + "&response_type=code&scope=snsapi_userinfo&state=123#wechat_redi";
        return "redirect:" + url;
    }

第四步:跳转微信然后获取code


导入阿里云的JSON

<!-- 阿里云json -->
<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.47</version>
</dependency>

里面用到的doPost()方法请点击这里前去复制;
代码:

   /**
     * 获取Code
     * @param code Code
     * @return
     */
    @RequestMapping(value = "/getcode")
    @ResponseBody
    public String getCode(String code) {
        // 根据Code获取Openid
        String openidUrl = wx_openid_url + "appid=" + wx_appid + "&secret=" + wx_secret + "&code=" + code + "&grant_type=authorization_code";
        String openidMsg = MyHttpUtils.doPost(openidUrl, "", CharsetKit.UTF_8);
        // 解析返回信息
        JSONObject result = JSON.parseObject(openidUrl);
        // 网页授权接口调用凭证
        String access_token = result.getString("access_token");
        // 用户刷新access_token
        String refresh_token = result.getString("refresh_token");
        // 用户唯一标识
        String openid = result.getString("openid");

        System.err.println("code:" + code);
        System.err.println("网页授权接口调用凭证:" + access_token);
        System.err.println("用户刷新access_token:" + refresh_token);
        System.err.println("用户唯一标识:" + openid);

        // 拉取用户信息
        String userInfoUrl = wx_userinfo_url + "access_token=" + access_token + "&openid=" + openid + "&lang=zh_CN";
        String userInfoMsg = MyHttpUtils.doPost(userInfoUrl, "", CharsetKit.UTF_8);
        // 解析返回信息
        JSONObject userInfo = JSON.parseObject(userInfoMsg);

        System.err.println("用户openid:" + userInfo.getString("openid"));
        System.err.println("名字:" + userInfo.getString("nickname"));
        // 值为1时是男性,值为2时是女性,值为0时是未知
        System.err.println("性别:" + userInfo.getString("sex"));
        System.err.println("省份:" + userInfo.getString("province"));
        System.err.println("城市:" + userInfo.getString("city"));
        System.err.println("国家:" + userInfo.getString("country"));
        System.err.println("头像:" + userInfo.getString("headimgurl"));
        System.err.println("特权:" + userInfo.getString("privilege"));
        System.err.println("unionid:" + userInfo.getString("unionid"));
        return code;
    }

官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

欢迎大家加入Java互助交流群:470765097

猜你喜欢

转载自blog.csdn.net/xiaofeivip_top/article/details/88724413