获取accessToken
使用场景: 微信公众号开发和银联二维码支付时需要获取accessToken认证
import org.apache.commons.codec.digest.DigestUtils;
import javax.servlet.http.HttpServletRequest;
import java.util.TreeMap;
import java.util.concurrent.TimeUnit;
@Override
public AjaxResult pcScanCodePayToken(String orderNo) {
//从无状态原则考虑,此处将accessToken放到redis中比放到本地要好,,,
String key = CacheConstants.PC_PAY_ACCESS_TOKEN + "accessToken";
String accessToken = redisCache.getCacheObject(key);
if(StringUtils.isNotEmpty(accessToken)){
return AjaxResult.success(accessToken);
}
TreeMap<String, Object> req = new TreeMap<>();
req.put("appId", appId);
String timestamp = DateUtils.dateTimeNow("yyyyMMddHHmmss");
req.put("timestamp", timestamp);
String nonce = RandomUtils.createRandomCharData(12);
req.put("nonce", nonce);
req.put("signMethod", "SHA256");
String signature = DigestUtils.sha256Hex(appId + timestamp + nonce + AppKey);
req.put("signature", signature);
String s = HttpUtil.post(accessTokenUrl, req);
logger.info("调用认证token接口结果:{}", s);
JSONObject jj = JSONObject.parse(s);
//接口调用成功
if ("0000".equals(jj.getString("errCode"))) {
String newAccessToken = jj.getString("accessToken");
Integer expireIn = jj.getInteger("expiresIn");
redisCache.setCacheObject(key, newAccessToken, expireIn, TimeUnit.SECONDS);
return AjaxResult.success(accessToken);
}else{
return AjaxResult.error("获取accessToken失败,错误码:"+jj.getString("errCode")+",错误信息:"+jj.getString("errInfo"));
}
}