JAVA 整合微信公众平台,实现获取accessToken、用户授权登录

一、获取accessToken

1. 统一管理一些地址

public interface WeChatConstants {

    // 获取全局access_token地址
    String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";

    String getTicket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi";

    // 获取客户信息
    String getUserUtl = "https://api.weixin.qq.com/cgi-bin/user/info";

    // 用户授权 获取access_token地址
    String getUserTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";
    //String getUserTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code";

    //公众号推送消息
    String templateSendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";

    // 获取客户信息(授权版)
    String getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo";
    // appid
    String appid = "自己公众号的appid";

    // secret
    String secret = "自己公众号的secret";

}

2.获取accessToken

  public String getAccessToken() {
        //从缓存中获取
        Object obj = redisTemplate.opsForValue().get("access_token");
        if (obj != null){
            String access_token = (String)obj;
            return access_token;
        }else {
            String url = String.format(WeChatConstants.getTokenUrl, WeChatConstants.appid, WeChatConstants.secret);
            String result = NetWorkUtil.getHttpsResponse(url, "GET");
            if (StringUtils.isBlank(result)) {
                return "";
            }
            JSONObject json = JSON.parseObject(result);
            // 获取token
            String access_token = json.getString("access_token");
            redisTemplate.opsForValue().set("access_token", access_token);
            redisTemplate.expire("access_token", 90, TimeUnit.MINUTES);//缓存一个半小时
            return access_token;
        }
    }

因为微信公众平台每天获取accessToken的次数有限制,限额为2000次,并且每次获取都会返回新的accessToken,旧的accessToken会被刷掉。所以我们要将accessToken进行缓存,微信公众平台accessToken过期时间为2小时,我们需将缓存时间设置为小于2小时,这里设置成了一个半小时。

二、用户授权登录

1.获取用户openid

 public String auth(String code) {
        Map map = new HashMap();
        map.put("appid", WeChatConstants.appid);
        map.put("secret",  WeChatConstants.secret);
        map.put("code", code);
        map.put("grant_type", "authorization_code");
        //HttpUtil为hutool工具包下的
        String wxResult = HttpUtil.get(WeChatConstants.getUserTokenUrl, map);
        JSONObject object = JSONObject.parseObject(wxResult);
        String openid = (String) object.get("openid");
        return openid;
    }

2. 根据accessToken和openid获取用户信息

    public String getUser(String code) {
        String result = NetWorkUtil.getHttpsResponse(String.format(WeChatConstants.getUserTokenUrl,
                WeChatConstants.appid,
                WeChatConstants.secret,
                code), "GET");

        JSONObject json = JSON.parseObject(result);
        String openid = json.getString("openid");
        String access_token = json.getString("access_token");
     
        // 获取用户信息
        String userInfo = NetWorkUtil.getHttpsResponse(String.format(WeChatConstants.getUserInfoUrl,
                access_token,
                openid), "GET");

        return userInfo;
    }

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/69a489e0be.html