|
|
@@ -1,77 +1,77 @@ |
|
|
|
package com.tuoheng.miniprogram.utils; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
import org.springframework.scheduling.annotation.Scheduled; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.web.client.RestTemplate; |
|
|
|
|
|
|
|
import java.util.Objects; |
|
|
|
import java.util.concurrent.locks.ReentrantReadWriteLock; |
|
|
|
|
|
|
|
@Service |
|
|
|
@Slf4j |
|
|
|
@RequiredArgsConstructor |
|
|
|
public class AccessTokenManager { |
|
|
|
|
|
|
|
private String accessToken = null; |
|
|
|
|
|
|
|
@Value("${wx.appId}") |
|
|
|
private String appId; |
|
|
|
@Value("${wx.secret}") |
|
|
|
private String secret; |
|
|
|
|
|
|
|
private final RestTemplate restTemplate; |
|
|
|
|
|
|
|
private final ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); |
|
|
|
|
|
|
|
|
|
|
|
public String getAccessToken(){ |
|
|
|
String ret; |
|
|
|
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock(); |
|
|
|
try{ |
|
|
|
readLock.lock(); |
|
|
|
ret = accessToken; |
|
|
|
} |
|
|
|
finally { |
|
|
|
readLock.unlock(); |
|
|
|
} |
|
|
|
return ret; |
|
|
|
} |
|
|
|
|
|
|
|
public void updateAccessToken(String accessToken){ |
|
|
|
ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock(); |
|
|
|
try{ |
|
|
|
writeLock.lock(); |
|
|
|
this.accessToken = accessToken; |
|
|
|
} |
|
|
|
finally { |
|
|
|
writeLock.unlock(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取微信accessToken |
|
|
|
*/ |
|
|
|
@Scheduled(cron = "0 0 * * * ?") |
|
|
|
public void refreshToken() { |
|
|
|
String accessToken; |
|
|
|
try { |
|
|
|
String url = |
|
|
|
String.format( |
|
|
|
"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", |
|
|
|
appId, |
|
|
|
secret); |
|
|
|
JSONObject body = restTemplate.getForEntity(url, JSONObject.class).getBody(); |
|
|
|
if (!Objects.isNull(body)){ |
|
|
|
log.info("获取accessToken返回内容:"+body.toJSONString()); |
|
|
|
accessToken = (String) body.get("access_token"); |
|
|
|
updateAccessToken(accessToken); |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
log.error("调用获取微信accessToken接口出错:", e); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//package com.tuoheng.miniprogram.utils; |
|
|
|
// |
|
|
|
//import com.alibaba.fastjson.JSONObject; |
|
|
|
//import lombok.RequiredArgsConstructor; |
|
|
|
//import lombok.extern.slf4j.Slf4j; |
|
|
|
//import org.springframework.beans.factory.annotation.Value; |
|
|
|
//import org.springframework.scheduling.annotation.Scheduled; |
|
|
|
//import org.springframework.stereotype.Service; |
|
|
|
//import org.springframework.web.client.RestTemplate; |
|
|
|
// |
|
|
|
//import java.util.Objects; |
|
|
|
//import java.util.concurrent.locks.ReentrantReadWriteLock; |
|
|
|
// |
|
|
|
//@Service |
|
|
|
//@Slf4j |
|
|
|
//@RequiredArgsConstructor |
|
|
|
//public class AccessTokenManager { |
|
|
|
// |
|
|
|
// private String accessToken = null; |
|
|
|
// |
|
|
|
// @Value("${wx.appId}") |
|
|
|
// private String appId; |
|
|
|
// @Value("${wx.secret}") |
|
|
|
// private String secret; |
|
|
|
// |
|
|
|
// private final RestTemplate restTemplate; |
|
|
|
// |
|
|
|
// private final ReentrantReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock(); |
|
|
|
// |
|
|
|
// |
|
|
|
// public String getAccessToken(){ |
|
|
|
// String ret; |
|
|
|
// ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock(); |
|
|
|
// try{ |
|
|
|
// readLock.lock(); |
|
|
|
// ret = accessToken; |
|
|
|
// } |
|
|
|
// finally { |
|
|
|
// readLock.unlock(); |
|
|
|
// } |
|
|
|
// return ret; |
|
|
|
// } |
|
|
|
// |
|
|
|
// public void updateAccessToken(String accessToken){ |
|
|
|
// ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock(); |
|
|
|
// try{ |
|
|
|
// writeLock.lock(); |
|
|
|
// this.accessToken = accessToken; |
|
|
|
// } |
|
|
|
// finally { |
|
|
|
// writeLock.unlock(); |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 获取微信accessToken |
|
|
|
// */ |
|
|
|
// @Scheduled(cron = "0 0 * * * ?") |
|
|
|
// public void refreshToken() { |
|
|
|
// String accessToken; |
|
|
|
// try { |
|
|
|
// String url = |
|
|
|
// String.format( |
|
|
|
// "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", |
|
|
|
// appId, |
|
|
|
// secret); |
|
|
|
// JSONObject body = restTemplate.getForEntity(url, JSONObject.class).getBody(); |
|
|
|
// if (!Objects.isNull(body)){ |
|
|
|
// log.info("获取accessToken返回内容:"+body.toJSONString()); |
|
|
|
// accessToken = (String) body.get("access_token"); |
|
|
|
// updateAccessToken(accessToken); |
|
|
|
// } |
|
|
|
// } catch (Exception e) { |
|
|
|
// log.error("调用获取微信accessToken接口出错:", e); |
|
|
|
// } |
|
|
|
// } |
|
|
|
//} |