您的位置:首页 > 编程语言 > Java开发

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

2019-03-21 20:00 846 查看

第一步:配置域名

由于我是本地测试,需要一个域名映射工具,改工具使用非常简单,如果自己有域名可以使用自己的域名(自己的域名必须备案)如果没有可以在第一个输入框里面输入自己的域名前缀!微信授权登录端口必须为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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: