소스 검색

规范统一config部分代码

master
Binary Wang 5 년 전
부모
커밋
d9b7217009
34개의 변경된 파일277개의 추가작업 그리고 294개의 파일을 삭제
  1. +1
    -1
      starters/wx-java-mp-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/WxMpServiceAutoConfiguration.java
  2. +8
    -8
      starters/wx-java-mp-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/WxMpStorageAutoConfiguration.java
  3. +5
    -7
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpTpConfigStorage.java
  4. +23
    -19
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java
  5. +8
    -7
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java
  6. +31
    -28
      weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpTpDefaultConfigImpl.java
  7. +2
    -2
      weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/ApiTestModule.java
  8. +2
    -2
      weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpDemoInMemoryConfigStorage.java
  9. +23
    -21
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java
  10. +140
    -167
      weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedisConfigImpl.java
  11. +2
    -2
      weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/test/TestConfig.java
  12. +1
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
  13. +1
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java
  14. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceHttpClientImpl.java
  15. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceJoddHttpImpl.java
  16. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java
  17. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpSubscribeMsgServiceImpl.java
  18. +3
    -3
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java
  19. +2
    -2
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java
  20. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpConfigStorage.java
  21. +3
    -2
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpDefaultConfigImpl.java
  22. +4
    -4
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpRedisConfigImpl.java
  23. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java
  24. +1
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java
  25. +1
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImplTest.java
  26. +1
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/test/ApiTestModule.java
  27. +2
    -2
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/test/TestConfigStorage.java
  28. +2
    -2
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoInMemoryConfigStorage.java
  29. +1
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java
  30. +1
    -1
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpEndpointServlet.java
  31. +1
    -1
      weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java
  32. +1
    -1
      weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
  33. +1
    -1
      weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java
  34. +0
    -1
      weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenServiceApacheHttpClientImpl.java

+ 1
- 1
starters/wx-java-mp-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/WxMpServiceAutoConfiguration.java 파일 보기

@@ -1,6 +1,6 @@
package com.binarywang.spring.starter.wxjava.mp;

import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;


+ 8
- 8
starters/wx-java-mp-starter/src/main/java/com/binarywang/spring/starter/wxjava/mp/WxMpStorageAutoConfiguration.java 파일 보기

@@ -1,8 +1,8 @@
package com.binarywang.spring.starter.wxjava.mp;

import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.api.WxMpInRedisConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import me.chanjar.weixin.mp.config.impl.WxMpRedisConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
@@ -34,23 +34,23 @@ public class WxMpStorageAutoConfiguration {
return getWxMpInMemoryConfigStorage();
}

