| @@ -89,7 +89,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public boolean checkSignature(String timestamp, String nonce, String signature) { | public boolean checkSignature(String timestamp, String nonce, String signature) { | ||||
| try { | try { | ||||
| return SHA1.gen(wxMpConfigStorage.getToken(), timestamp, nonce).equals(signature); | |||||
| return SHA1.gen(this.wxMpConfigStorage.getToken(), timestamp, nonce).equals(signature); | |||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -103,19 +103,19 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public String getAccessToken(boolean forceRefresh) throws WxErrorException { | public String getAccessToken(boolean forceRefresh) throws WxErrorException { | ||||
| if (forceRefresh) { | if (forceRefresh) { | ||||
| wxMpConfigStorage.expireAccessToken(); | |||||
| this.wxMpConfigStorage.expireAccessToken(); | |||||
| } | } | ||||
| if (wxMpConfigStorage.isAccessTokenExpired()) { | |||||
| synchronized (globalAccessTokenRefreshLock) { | |||||
| if (wxMpConfigStorage.isAccessTokenExpired()) { | |||||
| if (this.wxMpConfigStorage.isAccessTokenExpired()) { | |||||
| synchronized (this.globalAccessTokenRefreshLock) { | |||||
| if (this.wxMpConfigStorage.isAccessTokenExpired()) { | |||||
| String url = new StringBuffer() | String url = new StringBuffer() | ||||
| .append("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential") | .append("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential") | ||||
| .append("&appid=").append(wxMpConfigStorage.getAppId()) | |||||
| .append("&secret=").append(wxMpConfigStorage.getSecret()).toString(); | |||||
| .append("&appid=").append(this.wxMpConfigStorage.getAppId()) | |||||
| .append("&secret=").append(this.wxMpConfigStorage.getSecret()).toString(); | |||||
| try { | try { | ||||
| HttpGet httpGet = new HttpGet(url); | HttpGet httpGet = new HttpGet(url); | ||||
| if (httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); | |||||
| if (this.httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(this.httpProxy).build(); | |||||
| httpGet.setConfig(config); | httpGet.setConfig(config); | ||||
| } | } | ||||
| try (CloseableHttpResponse response = getHttpclient().execute(httpGet)) { | try (CloseableHttpResponse response = getHttpclient().execute(httpGet)) { | ||||
| @@ -125,7 +125,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| throw new WxErrorException(error); | throw new WxErrorException(error); | ||||
| } | } | ||||
| WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | ||||
| wxMpConfigStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||||
| this.wxMpConfigStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||||
| }finally { | }finally { | ||||
| httpGet.releaseConnection(); | httpGet.releaseConnection(); | ||||
| } | } | ||||
| @@ -137,7 +137,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return wxMpConfigStorage.getAccessToken(); | |||||
| return this.wxMpConfigStorage.getAccessToken(); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -148,22 +148,22 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { | public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { | ||||
| if (forceRefresh) { | if (forceRefresh) { | ||||
| wxMpConfigStorage.expireJsapiTicket(); | |||||
| this.wxMpConfigStorage.expireJsapiTicket(); | |||||
| } | } | ||||
| if (wxMpConfigStorage.isJsapiTicketExpired()) { | |||||
| synchronized (globalJsapiTicketRefreshLock) { | |||||
| if (wxMpConfigStorage.isJsapiTicketExpired()) { | |||||
| if (this.wxMpConfigStorage.isJsapiTicketExpired()) { | |||||
| synchronized (this.globalJsapiTicketRefreshLock) { | |||||
| if (this.wxMpConfigStorage.isJsapiTicketExpired()) { | |||||
| String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi"; | String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi"; | ||||
| String responseContent = execute(new SimpleGetRequestExecutor(), url, null); | String responseContent = execute(new SimpleGetRequestExecutor(), url, null); | ||||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | ||||
| JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); | JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); | ||||
| String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); | String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); | ||||
| int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); | int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); | ||||
| wxMpConfigStorage.updateJsapiTicket(jsapiTicket, expiresInSeconds); | |||||
| this.wxMpConfigStorage.updateJsapiTicket(jsapiTicket, expiresInSeconds); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return wxMpConfigStorage.getJsapiTicket(); | |||||
| return this.wxMpConfigStorage.getJsapiTicket(); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -179,7 +179,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| "url=" + url | "url=" + url | ||||
| ); | ); | ||||
| WxJsapiSignature jsapiSignature = new WxJsapiSignature(); | WxJsapiSignature jsapiSignature = new WxJsapiSignature(); | ||||
| jsapiSignature.setAppid(wxMpConfigStorage.getAppId()); | |||||
| jsapiSignature.setAppid(this.wxMpConfigStorage.getAppId()); | |||||
| jsapiSignature.setTimestamp(timestamp); | jsapiSignature.setTimestamp(timestamp); | ||||
| jsapiSignature.setNoncestr(noncestr); | jsapiSignature.setNoncestr(noncestr); | ||||
| jsapiSignature.setUrl(url); | jsapiSignature.setUrl(url); | ||||
| @@ -263,7 +263,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public File mediaDownload(String media_id) throws WxErrorException { | public File mediaDownload(String media_id) throws WxErrorException { | ||||
| String url = "http://file.api.weixin.qq.com/cgi-bin/media/get"; | String url = "http://file.api.weixin.qq.com/cgi-bin/media/get"; | ||||
| return execute(new MediaDownloadRequestExecutor(wxMpConfigStorage.getTmpDirFile()), url, "media_id=" + media_id); | |||||
| return execute(new MediaDownloadRequestExecutor(this.wxMpConfigStorage.getTmpDirFile()), url, "media_id=" + media_id); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -285,7 +285,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public InputStream materialImageOrVoiceDownload(String media_id) throws WxErrorException { | public InputStream materialImageOrVoiceDownload(String media_id) throws WxErrorException { | ||||
| String url = "https://api.weixin.qq.com/cgi-bin/material/get_material"; | String url = "https://api.weixin.qq.com/cgi-bin/material/get_material"; | ||||
| return execute(new MaterialVoiceAndImageDownloadRequestExecutor(wxMpConfigStorage.getTmpDirFile()), url, media_id); | |||||
| return execute(new MaterialVoiceAndImageDownloadRequestExecutor(this.wxMpConfigStorage.getTmpDirFile()), url, media_id); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -562,14 +562,14 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public String oauth2buildAuthorizationUrl(String scope, String state) { | public String oauth2buildAuthorizationUrl(String scope, String state) { | ||||
| return this.oauth2buildAuthorizationUrl(wxMpConfigStorage.getOauth2redirectUri(), scope, state); | |||||
| return this.oauth2buildAuthorizationUrl(this.wxMpConfigStorage.getOauth2redirectUri(), scope, state); | |||||
| } | } | ||||
| @Override | @Override | ||||
| public String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state) { | public String oauth2buildAuthorizationUrl(String redirectURI, String scope, String state) { | ||||
| StringBuffer url = new StringBuffer(); | StringBuffer url = new StringBuffer(); | ||||
| url.append("https://open.weixin.qq.com/connect/oauth2/authorize?"); | url.append("https://open.weixin.qq.com/connect/oauth2/authorize?"); | ||||
| url.append("appid=").append(wxMpConfigStorage.getAppId()); | |||||
| url.append("appid=").append(this.wxMpConfigStorage.getAppId()); | |||||
| url.append("&redirect_uri=").append(URIUtil.encodeURIComponent(redirectURI)); | url.append("&redirect_uri=").append(URIUtil.encodeURIComponent(redirectURI)); | ||||
| url.append("&response_type=code"); | url.append("&response_type=code"); | ||||
| url.append("&scope=").append(scope); | url.append("&scope=").append(scope); | ||||
| @@ -584,14 +584,14 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| public WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException { | public WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException { | ||||
| StringBuffer url = new StringBuffer(); | StringBuffer url = new StringBuffer(); | ||||
| url.append("https://api.weixin.qq.com/sns/oauth2/access_token?"); | url.append("https://api.weixin.qq.com/sns/oauth2/access_token?"); | ||||
| url.append("appid=").append(wxMpConfigStorage.getAppId()); | |||||
| url.append("&secret=").append(wxMpConfigStorage.getSecret()); | |||||
| url.append("appid=").append(this.wxMpConfigStorage.getAppId()); | |||||
| url.append("&secret=").append(this.wxMpConfigStorage.getSecret()); | |||||
| url.append("&code=").append(code); | url.append("&code=").append(code); | ||||
| url.append("&grant_type=authorization_code"); | url.append("&grant_type=authorization_code"); | ||||
| try { | try { | ||||
| RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | ||||
| String responseText = executor.execute(getHttpclient(), httpProxy, url.toString(), null); | |||||
| String responseText = executor.execute(getHttpclient(), this.httpProxy, url.toString(), null); | |||||
| return WxMpOAuth2AccessToken.fromJson(responseText); | return WxMpOAuth2AccessToken.fromJson(responseText); | ||||
| } catch (ClientProtocolException e) { | } catch (ClientProtocolException e) { | ||||
| throw new RuntimeException(e); | throw new RuntimeException(e); | ||||
| @@ -604,13 +604,13 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| public WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException { | public WxMpOAuth2AccessToken oauth2refreshAccessToken(String refreshToken) throws WxErrorException { | ||||
| StringBuffer url = new StringBuffer(); | StringBuffer url = new StringBuffer(); | ||||
| url.append("https://api.weixin.qq.com/sns/oauth2/refresh_token?"); | url.append("https://api.weixin.qq.com/sns/oauth2/refresh_token?"); | ||||
| url.append("appid=").append(wxMpConfigStorage.getAppId()); | |||||
| url.append("appid=").append(this.wxMpConfigStorage.getAppId()); | |||||
| url.append("&grant_type=refresh_token"); | url.append("&grant_type=refresh_token"); | ||||
| url.append("&refresh_token=").append(refreshToken); | url.append("&refresh_token=").append(refreshToken); | ||||
| try { | try { | ||||
| RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | ||||
| String responseText = executor.execute(getHttpclient(), httpProxy, url.toString(), null); | |||||
| String responseText = executor.execute(getHttpclient(), this.httpProxy, url.toString(), null); | |||||
| return WxMpOAuth2AccessToken.fromJson(responseText); | return WxMpOAuth2AccessToken.fromJson(responseText); | ||||
| } catch (ClientProtocolException e) { | } catch (ClientProtocolException e) { | ||||
| throw new RuntimeException(e); | throw new RuntimeException(e); | ||||
| @@ -633,7 +633,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| try { | try { | ||||
| RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | ||||
| String responseText = executor.execute(getHttpclient(), httpProxy, url.toString(), null); | |||||
| String responseText = executor.execute(getHttpclient(), this.httpProxy, url.toString(), null); | |||||
| return WxMpUser.fromJson(responseText); | return WxMpUser.fromJson(responseText); | ||||
| } catch (ClientProtocolException e) { | } catch (ClientProtocolException e) { | ||||
| throw new RuntimeException(e); | throw new RuntimeException(e); | ||||
| @@ -651,7 +651,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| try { | try { | ||||
| RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); | ||||
| executor.execute(getHttpclient(), httpProxy, url.toString(), null); | |||||
| executor.execute(getHttpclient(), this.httpProxy, url.toString(), null); | |||||
| } catch (ClientProtocolException e) { | } catch (ClientProtocolException e) { | ||||
| throw new RuntimeException(e); | throw new RuntimeException(e); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| @@ -733,9 +733,9 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| * -1 系统繁忙, 1000ms后重试 | * -1 系统繁忙, 1000ms后重试 | ||||
| */ | */ | ||||
| if (error.getErrorCode() == -1) { | if (error.getErrorCode() == -1) { | ||||
| int sleepMillis = retrySleepMillis * (1 << retryTimes); | |||||
| int sleepMillis = this.retrySleepMillis * (1 << retryTimes); | |||||
| try { | try { | ||||
| log.debug("微信系统繁忙,{}ms 后重试(第{}次)", sleepMillis, retryTimes + 1); | |||||
| this.log.debug("微信系统繁忙,{}ms 后重试(第{}次)", sleepMillis, retryTimes + 1); | |||||
| Thread.sleep(sleepMillis); | Thread.sleep(sleepMillis); | ||||
| } catch (InterruptedException e1) { | } catch (InterruptedException e1) { | ||||
| throw new RuntimeException(e1); | throw new RuntimeException(e1); | ||||
| @@ -744,7 +744,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| throw e; | throw e; | ||||
| } | } | ||||
| } | } | ||||
| } while (++retryTimes < maxRetryTimes); | |||||
| } while (++retryTimes < this.maxRetryTimes); | |||||
| throw new RuntimeException("微信服务端异常,超出重试次数"); | throw new RuntimeException("微信服务端异常,超出重试次数"); | ||||
| } | } | ||||
| @@ -759,7 +759,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| uriWithAccessToken += uri.indexOf('?') == -1 ? "?access_token=" + accessToken : "&access_token=" + accessToken; | uriWithAccessToken += uri.indexOf('?') == -1 ? "?access_token=" + accessToken : "&access_token=" + accessToken; | ||||
| try { | try { | ||||
| return executor.execute(getHttpclient(), httpProxy, uriWithAccessToken, data); | |||||
| return executor.execute(getHttpclient(), this.httpProxy, uriWithAccessToken, data); | |||||
| } catch (WxErrorException e) { | } catch (WxErrorException e) { | ||||
| WxError error = e.getError(); | WxError error = e.getError(); | ||||
| /* | /* | ||||
| @@ -769,7 +769,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| */ | */ | ||||
| if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001) { | if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001) { | ||||
| // 强制设置wxMpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token | // 强制设置wxMpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token | ||||
| wxMpConfigStorage.expireAccessToken(); | |||||
| this.wxMpConfigStorage.expireAccessToken(); | |||||
| return execute(executor, uri, data); | return execute(executor, uri, data); | ||||
| } | } | ||||
| if (error.getErrorCode() != 0) { | if (error.getErrorCode() != 0) { | ||||
| @@ -784,21 +784,21 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| } | } | ||||
| protected CloseableHttpClient getHttpclient() { | protected CloseableHttpClient getHttpclient() { | ||||
| return httpClient; | |||||
| return this.httpClient; | |||||
| } | } | ||||
| @Override | @Override | ||||
| public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider) { | public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider) { | ||||
| this.wxMpConfigStorage = wxConfigProvider; | this.wxMpConfigStorage = wxConfigProvider; | ||||
| ApacheHttpClientBuilder apacheHttpClientBuilder = wxMpConfigStorage.getApacheHttpClientBuilder(); | |||||
| ApacheHttpClientBuilder apacheHttpClientBuilder = this.wxMpConfigStorage.getApacheHttpClientBuilder(); | |||||
| if (null == apacheHttpClientBuilder) { | if (null == apacheHttpClientBuilder) { | ||||
| apacheHttpClientBuilder = DefaultApacheHttpHttpClientBuilder.get(); | apacheHttpClientBuilder = DefaultApacheHttpHttpClientBuilder.get(); | ||||
| } | } | ||||
| apacheHttpClientBuilder.httpProxyHost(wxMpConfigStorage.getHttp_proxy_host()) | |||||
| .httpProxyPort(wxMpConfigStorage.getHttp_proxy_port()) | |||||
| .httpProxyUsername(wxMpConfigStorage.getHttp_proxy_username()) | |||||
| .httpProxyPassword(wxMpConfigStorage.getHttp_proxy_password()); | |||||
| apacheHttpClientBuilder.httpProxyHost(this.wxMpConfigStorage.getHttp_proxy_host()) | |||||
| .httpProxyPort(this.wxMpConfigStorage.getHttp_proxy_port()) | |||||
| .httpProxyUsername(this.wxMpConfigStorage.getHttp_proxy_username()) | |||||
| .httpProxyPassword(this.wxMpConfigStorage.getHttp_proxy_password()); | |||||
| if (wxConfigProvider.getSSLContext() != null){ | if (wxConfigProvider.getSSLContext() != null){ | ||||
| SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( | SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( | ||||
| @@ -809,7 +809,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| apacheHttpClientBuilder.sslConnectionSocketFactory(sslsf); | apacheHttpClientBuilder.sslConnectionSocketFactory(sslsf); | ||||
| } | } | ||||
| httpClient = apacheHttpClientBuilder.build(); | |||||
| this.httpClient = apacheHttpClientBuilder.build(); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -826,8 +826,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public WxMpPrepayIdResult getPrepayId(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) { | public WxMpPrepayIdResult getPrepayId(String openId, String outTradeNo, double amt, String body, String tradeType, String ip, String callbackUrl) { | ||||
| Map<String, String> packageParams = new HashMap<String, String>(); | Map<String, String> packageParams = new HashMap<String, String>(); | ||||
| packageParams.put("appid", wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("appid", this.wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("body", body); | packageParams.put("body", body); | ||||
| packageParams.put("out_trade_no", outTradeNo); | packageParams.put("out_trade_no", outTradeNo); | ||||
| packageParams.put("total_fee", (int) (amt * 100) + ""); | packageParams.put("total_fee", (int) (amt * 100) + ""); | ||||
| @@ -844,12 +844,12 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| String nonce_str = System.currentTimeMillis() + ""; | String nonce_str = System.currentTimeMillis() + ""; | ||||
| final SortedMap<String, String> packageParams = new TreeMap<String, String>(parameters); | final SortedMap<String, String> packageParams = new TreeMap<String, String>(parameters); | ||||
| packageParams.put("appid", wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("appid", this.wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("nonce_str", nonce_str); | packageParams.put("nonce_str", nonce_str); | ||||
| checkParameters(packageParams); | checkParameters(packageParams); | ||||
| String sign = WxCryptUtil.createSign(packageParams, wxMpConfigStorage.getPartnerKey()); | |||||
| String sign = WxCryptUtil.createSign(packageParams, this.wxMpConfigStorage.getPartnerKey()); | |||||
| packageParams.put("sign", sign); | packageParams.put("sign", sign); | ||||
| StringBuilder request = new StringBuilder("<xml>"); | StringBuilder request = new StringBuilder("<xml>"); | ||||
| @@ -859,8 +859,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| request.append("</xml>"); | request.append("</xml>"); | ||||
| HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/unifiedorder"); | HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/unifiedorder"); | ||||
| if (httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); | |||||
| if (this.httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(this.httpProxy).build(); | |||||
| httpPost.setConfig(config); | httpPost.setConfig(config); | ||||
| } | } | ||||
| @@ -883,7 +883,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| "trade_type", }; | "trade_type", }; | ||||
| private void checkParameters(Map<String, String> parameters) { | private void checkParameters(Map<String, String> parameters) { | ||||
| for (String para : REQUIRED_ORDER_PARAMETERS) { | |||||
| for (String para : this.REQUIRED_ORDER_PARAMETERS) { | |||||
| if (!parameters.containsKey(para)) | if (!parameters.containsKey(para)) | ||||
| throw new IllegalArgumentException("Reqiured argument '" + para + "' is missing."); | throw new IllegalArgumentException("Reqiured argument '" + para + "' is missing."); | ||||
| } | } | ||||
| @@ -896,8 +896,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public Map<String, String> getJsapiPayInfo(String openId,String outTradeNo, double amt, String body,String ip, String callbackUrl) throws WxErrorException{ | public Map<String, String> getJsapiPayInfo(String openId,String outTradeNo, double amt, String body,String ip, String callbackUrl) throws WxErrorException{ | ||||
| Map<String, String> packageParams = new HashMap<String, String>(); | Map<String, String> packageParams = new HashMap<String, String>(); | ||||
| packageParams.put("appid", wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("appid", this.wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("body", body); | packageParams.put("body", body); | ||||
| packageParams.put("out_trade_no", outTradeNo); | packageParams.put("out_trade_no", outTradeNo); | ||||
| packageParams.put("total_fee", (int) (amt * 100) + ""); | packageParams.put("total_fee", (int) (amt * 100) + ""); | ||||
| @@ -912,8 +912,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public Map<String, String> getNativePayInfo(String productId,String outTradeNo, double amt, String body,String ip, String callbackUrl) throws WxErrorException{ | public Map<String, String> getNativePayInfo(String productId,String outTradeNo, double amt, String body,String ip, String callbackUrl) throws WxErrorException{ | ||||
| Map<String, String> packageParams = new HashMap<String, String>(); | Map<String, String> packageParams = new HashMap<String, String>(); | ||||
| packageParams.put("appid", wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("appid", this.wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("body", body); | packageParams.put("body", body); | ||||
| packageParams.put("out_trade_no", outTradeNo); | packageParams.put("out_trade_no", outTradeNo); | ||||
| packageParams.put("total_fee", (int) (amt * 100) + ""); | packageParams.put("total_fee", (int) (amt * 100) + ""); | ||||
| @@ -947,7 +947,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| } | } | ||||
| Map<String, String> payInfo = new HashMap<String, String>(); | Map<String, String> payInfo = new HashMap<String, String>(); | ||||
| payInfo.put("appId", wxMpConfigStorage.getAppId()); | |||||
| payInfo.put("appId", this.wxMpConfigStorage.getAppId()); | |||||
| // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 | // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 | ||||
| payInfo.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); | payInfo.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000)); | ||||
| payInfo.put("nonceStr", System.currentTimeMillis() + ""); | payInfo.put("nonceStr", System.currentTimeMillis() + ""); | ||||
| @@ -957,7 +957,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| payInfo.put("codeUrl", wxMpPrepayIdResult.getCode_url()); | payInfo.put("codeUrl", wxMpPrepayIdResult.getCode_url()); | ||||
| } | } | ||||
| String finalSign = WxCryptUtil.createSign(payInfo, wxMpConfigStorage.getPartnerKey()); | |||||
| String finalSign = WxCryptUtil.createSign(payInfo, this.wxMpConfigStorage.getPartnerKey()); | |||||
| payInfo.put("paySign", finalSign); | payInfo.put("paySign", finalSign); | ||||
| return payInfo; | return payInfo; | ||||
| } | } | ||||
| @@ -967,8 +967,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| String nonce_str = System.currentTimeMillis() + ""; | String nonce_str = System.currentTimeMillis() + ""; | ||||
| SortedMap<String, String> packageParams = new TreeMap<String, String>(); | SortedMap<String, String> packageParams = new TreeMap<String, String>(); | ||||
| packageParams.put("appid", wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("appid", this.wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| if (transactionId != null && !"".equals(transactionId.trim())) | if (transactionId != null && !"".equals(transactionId.trim())) | ||||
| packageParams.put("transaction_id", transactionId); | packageParams.put("transaction_id", transactionId); | ||||
| else if (outTradeNo != null && !"".equals(outTradeNo.trim())) | else if (outTradeNo != null && !"".equals(outTradeNo.trim())) | ||||
| @@ -976,7 +976,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| else | else | ||||
| throw new IllegalArgumentException("Either 'transactionId' or 'outTradeNo' must be given."); | throw new IllegalArgumentException("Either 'transactionId' or 'outTradeNo' must be given."); | ||||
| packageParams.put("nonce_str", nonce_str); | packageParams.put("nonce_str", nonce_str); | ||||
| packageParams.put("sign", WxCryptUtil.createSign(packageParams, wxMpConfigStorage.getPartnerKey())); | |||||
| packageParams.put("sign", WxCryptUtil.createSign(packageParams, this.wxMpConfigStorage.getPartnerKey())); | |||||
| StringBuilder request = new StringBuilder("<xml>"); | StringBuilder request = new StringBuilder("<xml>"); | ||||
| for (Entry<String, String> para : packageParams.entrySet()) { | for (Entry<String, String> para : packageParams.entrySet()) { | ||||
| @@ -985,14 +985,14 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| request.append("</xml>"); | request.append("</xml>"); | ||||
| HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/orderquery"); | HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/pay/orderquery"); | ||||
| if (httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); | |||||
| if (this.httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(this.httpProxy).build(); | |||||
| httpPost.setConfig(config); | httpPost.setConfig(config); | ||||
| } | } | ||||
| StringEntity entity = new StringEntity(request.toString(), Consts.UTF_8); | StringEntity entity = new StringEntity(request.toString(), Consts.UTF_8); | ||||
| httpPost.setEntity(entity); | httpPost.setEntity(entity); | ||||
| try(CloseableHttpResponse response = httpClient.execute(httpPost)) { | |||||
| try(CloseableHttpResponse response = this.httpClient.execute(httpPost)) { | |||||
| String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); | String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response); | ||||
| XStream xstream = XStreamInitializer.getInstance(); | XStream xstream = XStreamInitializer.getInstance(); | ||||
| xstream.alias("xml", WxMpPayResult.class); | xstream.alias("xml", WxMpPayResult.class); | ||||
| @@ -1019,11 +1019,11 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public WxMpPayRefundResult refundPay(Map<String, String> parameters) throws WxErrorException { | public WxMpPayRefundResult refundPay(Map<String, String> parameters) throws WxErrorException { | ||||
| SortedMap<String, String> refundParams = new TreeMap<String, String>(parameters); | SortedMap<String, String> refundParams = new TreeMap<String, String>(parameters); | ||||
| refundParams.put("appid", wxMpConfigStorage.getAppId()); | |||||
| refundParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| refundParams.put("appid", this.wxMpConfigStorage.getAppId()); | |||||
| refundParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| refundParams.put("nonce_str", System.currentTimeMillis() + ""); | refundParams.put("nonce_str", System.currentTimeMillis() + ""); | ||||
| refundParams.put("op_user_id", wxMpConfigStorage.getPartnerId()); | |||||
| String sign = WxCryptUtil.createSign(refundParams, wxMpConfigStorage.getPartnerKey()); | |||||
| refundParams.put("op_user_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| String sign = WxCryptUtil.createSign(refundParams, this.wxMpConfigStorage.getPartnerKey()); | |||||
| refundParams.put("sign", sign); | refundParams.put("sign", sign); | ||||
| StringBuilder request = new StringBuilder("<xml>"); | StringBuilder request = new StringBuilder("<xml>"); | ||||
| @@ -1033,8 +1033,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| request.append("</xml>"); | request.append("</xml>"); | ||||
| HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/refund"); | HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/secapi/pay/refund"); | ||||
| if (httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); | |||||
| if (this.httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(this.httpProxy).build(); | |||||
| httpPost.setConfig(config); | httpPost.setConfig(config); | ||||
| } | } | ||||
| @@ -1061,7 +1061,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| return wxMpPayRefundResult; | return wxMpPayRefundResult; | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| log.error(MessageFormatter.format("The exception was happened when sending refund '{}'.", request.toString()).getMessage(), e); | |||||
| this.log.error(MessageFormatter.format("The exception was happened when sending refund '{}'.", request.toString()).getMessage(), e); | |||||
| WxError error = new WxError(); | WxError error = new WxError(); | ||||
| error.setErrorCode(-1); | error.setErrorCode(-1); | ||||
| error.setErrorMsg("incorrect response."); | error.setErrorMsg("incorrect response."); | ||||
| @@ -1073,7 +1073,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public boolean checkJSSDKCallbackDataSignature(Map<String, String> kvm, String signature) { | public boolean checkJSSDKCallbackDataSignature(Map<String, String> kvm, String signature) { | ||||
| return signature.equals(WxCryptUtil.createSign(kvm, wxMpConfigStorage.getPartnerKey())); | |||||
| return signature.equals(WxCryptUtil.createSign(kvm, this.wxMpConfigStorage.getPartnerKey())); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -1081,11 +1081,11 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| String nonce_str = System.currentTimeMillis() + ""; | String nonce_str = System.currentTimeMillis() + ""; | ||||
| SortedMap<String, String> packageParams = new TreeMap<String, String>(parameters); | SortedMap<String, String> packageParams = new TreeMap<String, String>(parameters); | ||||
| packageParams.put("wxappid", wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("wxappid", this.wxMpConfigStorage.getAppId()); | |||||
| packageParams.put("mch_id", this.wxMpConfigStorage.getPartnerId()); | |||||
| packageParams.put("nonce_str", nonce_str); | packageParams.put("nonce_str", nonce_str); | ||||
| String sign = WxCryptUtil.createSign(packageParams, wxMpConfigStorage.getPartnerKey()); | |||||
| String sign = WxCryptUtil.createSign(packageParams, this.wxMpConfigStorage.getPartnerKey()); | |||||
| packageParams.put("sign", sign); | packageParams.put("sign", sign); | ||||
| StringBuilder request = new StringBuilder("<xml>"); | StringBuilder request = new StringBuilder("<xml>"); | ||||
| @@ -1095,8 +1095,8 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| request.append("</xml>"); | request.append("</xml>"); | ||||
| HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); | HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack"); | ||||
| if (httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(httpProxy).build(); | |||||
| if (this.httpProxy != null) { | |||||
| RequestConfig config = RequestConfig.custom().setProxy(this.httpProxy).build(); | |||||
| httpPost.setConfig(config); | httpPost.setConfig(config); | ||||
| } | } | ||||
| @@ -1109,7 +1109,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| WxRedpackResult wxMpRedpackResult = (WxRedpackResult) xstream.fromXML(responseContent); | WxRedpackResult wxMpRedpackResult = (WxRedpackResult) xstream.fromXML(responseContent); | ||||
| return wxMpRedpackResult; | return wxMpRedpackResult; | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| log.error(MessageFormatter.format("The exception was happened when sending redpack '{}'.", request.toString()).getMessage(), e); | |||||
| this.log.error(MessageFormatter.format("The exception was happened when sending redpack '{}'.", request.toString()).getMessage(), e); | |||||
| WxError error = new WxError(); | WxError error = new WxError(); | ||||
| error.setErrorCode(-1); | error.setErrorCode(-1); | ||||
| throw new WxErrorException(error); | throw new WxErrorException(error); | ||||
| @@ -1147,22 +1147,22 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| @Override | @Override | ||||
| public String getCardApiTicket(boolean forceRefresh) throws WxErrorException { | public String getCardApiTicket(boolean forceRefresh) throws WxErrorException { | ||||
| if (forceRefresh) { | if (forceRefresh) { | ||||
| wxMpConfigStorage.expireCardApiTicket(); | |||||
| this.wxMpConfigStorage.expireCardApiTicket(); | |||||
| } | } | ||||
| if (wxMpConfigStorage.isCardApiTicketExpired()) { | |||||
| synchronized (globalCardApiTicketRefreshLock) { | |||||
| if (wxMpConfigStorage.isCardApiTicketExpired()) { | |||||
| if (this.wxMpConfigStorage.isCardApiTicketExpired()) { | |||||
| synchronized (this.globalCardApiTicketRefreshLock) { | |||||
| if (this.wxMpConfigStorage.isCardApiTicketExpired()) { | |||||
| String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card"; | String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card"; | ||||
| String responseContent = execute(new SimpleGetRequestExecutor(), url, null); | String responseContent = execute(new SimpleGetRequestExecutor(), url, null); | ||||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | ||||
| JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); | JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); | ||||
| String cardApiTicket = tmpJsonObject.get("ticket").getAsString(); | String cardApiTicket = tmpJsonObject.get("ticket").getAsString(); | ||||
| int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); | int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); | ||||
| wxMpConfigStorage.updateCardApiTicket(cardApiTicket, expiresInSeconds); | |||||
| this.wxMpConfigStorage.updateCardApiTicket(cardApiTicket, expiresInSeconds); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| return wxMpConfigStorage.getCardApiTicket(); | |||||
| return this.wxMpConfigStorage.getCardApiTicket(); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -1305,7 +1305,7 @@ public class WxMpServiceImpl implements WxMpService { | |||||
| WxMpCardResult cardResult = WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement, | WxMpCardResult cardResult = WxMpGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement, | ||||
| new TypeToken<WxMpCardResult>() { }.getType()); | new TypeToken<WxMpCardResult>() { }.getType()); | ||||
| if (!cardResult.getErrorCode().equals("0")) { | if (!cardResult.getErrorCode().equals("0")) { | ||||
| log.warn("朋友的券mark失败:{}", cardResult.getErrorMsg()); | |||||
| this.log.warn("朋友的券mark失败:{}", cardResult.getErrorMsg()); | |||||
| } | } | ||||
| } | } | ||||