package jframe.pay.wx.http; import jframe.pay.wx.domain.WxConfig; import jframe.pay.wx.http.client.TenpayHttpClient; import jframe.pay.wx.http.util.ConstantUtil; import jframe.pay.wx.http.util.JsonUtil; import jframe.pay.wx.http.util.WxUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AccessTokenRequestHandler extends RequestHandler { static Logger LOG = LoggerFactory .getLogger(AccessTokenRequestHandler.class); public AccessTokenRequestHandler() { super(); } private static String access_token = ""; /** * 获取凭证access_token * * @return */ public static String getAccessToken() { if ("".equals(access_token)) {// 如果为空直接获取 return getTokenReal(); } if (tokenIsExpire(access_token)) {// 如果过期重新获取 return getTokenReal(); } return access_token; } /** * 实际获取access_token的方法 * * @return */ public static String getTokenReal() { String requestUrl = WxConfig.getConf(WxConfig.KEY_TOKEN_URL) + "?grant_type=" + WxConfig.getConf(WxConfig.KEY_GRANT_TYPE) + "&appid=" + WxConfig.getConf(WxConfig.KEY_APP_ID) + "&secret=" + WxConfig.getConf(WxConfig.KEY_APP_SECRET); String resContent = ""; TenpayHttpClient httpClient = new TenpayHttpClient(); httpClient.setMethod("GET"); httpClient.setReqContent(requestUrl); if (httpClient.call()) { resContent = httpClient.getResContent(); if (resContent.indexOf(ConstantUtil.ACCESS_TOKEN) > 0) { access_token = JsonUtil.getJsonValue(resContent, ConstantUtil.ACCESS_TOKEN); } else { LOG.info("获取access_token值返回错误!!!"); } } else { LOG.error("后台调用通信失败 ResponseCode->{}, ErrInfo->{},requestUrl->{}", httpClient.getResponseCode(), httpClient.getErrInfo(), requestUrl); // 有可能因为网络原因,请求已经处理,但未收到应答。 } if (LOG.isDebugEnabled()) { LOG.debug("requestUrl -> {}", requestUrl); } return access_token; } /** * 判断传递过来的参数access_token是否过期 TODO wxReqHandler.setParameter("package", * ConstantUtil.packageValue); 这个值哪里取 * * @param access_token * @return */ @Deprecated private static boolean tokenIsExpire(String access_token) { boolean flag = false; PrepayIdRequestHandler wxReqHandler = new PrepayIdRequestHandler(); wxReqHandler.setParameter("appid", WxConfig.getConf(WxConfig.KEY_APP_ID)); wxReqHandler.setParameter("appkey", WxConfig.getConf(WxConfig.KEY_APP_KEY)); wxReqHandler.setParameter("noncestr", WxUtil.getNonceStr()); // wxReqHandler.setParameter("package", ConstantUtil.packageValue); wxReqHandler.setParameter("timestamp", WxUtil.getTimeStamp()); wxReqHandler.setParameter("traceid", ""); // 生成支付签名 String sign = wxReqHandler.createSHA1Sign(); wxReqHandler.setParameter("app_signature", sign); wxReqHandler.setParameter("sign_method", WxConfig.getConf(WxConfig.KEY_SIGN_METHOD)); String gateUrl = ConstantUtil.GATEURL + access_token; wxReqHandler.setGateUrl(gateUrl); // 发送请求 String accesstoken = wxReqHandler.sendAccessToken(); if (ConstantUtil.EXPIRE_ERRCODE.equals(accesstoken) || ConstantUtil.FAIL_ERRCODE.equals(accesstoken)) flag = true; return flag; } }