获取微信的token工具类

Posted 锅巴编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取微信的token工具类相关的知识,希望对你有一定的参考价值。



import cn.hutool.extra.spring.SpringUtil;
import cn.hutool.http.HttpUtil;
import cn.RedisUtil;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;


/**
 *  <p>
 *      获取微信的token工具类
 *  </p>
 *
 * @author wss
 * @date 2021-06-07
 * */
@Slf4j
public class AccessTokenUtil 

    //获取access_token的接口地址
    public static String accessTokenUrl;
    //应用ID
    public static String appId;
    //开发者密钥
    public static String secret;

    public static RedisUtil redisUtil= SpringUtil.getBean("redisUtil");

    /**
     *  获取token
     * */
    public static String getToken () 
        //先查看Redis当中有没有,如果没有,就请求微信的接口,同时存储到Redis,同时设置过期时间
        String token = (String) redisUtil.get("wechat_token");
        if (token == null) 
            //Redis没有,请求微信的接口
            try 
                //构建url
                String url = accessTokenUrl + "?grant_type=client_credential&appid=" + appId + "&secret=" + secret;
                //3、请求接口,拿到响应信息
                String response = HttpUtil.get(url);
                //处理返回的结果
                //拿到响应回来的token
                token = JSON.parseObject(response).getString("access_token");
                //存放到Redis
                redisUtil.set("wechat_token" , token , 7100);

            catch (Exception e) 
                log.error("获取token时异常:" + e);
            

        
        return token;
    





import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;


/**
 * @Auther: wss
 * @Date: 2020/5/26 10:32
 * @Description:
 */
@Service
public class RedisUtil 
    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // =============================common============================
    /**
     * 指定缓存失效时间
     * @param key 键
     * @param time 时间(秒)
     * @return
     */
    public boolean expire(String key, long time) 
        try 
            if (time > 0) 
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            
            return true;
         catch (Exception e) 
            e.printStackTrace();
            return false;
        
    


    // ============================String=============================
    /**
     * 普通缓存获取
     * @param key 键
     * @return 值
     */
    public Object get(String key) 
        return key == null ? null : redisTemplate.opsForValue().get(key);
    

    /**
     * 普通缓存放入
     * @param key 键
     * @param value 值
     * @return true成功 false失败
     */
    public boolean set(String key, Object value) 
        try 
            redisTemplate.opsForValue().set(key, value);
            return true;
         catch (Exception e) 
            e.printStackTrace();
            return false;
        
    

    /**
     * 普通缓存放入并设置时间
     * @param key 键
     * @param value 值
     * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期
     * @return true成功 false 失败
     */
    public boolean set(String key, Object value, long time) 
        try 
            if (time > 0) 
                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
             else 
                set(key, value);
            
            return true;
         catch (Exception e) 
            e.printStackTrace();
            return false;
        
    

    /**
     * 删除缓存
     * @param key 可以传一个值 或多个
     */
    @SuppressWarnings("unchecked")
    public void del(String... key) 
        if (key != null && key.length > 0) 
            if (key.length == 1) 
                redisTemplate.delete(key[0]);
             else 
                redisTemplate.delete(CollectionUtils.arrayToList(key));
            
        
    

    /**
     * 删除缓存
     * @param keys 可以传一个值 或多个
     */
    @SuppressWarnings("unchecked")
    public void del(Collection keys) 
        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(keys)) 
            redisTemplate.delete(keys);
        
    

    /**
     * 前缀获取所有
     * @param prefix
     * @return
     */
    public Map<String, Object> getAllKeyValues(String prefix) 
        Collection<String> allKeys = this.getAllKeys(prefix);
        HashMap<String, Object> results = CollectionUtil.newHashMap();
        for (String key : allKeys) 
            results.put(key, this.get(key));
        
        return results;
    

    /**
     * 前缀获取所有key
     * @param prefix
     * @return
     */
    public Collection<String> getAllKeys(String prefix) 
        Set<String> keys = redisTemplate.keys(prefix + "*");
        if (keys != null) 
            // 去掉缓存key的common prefix前缀
            return keys.stream().map(key -> StrUtil.removePrefix(key, prefix)).collect(Collectors.toSet());
         else 
            return CollectionUtil.newHashSet();
        
    



以上是关于获取微信的token工具类的主要内容,如果未能解决你的问题,请参考以下文章

php 获取微信获取openid需要token吗

thinkphp如何获取微信的openid?

nginx+redis缓存微信的token数据

java微信的accesstoken怎么嫒缓竺小时更新

微信获取用户信息的两个接口和两个ACCESS_TOKEN

微信的公众平台api怎样才能接入成功?