private WxMpInMemoryConfigStorage getWxMpInMemoryConfigStorage() {
WxMpInMemoryConfigStorage config = new WxMpInMemoryConfigStorage();
private WxMpDefaultConfigImpl getWxMpInMemoryConfigStorage() {
WxMpDefaultConfigImpl config = new WxMpDefaultConfigImpl();
setWxMpInfo(config);
return config;
}

private WxMpInRedisConfigStorage getWxMpInRedisConfigStorage() {
private WxMpRedisConfigImpl getWxMpInRedisConfigStorage() {
JedisPool poolToUse = jedisPool;
if (poolToUse == null) {
poolToUse = getJedisPool();
}
WxMpInRedisConfigStorage config = new WxMpInRedisConfigStorage(poolToUse);
WxMpRedisConfigImpl config = new WxMpRedisConfigImpl(poolToUse);
setWxMpInfo(config);
return config;
}

private void setWxMpInfo(WxMpInMemoryConfigStorage config) {
private void setWxMpInfo(WxMpDefaultConfigImpl config) {
config.setAppId(properties.getAppId());
config.setSecret(properties.getSecret());
config.setToken(properties.getToken());


+ 5
- 7
weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpTpConfigStorage.java 파일 보기

@@ -14,7 +14,6 @@ public interface WxCpTpConfigStorage {

/**
* 设置企业微信服务器 baseUrl.
*
* 默认值是 https://qyapi.weixin.qq.com , 如果使用默认值,则不需要调用 setBaseApiUrl
*
* @param baseUrl 企业微信服务器 Url
@@ -23,7 +22,6 @@ public interface WxCpTpConfigStorage {

/**
* 读取企业微信 API Url.
*
* 支持私有化企业微信服务器.
*/
String getApiUrl(String path);
@@ -33,7 +31,7 @@ public interface WxCpTpConfigStorage {
boolean isSuiteAccessTokenExpired();

/**
* 强制将suite access token过期掉
* 强制将suite access token过期掉.
*/
void expireSuiteAccessToken();

@@ -46,15 +44,15 @@ public interface WxCpTpConfigStorage {
boolean isSuiteTicketExpired();

/**
* 强制将suite ticket过期掉
* 强制将suite ticket过期掉.
*/
void expireSuiteTicket();

/**
* 应该是线程安全的
* 应该是线程安全的.
*/
void updateSuiteTicket(String suiteTicket, int expiresInSeconds);
String getCorpId();

String getCorpSecret();
@@ -80,7 +78,7 @@ public interface WxCpTpConfigStorage {
File getTmpDirFile();

/**
* http client builder
* http client builder.
*
* @return ApacheHttpClientBuilder
*/


weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpInMemoryConfigStorage.java → weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpDefaultConfigImpl.java 파일 보기

@@ -1,45 +1,49 @@
package me.chanjar.weixin.cp.config;
package me.chanjar.weixin.cp.config.impl;

import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.constant.WxCpApiPathConsts;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;

import java.io.File;
import java.io.Serializable;

/**
* 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化
* 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化.
*
* @author Daniel Qian
*/
public class WxCpInMemoryConfigStorage implements WxCpConfigStorage {
protected volatile String corpId;
protected volatile String corpSecret;
public class WxCpDefaultConfigImpl implements WxCpConfigStorage, Serializable {
private static final long serialVersionUID = 1154541446729462780L;

protected volatile String token;
private volatile String corpId;
private volatile String corpSecret;

private volatile String token;
protected volatile String accessToken;
protected volatile String aesKey;
private volatile String aesKey;
protected volatile Integer agentId;
protected volatile long expiresTime;
private volatile long expiresTime;

protected volatile String oauth2redirectUri;
private volatile String oauth2redirectUri;

protected volatile String httpProxyHost;
protected volatile int httpProxyPort;
protected volatile String httpProxyUsername;
protected volatile String httpProxyPassword;
private volatile String httpProxyHost;
private volatile int httpProxyPort;
private volatile String httpProxyUsername;
private volatile String httpProxyPassword;

protected volatile String jsapiTicket;
protected volatile long jsapiTicketExpiresTime;
private volatile String jsapiTicket;
private volatile long jsapiTicketExpiresTime;

protected volatile String agentJsapiTicket;
protected volatile long agentJsapiTicketExpiresTime;
private volatile String agentJsapiTicket;
private volatile long agentJsapiTicketExpiresTime;

protected volatile File tmpDirFile;
private volatile File tmpDirFile;

private volatile ApacheHttpClientBuilder apacheHttpClientBuilder;

protected volatile String baseApiUrl;
private volatile String baseApiUrl;

@Override
public void setBaseApiUrl(String baseUrl) {

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpJedisConfigStorage.java → weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpRedisConfigImpl.java 파일 보기

@@ -1,7 +1,8 @@
package me.chanjar.weixin.cp.config;
package me.chanjar.weixin.cp.config.impl;

import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.cp.config.WxCpConfigStorage;
import me.chanjar.weixin.cp.constant.WxCpApiPathConsts;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
@@ -17,7 +18,7 @@ import java.io.File;
*
* @author gaigeshen
*/
public class WxCpJedisConfigStorage implements WxCpConfigStorage {
public class WxCpRedisConfigImpl implements WxCpConfigStorage {
private static final String ACCESS_TOKEN_KEY = "WX_CP_ACCESS_TOKEN";
private static final String ACCESS_TOKEN_EXPIRES_TIME_KEY = "WX_CP_ACCESS_TOKEN_EXPIRES_TIME";
private static final String JS_API_TICKET_KEY = "WX_CP_JS_API_TICKET";
@@ -54,23 +55,23 @@ public class WxCpJedisConfigStorage implements WxCpConfigStorage {
return baseApiUrl + path;
}

public WxCpJedisConfigStorage(JedisPool jedisPool) {
public WxCpRedisConfigImpl(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}

public WxCpJedisConfigStorage(String host, int port) {
public WxCpRedisConfigImpl(String host, int port) {
jedisPool = new JedisPool(host, port);
}

public WxCpJedisConfigStorage(JedisPoolConfig poolConfig, String host, int port) {
public WxCpRedisConfigImpl(JedisPoolConfig poolConfig, String host, int port) {
jedisPool = new JedisPool(poolConfig, host, port);
}

public WxCpJedisConfigStorage(JedisPoolConfig poolConfig, String host, int port, int timeout, String password) {
public WxCpRedisConfigImpl(JedisPoolConfig poolConfig, String host, int port, int timeout, String password) {
jedisPool = new JedisPool(poolConfig, host, port, timeout, password);
}

public WxCpJedisConfigStorage(JedisPoolConfig poolConfig, String host, int port, int timeout, String password, int database) {
public WxCpRedisConfigImpl(JedisPoolConfig poolConfig, String host, int port, int timeout, String password, int database) {
jedisPool = new JedisPool(poolConfig, host, port, timeout, password, database);
}


weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/WxCpTpInMemoryConfigStorage.java → weixin-java-cp/src/main/java/me/chanjar/weixin/cp/config/impl/WxCpTpDefaultConfigImpl.java 파일 보기

@@ -1,44 +1,47 @@
package me.chanjar.weixin.cp.config;
package me.chanjar.weixin.cp.config.impl;

import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.cp.config.WxCpTpConfigStorage;
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;

import java.io.File;
import java.io.Serializable;

/**
* 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化
* 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化.
*
* @author Daniel Qian
* @author someone
*/
public class WxCpTpInMemoryConfigStorage implements WxCpTpConfigStorage {
protected volatile String corpId;
protected volatile String corpSecret;
protected volatile String suiteId;
protected volatile String suiteSecret;
public class WxCpTpDefaultConfigImpl implements WxCpTpConfigStorage, Serializable {
private static final long serialVersionUID = 6678780920621872824L;

protected volatile String token;
protected volatile String suiteAccessToken;
protected volatile String aesKey;
protected volatile long expiresTime;
private volatile String corpId;
private volatile String corpSecret;

protected volatile String oauth2redirectUri;
private volatile String suiteId;
private volatile String suiteSecret;

protected volatile String httpProxyHost;
protected volatile int httpProxyPort;
protected volatile String httpProxyUsername;
protected volatile String httpProxyPassword;
private volatile String token;
private volatile String suiteAccessToken;
private volatile String aesKey;
private volatile long expiresTime;

protected volatile String suiteTicket;
protected volatile long suiteTicketExpiresTime;
private volatile String oauth2redirectUri;

private volatile String httpProxyHost;
private volatile int httpProxyPort;
private volatile String httpProxyUsername;
private volatile String httpProxyPassword;

protected volatile File tmpDirFile;
private volatile String suiteTicket;
private volatile long suiteTicketExpiresTime;

private volatile File tmpDirFile;

private volatile ApacheHttpClientBuilder apacheHttpClientBuilder;

protected volatile String baseApiUrl;
private volatile String baseApiUrl;

@Override
public void setBaseApiUrl(String baseUrl) {
@@ -57,7 +60,7 @@ public class WxCpTpInMemoryConfigStorage implements WxCpTpConfigStorage {
public String getSuiteAccessToken() {
return this.suiteAccessToken;
}
public void setSuiteAccessToken(String suiteAccessToken) {
this.suiteAccessToken = suiteAccessToken;
}
@@ -82,25 +85,25 @@ public class WxCpTpInMemoryConfigStorage implements WxCpTpConfigStorage {
this.suiteAccessToken = suiteAccessToken;
this.expiresTime = System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L;
}
@Override
public String getCorpId() {
return this.corpId;
}
public void setCorpId(String corpId) {
this.corpId = corpId;
}
@Override
public String getCorpSecret() {
return this.corpSecret;
}
public void setCorpSecret(String corpSecret) {
this.corpSecret = corpSecret;
}
@Override
public String getSuiteTicket() {
return this.suiteTicket;

+ 2
- 2
weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/ApiTestModule.java 파일 보기

@@ -12,7 +12,7 @@ import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.config.WxCpInMemoryConfigStorage;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;

public class ApiTestModule implements Module {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@@ -44,7 +44,7 @@ public class ApiTestModule implements Module {
}

@XStreamAlias("xml")
public static class WxXmlCpInMemoryConfigStorage extends WxCpInMemoryConfigStorage {
public static class WxXmlCpInMemoryConfigStorage extends WxCpDefaultConfigImpl {

protected String userId;



+ 2
- 2
weixin-java-cp/src/test/java/me/chanjar/weixin/cp/demo/WxCpDemoInMemoryConfigStorage.java 파일 보기

@@ -6,14 +6,14 @@ import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.ToString;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import me.chanjar.weixin.cp.config.WxCpInMemoryConfigStorage;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;

/**
* @author Daniel Qian
*/
@XStreamAlias("xml")
@ToString
public class WxCpDemoInMemoryConfigStorage extends WxCpInMemoryConfigStorage {
public class WxCpDemoInMemoryConfigStorage extends WxCpDefaultConfigImpl {
public static WxCpDemoInMemoryConfigStorage fromXml(InputStream is) {
XStream xstream = XStreamInitializer.getInstance();
xstream.processAnnotations(WxCpDemoInMemoryConfigStorage.class);


weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaInMemoryConfig.java → weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java 파일 보기

@@ -1,9 +1,10 @@
package cn.binarywang.wx.miniapp.config;
package cn.binarywang.wx.miniapp.config.impl;

import java.io.File;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import cn.binarywang.wx.miniapp.config.WxMaConfig;
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
@@ -13,38 +14,39 @@ import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
*
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
public class WxMaInMemoryConfig implements WxMaConfig {
protected volatile String msgDataFormat;
public class WxMaDefaultConfigImpl implements WxMaConfig {
private volatile String msgDataFormat;
protected volatile String appid;
protected volatile String secret;
private volatile String secret;
protected volatile String token;
protected volatile String accessToken;
protected volatile String aesKey;
protected volatile long expiresTime;
private volatile String accessToken;
private volatile String aesKey;
private volatile long expiresTime;

protected volatile String httpProxyHost;
protected volatile int httpProxyPort;
protected volatile String httpProxyUsername;
protected volatile String httpProxyPassword;
private volatile String httpProxyHost;
private volatile int httpProxyPort;
private volatile String httpProxyUsername;
private volatile String httpProxyPassword;

protected volatile String jsapiTicket;
protected volatile long jsapiTicketExpiresTime;

//微信卡券的ticket单独缓存
protected volatile String cardApiTicket;
protected volatile long cardApiTicketExpiresTime;
private volatile String jsapiTicket;
private volatile long jsapiTicketExpiresTime;

/**
* 微信卡券的ticket单独缓存.
*/
private volatile String cardApiTicket;
private volatile long cardApiTicketExpiresTime;

protected Lock accessTokenLock = new ReentrantLock();
protected Lock jsapiTicketLock = new ReentrantLock();
protected Lock cardApiTicketLock = new ReentrantLock();
private Lock jsapiTicketLock = new ReentrantLock();
private Lock cardApiTicketLock = new ReentrantLock();

/**
* 临时文件目录
* 临时文件目录.
*/
protected volatile File tmpDirFile;

protected volatile ApacheHttpClientBuilder apacheHttpClientBuilder;
private volatile ApacheHttpClientBuilder apacheHttpClientBuilder;

@Override
public String getAccessToken() {

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaInRedisConfig.java → weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaRedisConfigImpl.java 파일 보기

@@ -1,4 +1,4 @@
package cn.binarywang.wx.miniapp.config;
package cn.binarywang.wx.miniapp.config.impl;

import java.io.File;
import java.util.HashMap;
@@ -7,6 +7,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;

import cn.binarywang.wx.miniapp.config.WxMaConfig;
import com.github.jedis.lock.JedisLock;

import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
@@ -17,105 +18,92 @@ import redis.clients.jedis.JedisPool;

/**
* 基于Redis的微信配置provider.
*
*
* <pre>
* 需要引入依赖<a href="https://github.com/abelaska/jedis-lock">jedis-lock</a>,才能使用该类。
* </pre>
*
* @author <a href="https://github.com/winter4666">winter</a>
*/
public class WxMaInRedisConfig implements WxMaConfig {
public class WxMaRedisConfigImpl implements WxMaConfig {
private static final String ACCESS_TOKEN = "accessToken";
private static final String JSAPI_TICKET = "jsapiTicket";
private static final String CARD_API_TICKET = "cardApiTicket";
private static final String HASH_VALUE_FIELD = "value";
private static final String HASH_EXPIRE_FIELD = "expire";
protected JedisPool jedisPool;
private JedisPool jedisPool;
/**
* 微信小程序唯一id,用于拼接存储到redis时的key,防止key重复
* 微信小程序唯一id,用于拼接存储到redis时的key,防止key重复.
*/
protected String maId;
protected volatile String msgDataFormat;
private String maId;
private volatile String msgDataFormat;
protected volatile String appid;
protected volatile String secret;
private volatile String secret;
protected volatile String token;
protected volatile String aesKey;
private volatile String aesKey;

protected volatile String httpProxyHost;
protected volatile int httpProxyPort;
protected volatile String httpProxyUsername;
protected volatile String httpProxyPassword;
private volatile String httpProxyHost;
private volatile int httpProxyPort;
private volatile String httpProxyUsername;
private volatile String httpProxyPassword;

protected Lock accessTokenLock;
protected Lock jsapiTicketLock;
protected Lock cardApiTicketLock;
private Lock accessTokenLock;
private Lock jsapiTicketLock;
private Lock cardApiTicketLock;

/**
* 临时文件目录
* 临时文件目录.
*/
protected volatile File tmpDirFile;

protected volatile ApacheHttpClientBuilder apacheHttpClientBuilder;
private volatile ApacheHttpClientBuilder apacheHttpClientBuilder;
private String getRedisKey(String key) {
StringBuilder redisKey = new StringBuilder("maConfig:");
if(maId == null) {
return redisKey.append(key).toString();
} else {
return redisKey.append(maId).append(":").append(key).toString();
}
}
StringBuilder redisKey = new StringBuilder("maConfig:");
if (maId == null) {
return redisKey.append(key).toString();
} else {
return redisKey.append(maId).append(":").append(key).toString();
}
}
private String getValueFromRedis(String key) {
Jedis jedis = jedisPool.getResource();
try {
try (Jedis jedis = jedisPool.getResource()) {
return jedis.hget(getRedisKey(key), HASH_VALUE_FIELD);
} finally {
jedis.close();
}
}
}

private void setValueToRedis(String key, long expiresTime, String value) {
Jedis jedis = jedisPool.getResource();
try {
Map<String, String> hash = new HashMap<String, String>();
hash.put(HASH_VALUE_FIELD, value);
hash.put(HASH_EXPIRE_FIELD, String.valueOf(expiresTime));
jedis.hmset(getRedisKey(key), hash);
} finally {
jedis.close();
}
}
try (Jedis jedis = jedisPool.getResource()) {
Map<String, String> hash = new HashMap<String, String>();
hash.put(HASH_VALUE_FIELD, value);
hash.put(HASH_EXPIRE_FIELD, String.valueOf(expiresTime));
jedis.hmset(getRedisKey(key), hash);
}
}

private long getExpireFromRedis(String key) {
Jedis jedis = jedisPool.getResource();
try {
try (Jedis jedis = jedisPool.getResource()) {
String expire = jedis.hget(getRedisKey(key), HASH_EXPIRE_FIELD);
return expire == null ? 0 : Long.valueOf(expire);
} finally {
jedis.close();
}
return expire == null ? 0 : Long.parseLong(expire);
}
}

private void setExpire(String key, long expiresTime) {
Jedis jedis = jedisPool.getResource();
try {
jedis.hset(getRedisKey(key), HASH_EXPIRE_FIELD, String.valueOf(expiresTime));
} finally {
jedis.close();
}
try (Jedis jedis = jedisPool.getResource()) {
jedis.hset(getRedisKey(key), HASH_EXPIRE_FIELD, String.valueOf(expiresTime));
}
}

public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
this.jedisPool = jedisPool;
}

public void setMaId(String maId) {
this.maId = maId;
this.maId = maId;
}

@Override
@@ -125,19 +113,19 @@ public class WxMaInRedisConfig implements WxMaConfig {

@Override
public Lock getAccessTokenLock() {
if(accessTokenLock == null) {
synchronized (this) {
if(accessTokenLock == null) {
accessTokenLock = new DistributedLock(getRedisKey("accessTokenLock"));
}
}
}
if (accessTokenLock == null) {
synchronized (this) {
if (accessTokenLock == null) {
accessTokenLock = new DistributedLock(getRedisKey("accessTokenLock"));
}
}
}
return accessTokenLock;
}

@Override
public boolean isAccessTokenExpired() {
return System.currentTimeMillis() > getExpireFromRedis(ACCESS_TOKEN);
return System.currentTimeMillis() > getExpireFromRedis(ACCESS_TOKEN);
}

@Override
@@ -147,7 +135,7 @@ public class WxMaInRedisConfig implements WxMaConfig {

@Override
public synchronized void updateAccessToken(String accessToken, int expiresInSeconds) {
setValueToRedis(ACCESS_TOKEN, System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L, accessToken);
setValueToRedis(ACCESS_TOKEN, System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L, accessToken);
}

@Override
@@ -157,30 +145,30 @@ public class WxMaInRedisConfig implements WxMaConfig {

@Override
public Lock getJsapiTicketLock() {
if(jsapiTicketLock == null) {
synchronized (this) {
if(jsapiTicketLock == null) {
jsapiTicketLock = new DistributedLock(getRedisKey("jsapiTicketLock"));
}
}
}
if (jsapiTicketLock == null) {
synchronized (this) {
if (jsapiTicketLock == null) {
jsapiTicketLock = new DistributedLock(getRedisKey("jsapiTicketLock"));
}
}
}
return jsapiTicketLock;
}

@Override
public boolean isJsapiTicketExpired() {
return System.currentTimeMillis() > getExpireFromRedis(JSAPI_TICKET);
return System.currentTimeMillis() > getExpireFromRedis(JSAPI_TICKET);
}

@Override
public void expireJsapiTicket() {
setExpire(JSAPI_TICKET, 0);
setExpire(JSAPI_TICKET, 0);
}

@Override
public void updateJsapiTicket(String jsapiTicket, int expiresInSeconds) {
// 预留200秒的时间
setValueToRedis(JSAPI_TICKET, System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L, jsapiTicket);
// 预留200秒的时间
setValueToRedis(JSAPI_TICKET, System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L, jsapiTicket);
}


@@ -191,34 +179,34 @@ public class WxMaInRedisConfig implements WxMaConfig {

@Override
public Lock getCardApiTicketLock() {
if(cardApiTicketLock == null) {
synchronized (this) {
if(cardApiTicketLock == null) {
cardApiTicketLock = new DistributedLock(getRedisKey("cardApiTicketLock"));
}
}
}
if (cardApiTicketLock == null) {
synchronized (this) {
if (cardApiTicketLock == null) {
cardApiTicketLock = new DistributedLock(getRedisKey("cardApiTicketLock"));
}
}
}
return cardApiTicketLock;
}

@Override
public boolean isCardApiTicketExpired() {
return System.currentTimeMillis() > getExpireFromRedis(CARD_API_TICKET);
return System.currentTimeMillis() > getExpireFromRedis(CARD_API_TICKET);
}

@Override
public void expireCardApiTicket() {
setExpire(CARD_API_TICKET, 0);
setExpire(CARD_API_TICKET, 0);
}

@Override
public void updateCardApiTicket(String cardApiTicket, int expiresInSeconds) {
setValueToRedis(CARD_API_TICKET, System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L, cardApiTicket);
setValueToRedis(CARD_API_TICKET, System.currentTimeMillis() + (expiresInSeconds - 200) * 1000L, cardApiTicket);
}

@Override
public void expireAccessToken() {
setExpire(ACCESS_TOKEN, 0);
setExpire(ACCESS_TOKEN, 0);
}

@Override
@@ -241,7 +229,7 @@ public class WxMaInRedisConfig implements WxMaConfig {

@Override
public long getExpiresTime() {
return getExpireFromRedis(ACCESS_TOKEN);
return getExpireFromRedis(ACCESS_TOKEN);
}

@Override
@@ -325,80 +313,65 @@ public class WxMaInRedisConfig implements WxMaConfig {
public void setAppid(String appid) {
this.appid = appid;
}
/**
* 基于redis的简单分布式锁
* 基于redis的简单分布式锁.
*/
private class DistributedLock implements Lock {
private JedisLock lock;
private DistributedLock(String key) {
this.lock = new JedisLock(getRedisKey(key));
}

@Override
public void lock() {
Jedis jedis = jedisPool.getResource();
try {
if(!lock.acquire(jedis)) {
throw new RuntimeException("acquire timeouted");
}
} catch (InterruptedException e) {
throw new RuntimeException("lock failed",e);
} finally {
jedis.close();
}
}

@Override
public void lockInterruptibly() throws InterruptedException {
Jedis jedis = jedisPool.getResource();
try {
if(!lock.acquire(jedis)) {
throw new RuntimeException("acquire timeouted");
}
} finally {
jedis.close();
}
}

@Override
public boolean tryLock() {
Jedis jedis = jedisPool.getResource();
try {
return lock.acquire(jedis);
} catch (InterruptedException e) {
throw new RuntimeException("lock failed",e);
} finally {
jedis.close();
}
}

@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
Jedis jedis = jedisPool.getResource();
try {
return lock.acquire(jedis);
} finally {
jedis.close();
}
}

@Override
public void unlock() {
Jedis jedis = jedisPool.getResource();
try {
lock.release(jedis);
} finally {
jedis.close();
}
}

@Override
public Condition newCondition() {
throw new RuntimeException("unsupported method");
}

private JedisLock lock;

private DistributedLock(String key) {
this.lock = new JedisLock(getRedisKey(key));
}

@Override
public void lock() {
try (Jedis jedis = jedisPool.getResource()) {
if (!lock.acquire(jedis)) {
throw new RuntimeException("acquire timeouted");
}
} catch (InterruptedException e) {
throw new RuntimeException("lock failed", e);
}
}

@Override
public void lockInterruptibly() throws InterruptedException {
try (Jedis jedis = jedisPool.getResource()) {
if (!lock.acquire(jedis)) {
throw new RuntimeException("acquire timeouted");
}
}
}

@Override
public boolean tryLock() {
try (Jedis jedis = jedisPool.getResource()) {
return lock.acquire(jedis);
} catch (InterruptedException e) {
throw new RuntimeException("lock failed", e);
}
}

@Override
public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {
try (Jedis jedis = jedisPool.getResource()) {
return lock.acquire(jedis);
}
}

@Override
public void unlock() {
try (Jedis jedis = jedisPool.getResource()) {
lock.release(jedis);
}
}

@Override
public Condition newCondition() {
throw new RuntimeException("unsupported method");
}

}
}

+ 2
- 2
weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/test/TestConfig.java 파일 보기

@@ -1,6 +1,6 @@
package cn.binarywang.wx.miniapp.test;

import cn.binarywang.wx.miniapp.config.WxMaInMemoryConfig;
import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
@@ -13,7 +13,7 @@ import java.util.concurrent.locks.Lock;
* @author <a href="https://github.com/binarywang">Binary Wang</a>
*/
@XStreamAlias("xml")
public class TestConfig extends WxMaInMemoryConfig {
public class TestConfig extends WxMaDefaultConfigImpl {

private String openid;
private String kfAccount;


+ 1
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java 파일 보기

@@ -10,6 +10,7 @@ import me.chanjar.weixin.mp.bean.result.WxMpCurrentAutoReplyInfo;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.enums.TicketType;
import me.chanjar.weixin.mp.enums.WxMpApiUrl;



+ 1
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/BaseWxMpServiceImpl.java 파일 보기

@@ -22,6 +22,7 @@ import me.chanjar.weixin.mp.bean.result.WxMpCurrentAutoReplyInfo;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpSemanticQueryResult;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.enums.TicketType;
import me.chanjar.weixin.mp.enums.WxMpApiUrl;
import me.chanjar.weixin.mp.util.WxMpConfigStorageHolder;


+ 1
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceHttpClientImpl.java 파일 보기

@@ -7,7 +7,7 @@ import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.HttpType;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;


+ 1
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceJoddHttpImpl.java 파일 보기

@@ -7,7 +7,7 @@ import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.HttpType;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;

import java.util.concurrent.locks.Lock;



+ 1
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpServiceOkHttpImpl.java 파일 보기

@@ -6,7 +6,7 @@ import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.HttpType;
import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import okhttp3.*;

import java.io.IOException;


+ 1
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpSubscribeMsgServiceImpl.java 파일 보기

@@ -3,7 +3,7 @@ package me.chanjar.weixin.mp.api.impl;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.http.URIUtil;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.WxMpSubscribeMsgService;
import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;


+ 3
- 3
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlMessage.java 파일 보기

@@ -15,7 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.util.XmlUtils;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
import me.chanjar.weixin.mp.util.xml.XStreamTransformer;
@@ -527,10 +527,10 @@ public class WxMpXmlMessage implements Serializable {
@XStreamAlias("DeviceID")
@XStreamConverter(value = XStreamCDataConverter.class)
private String deviceId;
/**
* 微信客户端生成的session id,用于request和response对应,
* 因此响应中该字段第三方需要原封不变的带回
* 因此响应中该字段第三方需要原封不变的带回
*/
@XStreamAlias("SessionID")
@XStreamConverter(value = XStreamCDataConverter.class)


+ 2
- 2
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/message/WxMpXmlOutMessage.java 파일 보기

@@ -4,7 +4,7 @@ import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.builder.outxml.*;
import me.chanjar.weixin.mp.util.crypto.WxMpCryptUtil;
import me.chanjar.weixin.mp.util.xml.XStreamTransformer;
@@ -79,7 +79,7 @@ public abstract class WxMpXmlOutMessage implements Serializable {
public static TransferCustomerServiceBuilder TRANSFER_CUSTOMER_SERVICE() {
return new TransferCustomerServiceBuilder();
}
/**
* 获得设备消息builder
*/


weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpConfigStorage.java → weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/WxMpConfigStorage.java 파일 보기

@@ -1,4 +1,4 @@
package me.chanjar.weixin.mp.api;
package me.chanjar.weixin.mp.config;

import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInMemoryConfigStorage.java → weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpDefaultConfigImpl.java 파일 보기

@@ -1,4 +1,4 @@
package me.chanjar.weixin.mp.api;
package me.chanjar.weixin.mp.config.impl;

import java.io.File;
import java.io.Serializable;
@@ -8,6 +8,7 @@ import java.util.concurrent.locks.ReentrantLock;
import lombok.Data;
import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.bean.WxMpHostConfig;
import me.chanjar.weixin.mp.enums.TicketType;
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
@@ -18,7 +19,7 @@ import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
* @author chanjarster
*/
@Data
public class WxMpInMemoryConfigStorage implements WxMpConfigStorage, Serializable {
public class WxMpDefaultConfigImpl implements WxMpConfigStorage, Serializable {
private static final long serialVersionUID = -6646519023303395185L;

protected volatile String appId;

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpInRedisConfigStorage.java → weixin-java-mp/src/main/java/me/chanjar/weixin/mp/config/impl/WxMpRedisConfigImpl.java 파일 보기

@@ -1,4 +1,4 @@
package me.chanjar.weixin.mp.api;
package me.chanjar.weixin.mp.config.impl;

import me.chanjar.weixin.mp.enums.TicketType;
import redis.clients.jedis.Jedis;
@@ -15,17 +15,17 @@ import redis.clients.jedis.JedisPool;
* @author nickwong
*/
@SuppressWarnings("hiding")
public class WxMpInRedisConfigStorage extends WxMpInMemoryConfigStorage {
public class WxMpRedisConfigImpl extends WxMpDefaultConfigImpl {
private static final String ACCESS_TOKEN_KEY = "wx:access_token:";

/**
* 使用连接池保证线程安全.
*/
protected final JedisPool jedisPool;
private final JedisPool jedisPool;

private String accessTokenKey;

public WxMpInRedisConfigStorage(JedisPool jedisPool) {
public WxMpRedisConfigImpl(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}


+ 1
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java 파일 보기

@@ -1,7 +1,7 @@
package me.chanjar.weixin.mp.enums;

import lombok.AllArgsConstructor;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;

import static me.chanjar.weixin.mp.bean.WxMpHostConfig.*;



+ 1
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/crypto/WxMpCryptUtil.java 파일 보기

@@ -17,7 +17,7 @@
*/
package me.chanjar.weixin.mp.util.crypto;

import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import org.apache.commons.codec.binary.Base64;

public class WxMpCryptUtil extends me.chanjar.weixin.common.util.crypto.WxCryptUtil {


+ 1
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpServiceImplTest.java 파일 보기

@@ -7,7 +7,7 @@ import org.testng.annotations.*;
import com.google.inject.Inject;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.test.ApiTestModule;
import me.chanjar.weixin.mp.api.test.TestConfigStorage;


+ 1
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/test/ApiTestModule.java 파일 보기

@@ -12,7 +12,7 @@ import com.google.inject.Binder;
import com.google.inject.Module;
import com.thoughtworks.xstream.XStream;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpService;

public class ApiTestModule implements Module {


+ 2
- 2
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/test/TestConfigStorage.java 파일 보기

@@ -1,13 +1,13 @@
package me.chanjar.weixin.mp.api.test;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.apache.commons.lang3.builder.ToStringBuilder;

import java.util.concurrent.locks.Lock;

@XStreamAlias("xml")
public class TestConfigStorage extends WxMpInMemoryConfigStorage {
public class TestConfigStorage extends WxMpDefaultConfigImpl {

private String openid;
private String kfAccount;


+ 2
- 2
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoInMemoryConfigStorage.java 파일 보기

@@ -6,13 +6,13 @@ import java.util.concurrent.locks.ReentrantLock;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import me.chanjar.weixin.common.util.xml.XStreamInitializer;
import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;

/**
* @author Daniel Qian
*/
@XStreamAlias("xml")
class WxMpDemoInMemoryConfigStorage extends WxMpInMemoryConfigStorage {
class WxMpDemoInMemoryConfigStorage extends WxMpDefaultConfigImpl {
private static final long serialVersionUID = -3706236839197109704L;

public static WxMpDemoInMemoryConfigStorage fromXml(InputStream is) {


+ 1
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpDemoServer.java 파일 보기

@@ -1,7 +1,7 @@
package me.chanjar.weixin.mp.demo;

import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;


+ 1
- 1
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/demo/WxMpEndpointServlet.java 파일 보기

@@ -1,6 +1,6 @@
package me.chanjar.weixin.mp.demo;

import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.WxMpMessageRouter;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;


+ 1
- 1
weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenConfigStorage.java 파일 보기

@@ -2,7 +2,7 @@ package me.chanjar.weixin.open.api;

import cn.binarywang.wx.miniapp.config.WxMaConfig;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken;
import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken;



+ 1
- 1
weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java 파일 보기

@@ -10,7 +10,7 @@ import java.util.concurrent.locks.ReentrantLock;
import cn.binarywang.wx.miniapp.config.WxMaConfig;
import me.chanjar.weixin.common.bean.WxAccessToken;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.bean.WxMpHostConfig;
import me.chanjar.weixin.mp.enums.TicketType;
import me.chanjar.weixin.open.api.WxOpenConfigStorage;


+ 1
- 1
weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java 파일 보기

@@ -1,7 +1,7 @@
package me.chanjar.weixin.open.api.impl;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.open.api.WxOpenComponentService;


+ 0
- 1
weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenServiceApacheHttpClientImpl.java 파일 보기

@@ -6,7 +6,6 @@ import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor;
import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder;
import me.chanjar.weixin.common.util.http.apache.DefaultApacheHttpClientBuilder;
import me.chanjar.weixin.mp.api.WxMpConfigStorage;
import me.chanjar.weixin.open.api.WxOpenConfigStorage;
import org.apache.http.HttpHost;
import org.apache.http.impl.client.CloseableHttpClient;


불러오는 중...
취소
저장