| @@ -1,12 +1,28 @@ | |||
| package me.chanjar.weixin.cp.api; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.util.List; | |||
| import java.util.UUID; | |||
| import org.apache.http.HttpHost; | |||
| import org.apache.http.client.ClientProtocolException; | |||
| import org.apache.http.client.config.RequestConfig; | |||
| import org.apache.http.client.methods.CloseableHttpResponse; | |||
| import org.apache.http.client.methods.HttpGet; | |||
| import org.apache.http.impl.client.BasicResponseHandler; | |||
| import org.apache.http.impl.client.CloseableHttpClient; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import com.google.gson.JsonArray; | |||
| import com.google.gson.JsonElement; | |||
| import com.google.gson.JsonObject; | |||
| import com.google.gson.JsonParser; | |||
| import com.google.gson.JsonPrimitive; | |||
| import com.google.gson.internal.Streams; | |||
| import com.google.gson.reflect.TypeToken; | |||
| import com.google.gson.stream.JsonReader; | |||
| import me.chanjar.weixin.common.bean.WxAccessToken; | |||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | |||
| import me.chanjar.weixin.common.bean.menu.WxMenu; | |||
| @@ -20,30 +36,20 @@ import me.chanjar.weixin.common.util.RandomUtils; | |||
| import me.chanjar.weixin.common.util.StringUtils; | |||
| import me.chanjar.weixin.common.util.crypto.SHA1; | |||
| import me.chanjar.weixin.common.util.fs.FileUtils; | |||
| import me.chanjar.weixin.common.util.http.*; | |||
| import me.chanjar.weixin.common.util.http.ApacheHttpClientBuilder; | |||
| import me.chanjar.weixin.common.util.http.DefaultApacheHttpClientBuilder; | |||
| import me.chanjar.weixin.common.util.http.MediaDownloadRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.RequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | |||
| import me.chanjar.weixin.common.util.http.URIUtil; | |||
| import me.chanjar.weixin.common.util.json.GsonHelper; | |||
| import me.chanjar.weixin.cp.bean.WxCpDepart; | |||
| import me.chanjar.weixin.cp.bean.WxCpMessage; | |||
| import me.chanjar.weixin.cp.bean.WxCpTag; | |||
| import me.chanjar.weixin.cp.bean.WxCpUser; | |||
| import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; | |||
| import org.apache.http.HttpHost; | |||
| import org.apache.http.client.ClientProtocolException; | |||
| import org.apache.http.client.config.RequestConfig; | |||
| import org.apache.http.client.methods.CloseableHttpResponse; | |||
| import org.apache.http.client.methods.HttpGet; | |||
| import org.apache.http.impl.client.BasicResponseHandler; | |||
| import org.apache.http.impl.client.CloseableHttpClient; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import java.io.File; | |||
| import java.io.IOException; | |||
| import java.io.InputStream; | |||
| import java.io.StringReader; | |||
| import java.security.NoSuchAlgorithmException; | |||
| import java.util.List; | |||
| import java.util.UUID; | |||
| public class WxCpServiceImpl implements WxCpService { | |||
| @@ -72,42 +78,48 @@ public class WxCpServiceImpl implements WxCpService { | |||
| private int retrySleepMillis = 1000; | |||
| private int maxRetryTimes = 5; | |||
| @Override | |||
| public boolean checkSignature(String msgSignature, String timestamp, String nonce, String data) { | |||
| try { | |||
| return SHA1.gen(wxCpConfigStorage.getToken(), timestamp, nonce, data).equals(msgSignature); | |||
| return SHA1.gen(this.wxCpConfigStorage.getToken(), timestamp, nonce, data) | |||
| .equals(msgSignature); | |||
| } catch (Exception e) { | |||
| return false; | |||
| } | |||
| } | |||
| @Override | |||
| public void userAuthenticated(String userId) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/user/authsucc?userid=" + userId; | |||
| get(url, null); | |||
| } | |||
| @Override | |||
| public String getAccessToken() throws WxErrorException { | |||
| return getAccessToken(false); | |||
| } | |||
| @Override | |||
| public String getAccessToken(boolean forceRefresh) throws WxErrorException { | |||
| if (forceRefresh) { | |||
| wxCpConfigStorage.expireAccessToken(); | |||
| this.wxCpConfigStorage.expireAccessToken(); | |||
| } | |||
| if (wxCpConfigStorage.isAccessTokenExpired()) { | |||
| synchronized (globalAccessTokenRefreshLock) { | |||
| if (wxCpConfigStorage.isAccessTokenExpired()) { | |||
| if (this.wxCpConfigStorage.isAccessTokenExpired()) { | |||
| synchronized (this.globalAccessTokenRefreshLock) { | |||
| if (this.wxCpConfigStorage.isAccessTokenExpired()) { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?" | |||
| + "&corpid=" + wxCpConfigStorage.getCorpId() | |||
| + "&corpsecret=" + wxCpConfigStorage.getCorpSecret(); | |||
| + "&corpid=" + this.wxCpConfigStorage.getCorpId() + "&corpsecret=" | |||
| + this.wxCpConfigStorage.getCorpSecret(); | |||
| try { | |||
| 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); | |||
| } | |||
| CloseableHttpClient httpclient = getHttpclient(); | |||
| String resultContent = null; | |||
| try (CloseableHttpResponse response = httpclient.execute(httpGet)) { | |||
| try (CloseableHttpClient httpclient = getHttpclient(); | |||
| CloseableHttpResponse response = httpclient.execute(httpGet)) { | |||
| resultContent = new BasicResponseHandler().handleResponse(response); | |||
| } finally { | |||
| httpGet.releaseConnection(); | |||
| @@ -117,7 +129,8 @@ public class WxCpServiceImpl implements WxCpService { | |||
| throw new WxErrorException(error); | |||
| } | |||
| WxAccessToken accessToken = WxAccessToken.fromJson(resultContent); | |||
| wxCpConfigStorage.updateAccessToken(accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
| this.wxCpConfigStorage.updateAccessToken( | |||
| accessToken.getAccessToken(), accessToken.getExpiresIn()); | |||
| } catch (ClientProtocolException e) { | |||
| throw new RuntimeException(e); | |||
| } catch (IOException e) { | |||
| @@ -126,33 +139,37 @@ public class WxCpServiceImpl implements WxCpService { | |||
| } | |||
| } | |||
| } | |||
| return wxCpConfigStorage.getAccessToken(); | |||
| return this.wxCpConfigStorage.getAccessToken(); | |||
| } | |||
| @Override | |||
| public String getJsapiTicket() throws WxErrorException { | |||
| return getJsapiTicket(false); | |||
| } | |||
| @Override | |||
| public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { | |||
| if (forceRefresh) { | |||
| wxCpConfigStorage.expireJsapiTicket(); | |||
| this.wxCpConfigStorage.expireJsapiTicket(); | |||
| } | |||
| if (wxCpConfigStorage.isJsapiTicketExpired()) { | |||
| synchronized (globalJsapiTicketRefreshLock) { | |||
| if (wxCpConfigStorage.isJsapiTicketExpired()) { | |||
| if (this.wxCpConfigStorage.isJsapiTicketExpired()) { | |||
| synchronized (this.globalJsapiTicketRefreshLock) { | |||
| if (this.wxCpConfigStorage.isJsapiTicketExpired()) { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket"; | |||
| String responseContent = execute(new SimpleGetRequestExecutor(), url, null); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| JsonObject tmpJsonObject = tmpJsonElement.getAsJsonObject(); | |||
| String jsapiTicket = tmpJsonObject.get("ticket").getAsString(); | |||
| int expiresInSeconds = tmpJsonObject.get("expires_in").getAsInt(); | |||
| wxCpConfigStorage.updateJsapiTicket(jsapiTicket, expiresInSeconds); | |||
| this.wxCpConfigStorage.updateJsapiTicket(jsapiTicket, | |||
| expiresInSeconds); | |||
| } | |||
| } | |||
| } | |||
| return wxCpConfigStorage.getJsapiTicket(); | |||
| return this.wxCpConfigStorage.getJsapiTicket(); | |||
| } | |||
| @Override | |||
| public WxJsapiSignature createJsapiSignature(String url) throws WxErrorException { | |||
| long timestamp = System.currentTimeMillis() / 1000; | |||
| String noncestr = RandomUtils.getRandomStr(); | |||
| @@ -175,6 +192,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| return jsapiSignature; | |||
| } | |||
| @Override | |||
| public void messageSend(WxCpMessage message) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/message/send"; | |||
| post(url, message.toJson()); | |||
| @@ -182,18 +200,19 @@ public class WxCpServiceImpl implements WxCpService { | |||
| @Override | |||
| public void menuCreate(WxMenu menu) throws WxErrorException { | |||
| menuCreate(wxCpConfigStorage.getAgentId(), menu); | |||
| menuCreate(this.wxCpConfigStorage.getAgentId(), menu); | |||
| } | |||
| @Override | |||
| public void menuCreate(String agentId, WxMenu menu) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?agentid=" + wxCpConfigStorage.getAgentId(); | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/menu/create?agentid=" | |||
| + this.wxCpConfigStorage.getAgentId(); | |||
| post(url, menu.toJson()); | |||
| } | |||
| @Override | |||
| public void menuDelete() throws WxErrorException { | |||
| menuDelete(wxCpConfigStorage.getAgentId()); | |||
| menuDelete(this.wxCpConfigStorage.getAgentId()); | |||
| } | |||
| @Override | |||
| @@ -204,7 +223,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| @Override | |||
| public WxMenu menuGet() throws WxErrorException { | |||
| return menuGet(wxCpConfigStorage.getAgentId()); | |||
| return menuGet(this.wxCpConfigStorage.getAgentId()); | |||
| } | |||
| @Override | |||
| @@ -222,42 +241,52 @@ public class WxCpServiceImpl implements WxCpService { | |||
| } | |||
| } | |||
| @Override | |||
| public WxMediaUploadResult mediaUpload(String mediaType, String fileType, InputStream inputStream) | |||
| throws WxErrorException, IOException { | |||
| return mediaUpload(mediaType, FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), fileType)); | |||
| } | |||
| @Override | |||
| public WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?type=" + mediaType; | |||
| return execute(new MediaUploadRequestExecutor(), url, file); | |||
| } | |||
| @Override | |||
| public File mediaDownload(String media_id) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/media/get"; | |||
| return execute(new MediaDownloadRequestExecutor(wxCpConfigStorage.getTmpDirFile()), url, "media_id=" + media_id); | |||
| return execute( | |||
| new MediaDownloadRequestExecutor( | |||
| this.wxCpConfigStorage.getTmpDirFile()), | |||
| url, "media_id=" + media_id); | |||
| } | |||
| @Override | |||
| public Integer departCreate(WxCpDepart depart) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/department/create"; | |||
| String responseContent = execute( | |||
| new SimplePostRequestExecutor(), | |||
| url, | |||
| depart.toJson()); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return GsonHelper.getAsInteger(tmpJsonElement.getAsJsonObject().get("id")); | |||
| } | |||
| @Override | |||
| public void departUpdate(WxCpDepart group) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/department/update"; | |||
| post(url, group.toJson()); | |||
| } | |||
| @Override | |||
| public void departDelete(Integer departId) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/department/delete?id=" + departId; | |||
| get(url, null); | |||
| } | |||
| @Override | |||
| public List<WxCpDepart> departGet() throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/department/list"; | |||
| String responseContent = get(url, null); | |||
| @@ -265,7 +294,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| * 操蛋的微信API,创建时返回的是 { group : { id : ..., name : ...} } | |||
| * 查询时返回的是 { groups : [ { id : ..., name : ..., count : ... }, ... ] } | |||
| */ | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return WxCpGsonBuilder.INSTANCE.create() | |||
| .fromJson( | |||
| tmpJsonElement.getAsJsonObject().get("department"), | |||
| @@ -325,7 +354,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| } | |||
| String responseContent = get(url, params); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return WxCpGsonBuilder.INSTANCE.create() | |||
| .fromJson( | |||
| tmpJsonElement.getAsJsonObject().get("userlist"), | |||
| @@ -348,7 +377,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| } | |||
| String responseContent = get(url, params); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return WxCpGsonBuilder.INSTANCE.create() | |||
| .fromJson( | |||
| tmpJsonElement.getAsJsonObject().get("userlist"), | |||
| @@ -363,7 +392,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| JsonObject o = new JsonObject(); | |||
| o.addProperty("tagname", tagName); | |||
| String responseContent = post(url, o.toString()); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return tmpJsonElement.getAsJsonObject().get("tagid").getAsString(); | |||
| } | |||
| @@ -386,7 +415,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| public List<WxCpTag> tagGet() throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/tag/list"; | |||
| String responseContent = get(url, null); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return WxCpGsonBuilder.INSTANCE.create() | |||
| .fromJson( | |||
| tmpJsonElement.getAsJsonObject().get("taglist"), | |||
| @@ -399,7 +428,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| public List<WxCpUser> tagGetUsers(String tagId) throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/tag/get?tagid=" + tagId; | |||
| String responseContent = get(url, null); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return WxCpGsonBuilder.INSTANCE.create() | |||
| .fromJson( | |||
| tmpJsonElement.getAsJsonObject().get("userlist"), | |||
| @@ -454,7 +483,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| @Override | |||
| public String oauth2buildAuthorizationUrl(String redirectUri, String state) { | |||
| String url = "https://open.weixin.qq.com/connect/oauth2/authorize?"; | |||
| url += "appid=" + wxCpConfigStorage.getCorpId(); | |||
| url += "appid=" + this.wxCpConfigStorage.getCorpId(); | |||
| url += "&redirect_uri=" + URIUtil.encodeURIComponent(redirectUri); | |||
| url += "&response_type=code"; | |||
| url += "&scope=snsapi_base"; | |||
| @@ -467,7 +496,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| @Override | |||
| public String[] oauth2getUserInfo(String code) throws WxErrorException { | |||
| return oauth2getUserInfo(wxCpConfigStorage.getAgentId(), code); | |||
| return oauth2getUserInfo(this.wxCpConfigStorage.getAgentId(), code); | |||
| } | |||
| @Override | |||
| @@ -476,7 +505,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| + "code=" + code | |||
| + "&agendid=" + agentId; | |||
| String responseText = get(url, null); | |||
| JsonElement je = Streams.parse(new JsonReader(new StringReader(responseText))); | |||
| JsonElement je = new JsonParser().parse(responseText); | |||
| JsonObject jo = je.getAsJsonObject(); | |||
| return new String[]{GsonHelper.getString(jo, "UserId"), GsonHelper.getString(jo, "DeviceId")}; | |||
| } | |||
| @@ -490,7 +519,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| jsonObject.addProperty("invite_tips", inviteTips); | |||
| } | |||
| String responseContent = post(url, jsonObject.toString()); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| return tmpJsonElement.getAsJsonObject().get("type").getAsInt(); | |||
| } | |||
| @@ -498,7 +527,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| public String[] getCallbackIp() throws WxErrorException { | |||
| String url = "https://qyapi.weixin.qq.com/cgi-bin/getcallbackip"; | |||
| String responseContent = get(url, null); | |||
| JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); | |||
| JsonElement tmpJsonElement = new JsonParser().parse(responseContent); | |||
| JsonArray jsonArray = tmpJsonElement.getAsJsonObject().get("ip_list").getAsJsonArray(); | |||
| String[] ips = new String[jsonArray.size()]; | |||
| for (int i = 0; i < jsonArray.size(); i++) { | |||
| @@ -507,10 +536,12 @@ public class WxCpServiceImpl implements WxCpService { | |||
| return ips; | |||
| } | |||
| @Override | |||
| public String get(String url, String queryParam) throws WxErrorException { | |||
| return execute(new SimpleGetRequestExecutor(), url, queryParam); | |||
| } | |||
| @Override | |||
| public String post(String url, String postData) throws WxErrorException { | |||
| return execute(new SimplePostRequestExecutor(), url, postData); | |||
| } | |||
| @@ -518,6 +549,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| /** | |||
| * 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求 | |||
| */ | |||
| @Override | |||
| public <T, E> T execute(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | |||
| int retryTimes = 0; | |||
| do { | |||
| @@ -529,9 +561,10 @@ public class WxCpServiceImpl implements WxCpService { | |||
| * -1 系统繁忙, 1000ms后重试 | |||
| */ | |||
| if (error.getErrorCode() == -1) { | |||
| int sleepMillis = retrySleepMillis * (1 << retryTimes); | |||
| int sleepMillis = this.retrySleepMillis * (1 << retryTimes); | |||
| try { | |||
| log.debug("微信系统繁忙,{}ms 后重试(第{}次)", sleepMillis, retryTimes + 1); | |||
| this.log.debug("微信系统繁忙,{}ms 后重试(第{}次)", sleepMillis, | |||
| retryTimes + 1); | |||
| Thread.sleep(sleepMillis); | |||
| } catch (InterruptedException e1) { | |||
| throw new RuntimeException(e1); | |||
| @@ -540,7 +573,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| throw e; | |||
| } | |||
| } | |||
| } while (++retryTimes < maxRetryTimes); | |||
| } while (++retryTimes < this.maxRetryTimes); | |||
| throw new RuntimeException("微信服务端异常,超出重试次数"); | |||
| } | |||
| @@ -555,7 +588,8 @@ public class WxCpServiceImpl implements WxCpService { | |||
| uriWithAccessToken += uri.indexOf('?') == -1 ? "?access_token=" + accessToken : "&access_token=" + accessToken; | |||
| try { | |||
| return executor.execute(getHttpclient(), httpProxy, uriWithAccessToken, data); | |||
| return executor.execute(getHttpclient(), this.httpProxy, | |||
| uriWithAccessToken, data); | |||
| } catch (WxErrorException e) { | |||
| WxError error = e.getError(); | |||
| /* | |||
| @@ -565,7 +599,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| */ | |||
| if (error.getErrorCode() == 42001 || error.getErrorCode() == 40001) { | |||
| // 强制设置wxCpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token | |||
| wxCpConfigStorage.expireAccessToken(); | |||
| this.wxCpConfigStorage.expireAccessToken(); | |||
| return execute(executor, uri, data); | |||
| } | |||
| if (error.getErrorCode() != 0) { | |||
| @@ -580,21 +614,24 @@ public class WxCpServiceImpl implements WxCpService { | |||
| } | |||
| protected CloseableHttpClient getHttpclient() { | |||
| return httpClient; | |||
| return this.httpClient; | |||
| } | |||
| @Override | |||
| public void setWxCpConfigStorage(WxCpConfigStorage wxConfigProvider) { | |||
| this.wxCpConfigStorage = wxConfigProvider; | |||
| ApacheHttpClientBuilder apacheHttpClientBuilder = wxCpConfigStorage.getApacheHttpClientBuilder(); | |||
| ApacheHttpClientBuilder apacheHttpClientBuilder = this.wxCpConfigStorage | |||
| .getApacheHttpClientBuilder(); | |||
| if (null == apacheHttpClientBuilder) { | |||
| apacheHttpClientBuilder = DefaultApacheHttpClientBuilder.get(); | |||
| } | |||
| apacheHttpClientBuilder.httpProxyHost(wxCpConfigStorage.getHttp_proxy_host()) | |||
| .httpProxyPort(wxCpConfigStorage.getHttp_proxy_port()) | |||
| .httpProxyUsername(wxCpConfigStorage.getHttp_proxy_username()) | |||
| .httpProxyPassword(wxCpConfigStorage.getHttp_proxy_password()); | |||
| apacheHttpClientBuilder | |||
| .httpProxyHost(this.wxCpConfigStorage.getHttp_proxy_host()) | |||
| .httpProxyPort(this.wxCpConfigStorage.getHttp_proxy_port()) | |||
| .httpProxyUsername(this.wxCpConfigStorage.getHttp_proxy_username()) | |||
| .httpProxyPassword(this.wxCpConfigStorage.getHttp_proxy_password()); | |||
| httpClient = apacheHttpClientBuilder.build(); | |||
| this.httpClient = apacheHttpClientBuilder.build(); | |||
| } | |||
| @Override | |||
| @@ -610,18 +647,18 @@ public class WxCpServiceImpl implements WxCpService { | |||
| @Override | |||
| public WxSession getSession(String id) { | |||
| if (sessionManager == null) { | |||
| if (this.sessionManager == null) { | |||
| return null; | |||
| } | |||
| return sessionManager.getSession(id); | |||
| return this.sessionManager.getSession(id); | |||
| } | |||
| @Override | |||
| public WxSession getSession(String id, boolean create) { | |||
| if (sessionManager == null) { | |||
| if (this.sessionManager == null) { | |||
| return null; | |||
| } | |||
| return sessionManager.getSession(id, create); | |||
| return this.sessionManager.getSession(id, create); | |||
| } | |||
| @@ -653,7 +690,7 @@ public class WxCpServiceImpl implements WxCpService { | |||
| } | |||
| public File getTmpDirFile() { | |||
| return tmpDirFile; | |||
| return this.tmpDirFile; | |||
| } | |||
| public void setTmpDirFile(File tmpDirFile) { | |||