微信-JAVA获取微信ACCESS_TOKEN

1.获取微信ACCESS_TOKEN地址

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html

2.请求地址

GET https://api.weixin.qq.com/cgi-bin/token

3.返回实体

@Data
@Schema(description = "微信获取ACCESS_TOKEN参数")
public class WechatAccessTokenVO {

    @Schema(description = "获取到的凭证")
    private String access_token;

    @Schema(description = "凭证有效时间,单位:秒。")
    private Integer expires_in;
    }

4.请求微信

@RetrofitClient(baseUrl = "${wechat.baseUrl}")
@Service
public interface WechatBasicsManager {
    /**
     * 获取AccessToken
     *
     * @param appid      小程序 appId
     * @param grant_type 授权类型,此处只需填写 client_credential
     * @param secret     小程序 appSecret
     */
    @GET("cgi-bin/token")
    WechatAccessTokenVO getAccessToken(@Query("grant_type") String grant_type, @Query("appid") String appid, @Query("secret") String secret);

}

5.调用(缓存redis)

@Service
public class WechatManager {
    private static final Logger LOGGER = LoggerFactory.getLogger(WechatManager.class);

    private static final String WECHAT_ACCESS_TOKEN_KEY = "WECHAT_ACCESS_TOKEN";
    private static String WECHAT_GRANT_TYPE = "client_credential";

    @Value("${wechat.appId}")
    public String appId;
    @Value("${wechat.appSecret}")
    public String appSecret;// 小程序AppSecret

    @Resource
    private WechatBasicsManager wechatBasicsManager;
    @Resource
    private RedisManager redisManager;

    /**
     * 获取微信AccessToken
     *
     * @return
     */
    public String getAccessToken() {
        try {
            // step1: 如果redis缓存中不存在accessToken,则调用微信接口获取accessToken并设置缓存
            if (!redisManager.exist(WECHAT_ACCESS_TOKEN_KEY)) {
                synchronized (this) {
                    if (!redisManager.exist(WECHAT_ACCESS_TOKEN_KEY)) {
                        WechatAccessTokenVO accessToken = wechatBasicsManager.getAccessToken(WECHAT_GRANT_TYPE, appId, appSecret);
                        String token = accessToken.getAccess_token();
                        Integer expireSecond = accessToken.getExpires_in() - 180;
                        redisManager.set(WECHAT_ACCESS_TOKEN_KEY, token, expireSecond);
                    }
                }
            }
            // step2: 获取accessToken
            String accessToken = redisManager.get(WECHAT_ACCESS_TOKEN_KEY);
            return accessToken;
        } catch (Exception e) {
            LOGGER.error("=====获取微信AccessToken失败,请稍后重试!=====", e);
            throw new BaseRuntimeException("获取微信AccessToken失败,请稍后重试!");
        }
    }
}

注:全局使用token注入WechatManager 调用getAccessToken即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值