首页 > 其他分享 >获取微信的token工具类

获取微信的token工具类

时间:2023-06-17 18:12:51浏览次数:40  
标签:return String 微信 获取 token key import public



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();
        }
    }
}


标签:return,String,微信,获取,token,key,import,public
From: https://www.cnblogs.com/guobabiancheng/p/17487992.html

相关文章

  • 如何通过店铺 ID 获取淘宝店铺商品数据上传至京东店铺,整店商品数据搬家,淘宝店铺所有商
    在电商行业还是销量为王,因此在很多相关行业,比如商品搬家行业都需要用到相关的商品详情信息,但是官方一般又没有开放这些接口,怎么办?  解决方案现在很多是通过爬虫获取数据,但是根本扛不住大量调用,不稳定,真能稳定获取了也不是一般人有能力去做的,加上淘宝变化频繁,防爬越来越严,技术难......
  • 通过API接口获取淘宝商品详情的优势
    淘宝是中国最大的B2C电商平台之一,其中的淘宝商品数量大约超过5亿,是众多电商平台当中规模最大的一个,可谓是无所不能,集合了商品的数量、品种、质量、价格、促销、评价等多种信息。对于电商企业来说,淘宝的商品信息是不可或缺的,因此如何快速、方便地获取淘宝商品的详情信息是个非常重......
  • 彻底搞懂cookie、session、token
    文章目录前言1.cookie2.session3.token3.1为什么要使用token3.2token详解 前言cookie、session、token为了解决什么问题:HTTP是一种无状态的协议,而服务器的业务必须是有状态的。随着在线购物网站、需要登录的网站等等,面临的问题就是要管理......
  • JSON Web Token 入门教程
     JSONWebToken(缩写JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。一、跨域认证的问题互联网服务离不开用户认证。一般流程是下面这样。1、用户向服务器发送用户名和密码。2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、......
  • 微信支付设置(v2.0)
    一、设置支付目录支付授权目录说明:1、商户最后请求拉起微信支付收银台的页面地址我们称之为“支付目录”,例如:https://www.weixin.com/pay.php。2、商户实际的支付目录必须和在微信支付商户平台设置的一致,否则会报错“当前页面的URL未注册:”支付授权目录设置说明:登录微信支......
  • 银河麒麟不同架构获取rpm包的方法
    银河麒麟不同架构获取rpm包的方法背景随着信创和网络安全越来越重要现阶段国产化的软硬件部署越来越多.很多时候现场有很多国产化的设备.不同架构.不同版本.还不能上网,无法获取对应的安装介质.这个时候通过一台家里的机器,下载不同版本,架构的rpm包就非常亟需这里想......
  • 关于Cookie Session 和Token,以及应用场景
    关于Cookie和Session(面试经常问)共同之处:cookie和session都是用来跟踪浏览器用户身份的会话方式。关于会话在日常生活中,从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话。Web应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端(浏览器)与Web服务器之间连......
  • Pixel2XL解锁BL-刷入Twrp-获取Root权限
    Pixel2XL解锁BL-刷入Twrp-获取Root权限前提:手机账号退出,不插卡,不联网,删除pin指纹以及开机密码【一】解锁BL(如已解锁,该步骤不需要)(1)bootloader是什么?bootloader中文翻译为启动引导程序。打个比方来说,当我们启动手机的时候,最先开始执行的就是这段程序,然后对手机进行一些......
  • Pixel 2XL线刷-获取Root权限
    Pixel2XL线刷-获取Root权限【一】什么是线刷,什么是卡刷(1)什么是线刷线刷(通过连接计算机进行刷机):factory完整包,可以降级线刷是指使用计算机通过USB连接将刷机文件传输到设备上,并通过命令行工具(如ADB和Fastboot)执行刷机操作的方式。在线刷过程中,设备进入Fastboot模式,通过F......
  • pytest + yaml 框架 -38.企业微信机器人通知
    前言v1.3.2版本支持企业微信机器人发送报告通知了。pipinstallpytest-yaml-yoyo获取企业微信机器人token创建群聊机器人获取到webhook访问地址https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=*********************key=后面的这串就是我们要的token配置......