This commit is contained in:
jinyu 2017-06-22 13:23:44 +08:00
parent 1a42b479ba
commit dd45139b73
3 changed files with 162 additions and 168 deletions

View File

@ -2,14 +2,14 @@ package com.foxinmy.weixin4j.cache;
import java.util.Set;
import com.foxinmy.weixin4j.util.Consts;
import com.foxinmy.weixin4j.util.SerializationUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.util.Pool;
import com.foxinmy.weixin4j.util.Consts;
import com.foxinmy.weixin4j.util.SerializationUtils;
/**
* 用Redis保存缓存对象(推荐使用)
*
@ -18,8 +18,7 @@ import com.foxinmy.weixin4j.util.SerializationUtils;
* @date 2015年1月9日
* @since JDK 1.6
*/
public class RedisCacheStorager<T extends Cacheable> implements
CacheStorager<T> {
public class RedisCacheStorager<T extends Cacheable> implements CacheStorager<T> {
private Pool<Jedis> jedisPool;
@ -31,38 +30,34 @@ public class RedisCacheStorager<T extends Cacheable> implements
private final static int MAX_WAIT_MILLIS = 5000;
private final static boolean TEST_ON_BORROW = false;
private final static boolean TEST_ON_RETURN = true;
private final static JedisPoolConfig POOLCONFIG;
static {
POOLCONFIG = new JedisPoolConfig();
POOLCONFIG.setMaxTotal(MAX_TOTAL);
POOLCONFIG.setMaxIdle(MAX_IDLE);
POOLCONFIG.setMaxWaitMillis(MAX_WAIT_MILLIS);
POOLCONFIG.setTestOnBorrow(TEST_ON_BORROW);
POOLCONFIG.setTestOnReturn(TEST_ON_RETURN);
}
public RedisCacheStorager() {
this(HOST, PORT, TIMEOUT);
}
public RedisCacheStorager(String host, int port, int timeout) {
JedisPoolConfig jedisPoolConfig = defaultConfig();
this.jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout);
this(host, port, timeout, null, POOLCONFIG);
}
public RedisCacheStorager(String host, int port, int timeout, String password) {
JedisPoolConfig jedisPoolConfig = defaultConfig();
this.jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, password);
this(host, port, timeout, password, POOLCONFIG);
}
private JedisPoolConfig defaultConfig(){
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(MAX_TOTAL);
jedisPoolConfig.setMaxIdle(MAX_IDLE);
jedisPoolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);
jedisPoolConfig.setTestOnBorrow(TEST_ON_BORROW);
jedisPoolConfig.setTestOnReturn(TEST_ON_RETURN);
return jedisPoolConfig;
public RedisCacheStorager(JedisPoolConfig poolConfig) {
this(new JedisPool(poolConfig, HOST, PORT, TIMEOUT));
}
public RedisCacheStorager(JedisPoolConfig jedisPoolConfig) {
this(new JedisPool(jedisPoolConfig, HOST, PORT, TIMEOUT));
}
public RedisCacheStorager(String host, int port, int timeout,
JedisPoolConfig jedisPoolConfig) {
this(new JedisPool(jedisPoolConfig, host, port, timeout));
public RedisCacheStorager(String host, int port, int timeout, String password, JedisPoolConfig poolConfig) {
this(new JedisPool(poolConfig, host, port, timeout, password));
}
public RedisCacheStorager(Pool<Jedis> jedisPool) {
@ -76,8 +71,7 @@ public class RedisCacheStorager<T extends Cacheable> implements
try {
jedis = jedisPool.getResource();
byte[] value = jedis.get(key.getBytes(Consts.UTF_8));
return value != null ? (T) SerializationUtils.deserialize(value)
: null;
return value != null ? (T) SerializationUtils.deserialize(value) : null;
} finally {
if (jedis != null) {
jedis.close();
@ -93,8 +87,7 @@ public class RedisCacheStorager<T extends Cacheable> implements
byte[] cacheKey = key.getBytes(Consts.UTF_8);
byte[] value = SerializationUtils.serialize(cache);
if (cache.getExpires() > 0) {
jedis.setex(cacheKey,
(int) (cache.getExpires() - CUTMS) / 1000, value);
jedis.setex(cacheKey, (int) (cache.getExpires() - CUTMS) / 1000, value);
} else {
jedis.set(cacheKey, value);
}

View File

@ -30,14 +30,14 @@ public class RedisClusterCacheStorager<T extends Cacheable> implements
private final JedisCluster jedisCluster;
public RedisClusterCacheStorager(Set<HostAndPort> nodes) {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
jedisPoolConfig.setMaxTotal(MAX_TOTAL);
jedisPoolConfig.setMaxIdle(MAX_IDLE);
jedisPoolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);
jedisPoolConfig.setTestOnBorrow(TEST_ON_BORROW);
jedisPoolConfig.setTestOnReturn(TEST_ON_RETURN);
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(MAX_TOTAL);
poolConfig.setMaxIdle(MAX_IDLE);
poolConfig.setMaxWaitMillis(MAX_WAIT_MILLIS);
poolConfig.setTestOnBorrow(TEST_ON_BORROW);
poolConfig.setTestOnReturn(TEST_ON_RETURN);
this.jedisCluster = new JedisCluster(nodes, CONNECTION_TIMEOUT,
SO_TIMEOUT, MAX_REDIRECTIONS, jedisPoolConfig);
SO_TIMEOUT, MAX_REDIRECTIONS, poolConfig);
}
public RedisClusterCacheStorager(Set<HostAndPort> nodes,

View File

@ -1,5 +1,8 @@
package com.foxinmy.weixin4j.payment.mch;
import java.util.HashMap;
import java.util.Map;
import com.foxinmy.weixin4j.model.WeixinPayAccount;
import com.foxinmy.weixin4j.payment.PayRequest;
import com.foxinmy.weixin4j.type.SignType;
@ -16,8 +19,8 @@ import com.foxinmy.weixin4j.util.MapUtil;
* @since JDK 1.6
* @see com.foxinmy.weixin4j.payment.mch.PrePay
* @see com.foxinmy.weixin4j.payment.PayRequest
* @see <a
* href="https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1">APP支付</a>
* @see <a href=
* "https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1">APP支付</a>
*/
public class APPPayRequest extends AbstractPayRequest {
public APPPayRequest(String prePayId, WeixinPayAccount payAccount) {
@ -34,14 +37,19 @@ public class APPPayRequest extends AbstractPayRequest {
*/
@Override
public PayRequest toRequestObject() {
PayRequest payRequest = new PayRequest(getPaymentAccount().getId(),
"Sign=WXPay");
PayRequest payRequest = new PayRequest(getPaymentAccount().getId(), "Sign=WXPay");
payRequest.setPartnerId(getPaymentAccount().getMchId());
payRequest.setPrepayId(getPrePayId());
Map<String, String> map = new HashMap<String, String>();
map.put("appid", getPaymentAccount().getId());
map.put("partnerid", getPaymentAccount().getMchId());
map.put("prepayid", getPrePayId());
map.put("package", payRequest.getPackageInfo());
map.put("timestamp", payRequest.getTimeStamp());
map.put("noncestr", payRequest.getNonceStr());
String sign = DigestUtil.MD5(
String.format("%s&key=%s",
MapUtil.toJoinString(payRequest, false, true),
getPaymentAccount().getPaySignKey())).toUpperCase();
String.format("%s&key=%s", MapUtil.toJoinString(map, false, true), getPaymentAccount().getPaySignKey()))
.toUpperCase();
payRequest.setPaySign(sign);
payRequest.setSignType(SignType.MD5);
return payRequest;
@ -52,20 +60,13 @@ public class APPPayRequest extends AbstractPayRequest {
PayRequest payRequest = toRequestObject();
StringBuilder content = new StringBuilder();
content.append("<xml>");
content.append(String.format("<appid><![CDATA[%s]]></appid>",
payRequest.getAppId()));
content.append(String.format("<partnerid><![CDATA[%s]]></partnerid>",
getPaymentAccount().getPartnerId()));
content.append(String.format("<prepayid><![CDATA[%s]]></prepayid>",
payRequest.getPrepayId()));
content.append(String.format("<package><![CDATA[%s]]></package>",
payRequest.getPackageInfo()));
content.append(String.format("<noncestr><![CDATA[%s]]></noncestr>",
payRequest.getNonceStr()));
content.append(String.format("<timestamp><![CDATA[%s]]></timestamp>",
payRequest.getTimeStamp()));
content.append(String.format("<sign><![CDATA[%s]]></sign>",
payRequest.getPaySign()));
content.append(String.format("<appid><![CDATA[%s]]></appid>", payRequest.getAppId()));
content.append(String.format("<partnerid><![CDATA[%s]]></partnerid>", getPaymentAccount().getPartnerId()));
content.append(String.format("<prepayid><![CDATA[%s]]></prepayid>", payRequest.getPrepayId()));
content.append(String.format("<package><![CDATA[%s]]></package>", payRequest.getPackageInfo()));
content.append(String.format("<noncestr><![CDATA[%s]]></noncestr>", payRequest.getNonceStr()));
content.append(String.format("<timestamp><![CDATA[%s]]></timestamp>", payRequest.getTimeStamp()));
content.append(String.format("<sign><![CDATA[%s]]></sign>", payRequest.getPaySign()));
content.append("</xml>");
return content.toString();
}