Spring Boot + 微信公众号授权登录获取用户信息

通过微信公众平台的官方文档,总结出网页授权流程分为:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

简单总结成代码就是:

1、controller

@RestController
@RequestMapping("/wxAuth")
public class WxLoginController {
   

    @RequestMapping("/login")
    public void wxLogin(HttpServletResponse response) throws IOException {
   
        //请求获取code的回调地址
        //用线上环境的域名或者用内网穿透,不能用ip
        String callBack = "http://你的域名/wxAuth/callBack";

        //请求地址
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize" +
                "?appid=" + 你的appid +
                "&redirect_uri=" + URLEncoder.encode(callBack) +
                "&response_type=code" +
                "&scope=snsapi_userinfo" +
                "&state=STATE#wechat_redirect";
        //重定向
        response.sendRedirect(url);
    }
    
    //	回调方法
    @RequestMapping("/callBack")
    public void wxCallBack(HttpServletRequest request,HttpServletResponse response) throws IOException {
   
        String code = request.getParameter("code");

        //获取access_token
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token" +
                "?appid=" + appId +
                "&secret=" + appSecret +
                "&code=" + code +
                "&grant_type=authorization_code";

        String result = HttpClientUtil.doGet(url);

        System.out.println("请求获取access_token:" + result);
		//返回结果的json对象
        JSONObject resultObject = JSON.parseObject(result
### 使用 Spring Boot 开发微信公众号应用 #### 集成准备 为了实现基于Spring Boot微信公众号开发,需先完成必要的准备工作。这包括注册信公众平台账号并创建相应的公众号,在此过程中会获得`AppID`和`AppSecret`两个重要参数[^1]。 #### 授权流程解析 当用户访问链接时,通过OAuth2.0授权机制来获取用户的同意授权。具体来说,就是构建一个带有特定参数(如`appid`, `redirect_uri`, `response_type`, `scope`, 和`state`)的URL请求发送给信服务器。一旦用户确认授权,则会被重定向到指定页面,并附带授权码作为查询字符串的一部分。 ```java @GetMapping("/auth") public String auth(@RequestParam(value="code") String code){ // 处理接收到的授权码... } ``` #### 获取用户信息 利用上一步得到的授权码可以向信接口申请换取access_token以及openid。之后再凭借这些凭证调用信API取得更详细的用户资料,比如昵称、头像等个人信息。 ```json { "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" } ``` ```java // 假设已经成功获得了 access_token 和 openid String accessToken = "..."; String openId = "..."; RestTemplate restTemplate = new RestTemplate(); Map<String, Object> params = Map.of( "access_token", accessToken, "openid", openId, "lang", "zh_CN" ); ResponseEntity<Map> response = restTemplate.getForEntity( "https://api.weixin.qq.com/sns/userinfo?" + "access_token={access_token}&openid={openid}&lang={lang}", Map.class, params ); System.out.println(response.getBody()); ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值