package com.ruoyi.common.auth.wx;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.SneakyThrows;

import java.util.concurrent.TimeUnit;

public class AccessTokenUtil {

    public static final String APPID = SpringUtils.getRequiredProperty("wx.appid");
    public static final String APP_SECRET = SpringUtils.getRequiredProperty("wx.appSecret");

    @SneakyThrows
    public static String getToken() {
        RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
        String token = redisCache.getCacheObject(CacheConstants.WX_ACCESS_TOKEN);

        if (StringUtils.isBlank(token)) {
            WxMaService wxMaService = new WxMaServiceImpl();
            WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
            config.setAppid(APPID);
            config.setSecret(APP_SECRET);
            wxMaService.setWxMaConfig(config);
            token = wxMaService.getAccessToken();

            redisCache.setCacheObject(CacheConstants.WX_ACCESS_TOKEN, token, 5400, TimeUnit.SECONDS);
        }
        return token;
    }
}
