提交 677d01da 作者: zhenjie

修改-获取稳定版accessToken

上级 6fae0c94
...@@ -18,6 +18,7 @@ public class WxConstant { ...@@ -18,6 +18,7 @@ public class WxConstant {
public final static String subscribe = "subscribe"; public final static String subscribe = "subscribe";
public final static String unsubscribe = "unsubscribe"; public final static String unsubscribe = "unsubscribe";
public static final String IUAV_MINI_PROGRAM_ACCESS_TOKEN = "IUAV_MINI_PROGRAM_ACCESS_TOKEN"; public static final String IUAV_MINI_PROGRAM_ACCESS_TOKEN = "IUAV_MINI_PROGRAM_ACCESS_TOKEN";
public static final String IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN = "IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN";
public static final String SHARE_FLY_SUB_ACCESS_TOKEN = "SHARE_FLY_SUB_ACCESS_TOKEN"; public static final String SHARE_FLY_SUB_ACCESS_TOKEN = "SHARE_FLY_SUB_ACCESS_TOKEN";
......
...@@ -33,6 +33,12 @@ public interface WxService { ...@@ -33,6 +33,12 @@ public interface WxService {
String getAccessToken(); String getAccessToken();
/** /**
* 获取稳定AccessToken
* @return
*/
String getStableAccessToken() throws Exception;
/**
* 获取公众号AccessToken * 获取公众号AccessToken
* @return * @return
*/ */
......
...@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
...@@ -82,6 +83,35 @@ public class WxServiceImpl implements WxService { ...@@ -82,6 +83,35 @@ public class WxServiceImpl implements WxService {
} }
@Override @Override
public String getStableAccessToken() {
//token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN);
if (StringUtils.isBlank(accessToken)){
Map<String, String> params = new HashMap<String, String>();
params.put("grant_type", "client_credential");
params.put("appid", userSystemConstant.getWxAppId());
params.put("secret", userSystemConstant.getWxAppSecret());
String stableAccessTokenUrl = "https://api.weixin.qq.com/cgi-bin/stable_token";
String res = null;
try {
res = HttpsRequestUtil.httpsRequest(stableAccessTokenUrl, "POST", null, JSONObject.toJSONString(params));
} catch (Exception e) {
e.printStackTrace();
}
JSONObject tokenResult = JSONObject.parseObject(res);
if (res.indexOf("access_token") == -1) {
return null;
}
accessToken = tokenResult.getString("access_token");
long expiresIn = tokenResult.getLong("expires_in");
//保存进redis
stringRedisTemplate.opsForValue().set(WxConstant.IUAV_MINI_PROGRAM_STABLE_ACCESS_TOKEN, accessToken, expiresIn, TimeUnit.SECONDS);
return accessToken;
}
return accessToken;
}
@Override
public String getSubAccessToken() { public String getSubAccessToken() {
//token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取 //token有效期为7200s,需要保存起来,先从redis中获取accessToken,没有则请求获取
String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.SHARE_FLY_SUB_ACCESS_TOKEN); String accessToken = stringRedisTemplate.opsForValue().get(WxConstant.SHARE_FLY_SUB_ACCESS_TOKEN);
...@@ -201,7 +231,7 @@ public class WxServiceImpl implements WxService { ...@@ -201,7 +231,7 @@ public class WxServiceImpl implements WxService {
public ResultBody getUnLimitedQRCode(String path, String scene) { public ResultBody getUnLimitedQRCode(String path, String scene) {
String base64 = ""; String base64 = "";
try { try {
String accessToken = this.getAccessToken(); String accessToken = this.getStableAccessToken();
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("scene", scene); param.put("scene", scene);
param.put("page", path); param.put("page", path);
...@@ -219,7 +249,7 @@ public class WxServiceImpl implements WxService { ...@@ -219,7 +249,7 @@ public class WxServiceImpl implements WxService {
@Override @Override
public ResultBody sendAppletMsg(AppletMsgVO appletMsgVO) { public ResultBody sendAppletMsg(AppletMsgVO appletMsgVO) {
String accessToken = this.getAccessToken(); String accessToken = this.getStableAccessToken();
if (StringUtils.isBlank(accessToken)){ if (StringUtils.isBlank(accessToken)){
return ResultBody.error(ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultCode(), return ResultBody.error(ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultCode(),
ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultMsg()); ResultEnum.WX_ACCESS_TOKEN_ERROR.getResultMsg());
...@@ -238,7 +268,7 @@ public class WxServiceImpl implements WxService { ...@@ -238,7 +268,7 @@ public class WxServiceImpl implements WxService {
@Override @Override
public String createUrlLink(String path, String query) { public String createUrlLink(String path, String query) {
try { try {
String accessToken = this.getAccessToken(); String accessToken = this.getStableAccessToken();
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("path", path); param.put("path", path);
param.put("env_version", userSystemConstant.getEnvVersion()); param.put("env_version", userSystemConstant.getEnvVersion());
...@@ -259,12 +289,14 @@ public class WxServiceImpl implements WxService { ...@@ -259,12 +289,14 @@ public class WxServiceImpl implements WxService {
@Override @Override
public String getUserPhoneNumber(Integer id, String code) { public String getUserPhoneNumber(Integer id, String code) {
try { try {
String accessToken = this.getAccessToken(); String accessToken = this.getStableAccessToken();
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("code", code); param.put("code", code);
String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken; String url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + accessToken;
String res = HttpHelper.httpPost(url, param.toString()); String res = HttpHelper.httpPost(url, param.toString());
JSONObject result = JSONObject.parseObject(res); JSONObject result = JSONObject.parseObject(res);
log.info("param: id:{},code:{}", id, code);
log.info("getUserPhoneNumber: " + result.toString());
if (result.getString("errcode").equals("0")) { if (result.getString("errcode").equals("0")) {
String phone_info = result.getString("phone_info"); String phone_info = result.getString("phone_info");
JSONObject phoneInfoObject = JSONObject.parseObject(phone_info); JSONObject phoneInfoObject = JSONObject.parseObject(phone_info);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论