企业微信授权获取access_token

@Slf4j
public class QiYeWeChatUtil {

    /**
     * 缓存企业微信accessToken
     */
    public static final String QY_WX_TOKEN_kEY = "qy_wx_token:";

    @Autowired
    private QyWxConfig qyWxConfig;

    @Resource
    private RestService restService;

    @Autowired
    private RedisCache redisCache;


    /**
     * 获取企业微信 AccessToken
     *
     * @return
     */
    public String getAccessToken() {

        if (!redisCache.hasKey(QY_WX_TOKEN_kEY)) {
            //请求头
            HttpHeaders header = new HttpHeaders();
            header.setContentType(MediaType.APPLICATION_JSON);

            //请求信息,传入header
            HttpEntity<Map<String, String>> formEntity = new HttpEntity<>(header);
            StringBuilder urlBuilder = new StringBuilder(qyWxConfig.getUrl());
            urlBuilder.append("?").append("corpid=").append(qyWxConfig.getCorpid());
            urlBuilder.append("&").append("corpsecret=").append(qyWxConfig.getCorpsecret());

            try {
                ResponseEntity<Map> entity = restService.getForEntity(urlBuilder.toString(), formEntity, Map.class);

                log.info("请求企业微信,得到响应:{}", entity);
                Map body = entity.getBody();
                String accessToken = (String) body.get("access_token");
                Integer expires_in = (Integer) body.get("expires_in");
                redisCache.setCacheObject(QY_WX_TOKEN_kEY,accessToken, 7200, TimeUnit.SECONDS);
                log.info("请求企业微信,获取accessToken成功有效时间为:{}", expires_in + "分钟");
                return accessToken;
            } catch (Exception e) {
                log.error("获取token失败:{}", e);
                throw new RuntimeException("获取AccessToken失败:{}", e);
            }
        }
        log.info("从Redis缓存中获取的accessToken");
        return redisCache.getCacheObject(QY_WX_TOKEN_kEY);
    }
}

网络请求工具,使用的是okhttp,集成见链接:RestTemplate技术

package com.ruoyi.system.qiwechat.rest;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;


@Slf4j
@Service
public class RestService {

    @Autowired
    private RestTemplate restTemplate;

    public <T> ResponseEntity<T> getForEntity(String url, HttpEntity<?> request, Class<T> responseType) {
        try {
            log.debug("[GET] request:[{}],URL:{}", request, url);
            ResponseEntity<T> getForEntity = restTemplate.exchange(url, HttpMethod.GET, request, responseType);
            return getForEntity;
        } catch (Exception e) {
            log.error("[GET] error URL:{}", url, e);
            throw new RuntimeException(e);
        }
    }

    public <T> ResponseEntity<T> postForEntity(String url, Object request, Class<T> responseType) {
        try {
            log.debug("[POST] request:[{}],URL:{}", request, url);
            ResponseEntity<T> postForEntity = restTemplate.postForEntity(url, request, responseType);
            return postForEntity;
        } catch (Exception e) {
            log.error("[POST] error URL:{}", url, e);
            throw new RuntimeException(e);
        }
    }
}
在配置文件添加如下配置:
# 企业微信配置
qiyewx:
  url: XXXXXXX
  corpid: XXXXXXX
  corpsecret: XXXXXXX

@Data
@Configuration
public class QyWxConfig {

    /**
     *  请求路径
     */
    @Value("${qiyewx.url}")
    private String url;

    /**
     * 企业微信ID
     */
    @Value("${qiyewx.corpid}")
    private String corpid;

    /**
     * 企业应用的凭证密钥
     */
    @Value("${qiyewx.corpsecret}")
    private String corpsecret;

spring Redis工具类

@Component
public class RedisCache
{
 @Autowired
    public RedisTemplate redisTemplate;


/**
     * 判断 key是否存在
     *
     * @param key 键
     * @return true 存在 false不存在
     */
    public Boolean hasKey(String key)
    {
        return redisTemplate.hasKey(key);
    }


  /**
     * 缓存基本的对象,Integer、String、实体类等
     *
     * @param key 缓存的键值
     * @param value 缓存的值
     * @param timeout 时间
     * @param timeUnit 时间颗粒度
     */
    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
    {
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
    }

/**
     * 获得缓存的基本对象。
     *
     * @param key 缓存键值
     * @return 缓存键值对应的数据
     */
    public <T> T getCacheObject(final String key)
    {
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
        return operation.get(key);
    }
}

对您有所帮助请点点赞,送人玫瑰,手留余香。给作者一个👍🏻

企业微信回调配置示例:Java实现企业微信回调配置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值