通过微信code获取用户信息 spring boot

1、编写一个微信用户实体类
@Data
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class WeCharUserInfo implements Serializable {
    private Integer id;
    private String openid;
    private String nickname;
    private String phone;
    private String sign;
    private Integer sex;
    private String province;
    private String country;
    private String city;
    private String headimgurl;
    private String unionid;
}

2、微信配置类

/***
 * 微信配置类
 */
public class WeChatConfig {
    /**
     * 应用唯一标识,在微信开放平台提交应用审核通过后获得
     */
    public static String appId = "wx542f69c0e0006xxx";
    /**
     * 应用密钥AppSecret,在微信开放平台提交应用审核通过后获得
     */
    public static String secret= "b6b13338e92d150a2a7ef0d8db2d0xxx";
    /**
     * 填authorization_code
     */
    public static String grantType = "authorization_code";
}

3、编写 AccessTokenVo用户微信登录返回结果


@Data
@Getter
@Setter
@ToString
@ApiModel("AccessTokenVo用户微信登录返回结果")
@NoArgsConstructor
@AllArgsConstructor
public class AccessTokenVo {
    /**
     * 接口调用凭证
     */
    private String access_token;
    /**
     * access_token接口调用凭证超时时间,单位(秒)
     */
    private Integer expires_in;
    /**
     * 用户刷新access_token
     */
    private String refresh_token;
    /**
     * 用户授权的作用域,使用逗号(,)分隔
     */
    private String scope;

    private String openid;

}

4、具体方法,微信登服务接口

@Component
@Slf4j
public class WeChatService {
    /**
     * @param code
     * @return
     */
    private AccessTokenVo WeCharUserToken(final String code) throws Exception {
        //code 前端获取的code(填写前端获取的code参数)
        AccessTokenVo accessTokenVo = new AccessTokenVo();
        if (code == null || code.isEmpty()) {
            throw new Exception("微信登录验证请求code为空");
        }
        //https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
        final String tokenUrl =
                "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + WeChatConfig.appId + "&secret=" + WeChatConfig.secret +
                        "&code=" + code + "&grant_type=" + WeChatConfig.grantType + "&secret=" + WeChatConfig.secret;
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        //请求
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity<String> request = new HttpEntity<>(headers);
        ResponseEntity<String> responseString = restTemplate.postForEntity(tokenUrl, request, String.class);
        String jsonContent = responseString.getBody();
        log.info("getBody{}", responseString.getBody());
        log.info("jsonContent{}", jsonContent);
        //解析返回结果
        JSONObject jsonObject = JSONObject.parseObject(jsonContent);
        accessTokenVo = jsonObject.toJavaObject(AccessTokenVo.class);
        return accessTokenVo;

    }

    /**
     * 获取用户信息
     *
     * @param code
     * @return
     * @throws Exception
     */
    public WeCharUserInfo getWeChartUserInfo(final String code) throws Exception {
        AccessTokenVo accessTokenVo = this.WeCharUserToken(code);
        if (accessTokenVo == null) {
            throw new Exception("后端获取用户token 失败");
        }
        String token = accessTokenVo.getAccess_token();
        if (token == null || token.isEmpty()) {
            throw new Exception("获取token失败");
        }
        log.info("open id:{}", accessTokenVo.getOpenid());
        log.info("token:{}", token);
        String url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + token + "&openid=" + accessTokenVo.getOpenid();
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        //请求
        RestTemplate restTemplate = new RestTemplate();
        HttpEntity<String> request = new HttpEntity<>(headers);
        ResponseEntity<String> responseString = restTemplate.postForEntity(url, request, String.class);
        JSONObject jsonObject = JSONObject.parseObject(responseString.getBody());
        log.info("获取用户信息->jsonContent{}", responseString.getBody());
        //生成微信用户信息
        WeCharUserInfo weCharUserInfo = jsonObject.toJavaObject(WeCharUserInfo.class);
        log.info("获取用户信息->weCharUserInfo{}", weCharUserInfo);
        return weCharUserInfo;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值