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<String, Object> 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;
    }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在Java实习中实现企业微信自建应用授权登录获取用户信息,可以按照以下步骤进行: 1. 获取应用ID和应用Secret,可以在企业微信管理后台创建自建应用时获得。 2. 配置可信域名、回调URL、授权回调域名和网页授权域名,确保域名的正确性和安全性。 3. 在Java项目中使用企业微信提供的OAuth2.0接口或者开源的Java SDK,实现授权登录功能。 4. 引导用户跳转到企业微信授权页面进行授权授权成功后,企业微信会回调预设的回调URL,返回授权码。 5. 通过授权获取access_token用户信息,可以使用企业微信提供的OAuth2.0接口或者开源的Java SDK完成。 以下是一个使用Java SDK实现企业微信自建应用授权登录获取用户信息的示例代码: ```java // 1. 获取应用ID和应用Secret String appId = "your_app_id"; String appSecret = "your_app_secret"; // 2. 配置可信域名、回调URL、授权回调域名和网页授权域名 // 3. 使用Java SDK实现授权登录功能 WxCpService wxCpService = WxCpConfiguration.getCpService(appId); String redirectUrl = "https://your_callback_url"; String state = "your_state"; String authorizeUrl = wxCpService.getOauth2Service().buildAuthorizationUrl(redirectUrl, state); // 4. 引导用户跳转到企业微信授权页面进行授权 // 5. 企业微信回调预设的回调URL,返回授权码 String code = request.getParameter("code"); // 6. 通过授权获取access_token用户信息 WxCpOAuth2AccessToken wxCpOAuth2AccessToken = wxCpService.getOauth2Service().getAccessToken(code); String accessToken = wxCpOAuth2AccessToken.getAccessToken(); String userId = wxCpOAuth2AccessToken.getUserId(); WxCpUser wxCpUser = wxCpService.getUserService().getById(userId); ``` 注意事项: 1. 在开发过程中,需要保证应用ID、应用Secret、回调URL等参数的正确性。 2. 在获取access_token用户信息时,需要保证请求的准确性和安全性。 3. 在获取用户信息时,需要保证授权作用域的正确性和权限的足够性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值