* 微信开放平台:1. WxOpenInRedisConfigStorage 支持 JedisPool/JedisSentinelPool 等 Pool<Jedis> 的子类;2. WxOpenInRedisConfigStorage 增加 keyPrefix 以支持可配置的前缀; * 微信开放平台:增加小程序代码模板库管理 * 小程序:增加代码管理相关 API * 小程序:增加修改服务器地址、成员管理 API * 小程序:增加数据分析相关 API * 微信开放平台:增加 HTTP proxy 机制master
@@ -38,6 +38,14 @@ public interface WxOpenConfigStorage { | |||||
void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken); | void updateComponentAccessTokent(WxOpenComponentAccessToken componentAccessToken); | ||||
String getHttpProxyHost(); | |||||
int getHttpProxyPort(); | |||||
String getHttpProxyUsername(); | |||||
String getHttpProxyPassword(); | |||||
WxMpConfigStorage getWxMpConfigStorage(String appId); | WxMpConfigStorage getWxMpConfigStorage(String appId); | ||||
WxMaConfig getWxMaConfig(String appId); | WxMaConfig getWxMaConfig(String appId); | ||||
@@ -117,5 +125,4 @@ public interface WxOpenConfigStorage { | |||||
* @param expiresInSeconds 过期时间,以秒为单位 | * @param expiresInSeconds 过期时间,以秒为单位 | ||||
*/ | */ | ||||
void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds); | void updateCardApiTicket(String appId, String cardApiTicket, int expiresInSeconds); | ||||
} | } |
@@ -30,6 +30,11 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
private String componentAccessToken; | private String componentAccessToken; | ||||
private long componentExpiresTime; | private long componentExpiresTime; | ||||
private String httpProxyHost; | |||||
private int httpProxyPort; | |||||
private String httpProxyUsername; | |||||
private String httpProxyPassword; | |||||
private Map<String, Token> authorizerRefreshTokens = new Hashtable<>(); | private Map<String, Token> authorizerRefreshTokens = new Hashtable<>(); | ||||
private Map<String, Token> authorizerAccessTokens = new Hashtable<>(); | private Map<String, Token> authorizerAccessTokens = new Hashtable<>(); | ||||
private Map<String, Token> jsapiTickets = new Hashtable<>(); | private Map<String, Token> jsapiTickets = new Hashtable<>(); | ||||
@@ -105,6 +110,42 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
updateComponentAccessTokent(componentAccessToken.getComponentAccessToken(), componentAccessToken.getExpiresIn()); | updateComponentAccessTokent(componentAccessToken.getComponentAccessToken(), componentAccessToken.getExpiresIn()); | ||||
} | } | ||||
@Override | |||||
public String getHttpProxyHost() { | |||||
return httpProxyHost; | |||||
} | |||||
public void setHttpProxyHost(String httpProxyHost) { | |||||
this.httpProxyHost = httpProxyHost; | |||||
} | |||||
@Override | |||||
public int getHttpProxyPort() { | |||||
return httpProxyPort; | |||||
} | |||||
public void setHttpProxyPort(int httpProxyPort) { | |||||
this.httpProxyPort = httpProxyPort; | |||||
} | |||||
@Override | |||||
public String getHttpProxyUsername() { | |||||
return httpProxyUsername; | |||||
} | |||||
public void setHttpProxyUsername(String httpProxyUsername) { | |||||
this.httpProxyUsername = httpProxyUsername; | |||||
} | |||||
@Override | |||||
public String getHttpProxyPassword() { | |||||
return httpProxyPassword; | |||||
} | |||||
public void setHttpProxyPassword(String httpProxyPassword) { | |||||
this.httpProxyPassword = httpProxyPassword; | |||||
} | |||||
@Override | @Override | ||||
public WxMpConfigStorage getWxMpConfigStorage(String appId) { | public WxMpConfigStorage getWxMpConfigStorage(String appId) { | ||||
return new WxOpenInnerConfigStorage(this, appId); | return new WxOpenInnerConfigStorage(this, appId); | ||||
@@ -377,22 +418,22 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { | |||||
@Override | @Override | ||||
public String getHttpProxyHost() { | public String getHttpProxyHost() { | ||||
return null; | |||||
return this.wxOpenConfigStorage.getHttpProxyHost(); | |||||
} | } | ||||
@Override | @Override | ||||
public int getHttpProxyPort() { | public int getHttpProxyPort() { | ||||
return 0; | |||||
return this.wxOpenConfigStorage.getHttpProxyPort(); | |||||
} | } | ||||
@Override | @Override | ||||
public String getHttpProxyUsername() { | public String getHttpProxyUsername() { | ||||
return null; | |||||
return this.wxOpenConfigStorage.getHttpProxyUsername(); | |||||
} | } | ||||
@Override | @Override | ||||
public String getHttpProxyPassword() { | public String getHttpProxyPassword() { | ||||
return null; | |||||
return this.wxOpenConfigStorage.getHttpProxyPassword(); | |||||
} | } | ||||
@Override | @Override | ||||
@@ -33,8 +33,14 @@ public abstract class WxOpenServiceAbstractImpl<H, P> implements WxOpenService, | |||||
@Override | @Override | ||||
public void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage) { | public void setWxOpenConfigStorage(WxOpenConfigStorage wxOpenConfigStorage) { | ||||
this.wxOpenConfigStorage = wxOpenConfigStorage; | this.wxOpenConfigStorage = wxOpenConfigStorage; | ||||
this.initHttp(); | |||||
} | } | ||||
/** | |||||
* 初始化 RequestHttp | |||||
*/ | |||||
public abstract void initHttp(); | |||||
protected synchronized <T, E> T execute(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | protected synchronized <T, E> T execute(RequestExecutor<T, E> executor, String uri, E data) throws WxErrorException { | ||||
try { | try { | ||||
T result = executor.execute(uri, data); | T result = executor.execute(uri, data); | ||||
@@ -5,6 +5,7 @@ import me.chanjar.weixin.common.util.http.HttpType; | |||||
import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; | ||||
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; | ||||
import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; | import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder; | ||||
import me.chanjar.weixin.open.api.WxOpenConfigStorage; | |||||
import org.apache.http.HttpHost; | import org.apache.http.HttpHost; | ||||
import org.apache.http.impl.client.CloseableHttpClient; | import org.apache.http.impl.client.CloseableHttpClient; | ||||
@@ -14,8 +15,21 @@ import org.apache.http.impl.client.CloseableHttpClient; | |||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
public class WxOpenServiceApacheHttpClientImpl extends WxOpenServiceAbstractImpl<CloseableHttpClient, HttpHost> { | public class WxOpenServiceApacheHttpClientImpl extends WxOpenServiceAbstractImpl<CloseableHttpClient, HttpHost> { | ||||
private CloseableHttpClient httpClient = DefaultApacheHttpClientBuilder.get().build(); | |||||
private HttpHost httpProxy = null; | |||||
private CloseableHttpClient httpClient; | |||||
private HttpHost httpProxy; | |||||
@Override | |||||
public void initHttp() { | |||||
WxOpenConfigStorage configStorage = this.getWxOpenConfigStorage(); | |||||
if (configStorage.getHttpProxyHost() != null && configStorage.getHttpProxyPort() > 0) { | |||||
this.httpProxy = new HttpHost(configStorage.getHttpProxyHost(), configStorage.getHttpProxyPort()); | |||||
} | |||||
this.httpClient = DefaultApacheHttpClientBuilder.get() | |||||
.httpProxyHost(configStorage.getHttpProxyHost()) | |||||
.httpProxyPort(configStorage.getHttpProxyPort()) | |||||
.httpProxyUsername(configStorage.getHttpProxyUsername()) | |||||
.httpProxyPassword(configStorage.getHttpProxyPassword()).build(); | |||||
} | |||||
@Override | @Override | ||||
public CloseableHttpClient getRequestHttpClient() { | public CloseableHttpClient getRequestHttpClient() { | ||||
@@ -41,5 +55,4 @@ public class WxOpenServiceApacheHttpClientImpl extends WxOpenServiceAbstractImpl | |||||
public String post(String url, String postData) throws WxErrorException { | public String post(String url, String postData) throws WxErrorException { | ||||
return execute(SimplePostRequestExecutor.create(this), url, postData); | return execute(SimplePostRequestExecutor.create(this), url, postData); | ||||
} | } | ||||
} | } |