diff --git a/weixin4j-base/pom.xml b/weixin4j-base/pom.xml
index cf8ed6c5..6e57f42d 100644
--- a/weixin4j-base/pom.xml
+++ b/weixin4j-base/pom.xml
@@ -5,7 +5,7 @@
com.foxinmy
weixin4j
- 1.6.5
+ 1.6.6
weixin4j-base
weixin4j-base
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java
similarity index 96%
rename from weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java
index 9cfd4678..9eab6a43 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.util;
+package com.foxinmy.weixin4j.jssdk;
/**
* JSSDK接口列表
@@ -243,7 +243,17 @@ public enum JSSDKAPI {
* "http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82"
* >微信支付-发起一个微信支付请求
*/
- chooseWXPay;
+ chooseWXPay,
+ /**
+ * 企业号会话-创建企业号会话
+ */
+ openEnterpriseChat,
+ /**
+ * 企业号-选取联系人(内测)
+ */
+ openEnterpriseContact;
/**
* 分享接口集合
@@ -302,4 +312,8 @@ public enum JSSDKAPI {
* 微信支付接口集合
*/
public final static JSSDKAPI[] PAY_APIS = { chooseWXPay };
+ /**
+ * 企业号会话接口集合
+ */
+ public final static JSSDKAPI[] CHAT_APIS = { openEnterpriseChat };
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java
similarity index 82%
rename from weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java
index 70bda874..09c19e32 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKConfigurator.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.util;
+package com.foxinmy.weixin4j.jssdk;
import java.util.HashMap;
import java.util.HashSet;
@@ -8,17 +8,23 @@ import java.util.Set;
import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.token.TokenHolder;
+import com.foxinmy.weixin4j.util.DateUtil;
+import com.foxinmy.weixin4j.util.DigestUtil;
+import com.foxinmy.weixin4j.util.MapUtil;
+import com.foxinmy.weixin4j.util.RandomUtil;
+import com.foxinmy.weixin4j.util.StringUtil;
+import com.foxinmy.weixin4j.util.Weixin4jConfigUtil;
/**
* JSSDK帮助类
*
- * @className JSSDKHelper
+ * @className JSSDKConfigurator
* @author jy
* @date 2015年12月23日
* @since JDK 1.6
* @see
*/
-public class JSSDKHelper {
+public class JSSDKConfigurator {
private final TokenHolder ticketTokenHolder;
private JSONObject config;
private Set apis;
@@ -28,7 +34,7 @@ public class JSSDKHelper {
*
* @param ticketTokenHolder
*/
- public JSSDKHelper(TokenHolder ticketTokenHolder) {
+ public JSSDKConfigurator(TokenHolder ticketTokenHolder) {
this.ticketTokenHolder = ticketTokenHolder;
this.config = new JSONObject();
this.apis = new HashSet();
@@ -40,7 +46,7 @@ public class JSSDKHelper {
*
* @return
*/
- public JSSDKHelper debugMode() {
+ public JSSDKConfigurator debugMode() {
config.put("debug", true);
return this;
}
@@ -51,7 +57,7 @@ public class JSSDKHelper {
* @param appId
* @return
*/
- public JSSDKHelper appId(String appId) {
+ public JSSDKConfigurator appId(String appId) {
config.put("appId", appId);
return this;
}
@@ -63,7 +69,7 @@ public class JSSDKHelper {
* @param apis
* @return
*/
- public JSSDKHelper apis(JSSDKAPI... apis) {
+ public JSSDKConfigurator apis(JSSDKAPI... apis) {
for (JSSDKAPI api : apis) {
this.apis.add(api);
}
@@ -77,7 +83,7 @@ public class JSSDKHelper {
* @param apis
* @return
*/
- public JSSDKHelper apis(JSSDKAPI[]... apis) {
+ public JSSDKConfigurator apis(JSSDKAPI[]... apis) {
for (JSSDKAPI[] api : apis) {
for (JSSDKAPI apii : api) {
this.apis.add(apii);
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java
index 4449bb47..c2d26690 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Token.java
@@ -32,9 +32,13 @@ public class Token implements Serializable {
@JSONField(name = "expires_in")
private int expiresIn;
/**
- * token创建的时间 只在FileTokenStorager模式下有效
+ * token创建的时间
*/
- private long time;
+ private long createTime;
+ /**
+ * 请求返回的原始结果
+ */
+ private String originalResult;
public Token() {
@@ -60,17 +64,25 @@ public class Token implements Serializable {
this.expiresIn = expiresIn;
}
- public long getTime() {
- return time;
+ public long getCreateTime() {
+ return createTime;
}
- public void setTime(long time) {
- this.time = time;
+ public void setCreateTime(long createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getOriginalResult() {
+ return originalResult;
+ }
+
+ public void setOriginalResult(String originalResult) {
+ this.originalResult = originalResult;
}
@Override
public String toString() {
return "Token [accessToken=" + accessToken + ", expiresIn=" + expiresIn
- + ", time=" + time + "]";
+ + ", createTime=" + createTime + "]";
}
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java
index ad897a4b..ce46ed8e 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenStorager.java
@@ -33,10 +33,10 @@ public class FileTokenStorager implements TokenStorager {
if (token_file.exists()) {
Token token = XmlStream.fromXML(
new FileInputStream(token_file), Token.class);
- if (token.getTime() < 0) {
+ if (token.getCreateTime() < 0) {
return token;
}
- if ((token.getTime() + (token.getExpiresIn() * 1000l) - 2) > System
+ if ((token.getCreateTime() + (token.getExpiresIn() * 1000l) - 2) > System
.currentTimeMillis()) {
return token;
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java
index 9790e43d..f9b91a00 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenStorager.java
@@ -1,12 +1,14 @@
package com.foxinmy.weixin4j.token;
+import java.util.HashMap;
+import java.util.Map;
+
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.util.StringUtil;
/**
* 用REDIS保存TOKEN
@@ -54,9 +56,9 @@ public class RedisTokenStorager implements TokenStorager {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
- String accessToken = jedis.get(cacheKey);
- if (!StringUtil.isBlank(accessToken)) {
- return new Token(accessToken);
+ Map map = jedis.hgetAll(cacheKey);
+ if (map != null && !map.isEmpty()) {
+ return map2token(map);
}
} finally {
if (jedis != null) {
@@ -71,11 +73,9 @@ public class RedisTokenStorager implements TokenStorager {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
+ jedis.hmset(cacheKey, token2map(token));
if (token.getExpiresIn() > 0) {
- jedis.setex(cacheKey, (int) token.getExpiresIn(),
- token.getAccessToken());
- } else {
- jedis.set(cacheKey, token.getAccessToken());
+ jedis.expire(cacheKey, token.getExpiresIn());
}
} finally {
if (jedis != null) {
@@ -83,4 +83,21 @@ public class RedisTokenStorager implements TokenStorager {
}
}
}
+
+ protected Map token2map(Token token) {
+ Map map = new HashMap();
+ map.put("accessToken", token.getAccessToken());
+ map.put("originalResult", token.getOriginalResult());
+ map.put("createTime", Long.toString(token.getCreateTime()));
+ map.put("expiresIn", Integer.toString(token.getExpiresIn()));
+ return map;
+ }
+
+ protected Token map2token(Map map) {
+ Token token = new Token(map.get("accessToken"));
+ token.setCreateTime(Long.parseLong(map.get("createTime")));
+ token.setExpiresIn(Integer.parseInt(map.get("expiresIn")));
+ token.setOriginalResult(map.get("originalResult"));
+ return token;
+ }
}
\ No newline at end of file
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/OauthToken.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/OauthToken.java
index f47a8e80..a7cdc3e3 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/OauthToken.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/OauthToken.java
@@ -72,8 +72,8 @@ public class OauthToken extends Token {
public String toString() {
return "OauthToken [openId=" + openId + ", unionId=" + unionId
+ ", refreshToken=" + refreshToken + ", scope=" + scope
- + ", getAccessToken()=" + getAccessToken()
- + ", getExpiresIn()=" + getExpiresIn() + ", getTime()="
- + getTime() + "]";
+ + ", accessToken=" + getAccessToken()
+ + ", expiresIn=" + getExpiresIn() + ", createTime="
+ + getCreateTime() + "]";
}
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java
index de4c5049..1603bf53 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java
@@ -53,7 +53,8 @@ public class WeixinJSTicketCreator implements TokenCreator {
JSONObject result = response.getAsJson();
Token token = new Token(result.getString("ticket"));
token.setExpiresIn(result.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java
index 7f7d8dc3..f4e49044 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java
@@ -50,7 +50,8 @@ public class WeixinTokenCreator implements TokenCreator {
WeixinResponse response = weixinExecutor.get(tokenUrl);
Token token = response.getAsObject(new TypeReference() {
});
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java
index b5abf7db..13f83a43 100644
--- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java
+++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/XmlstreamTest.java
@@ -17,7 +17,7 @@ public class XmlstreamTest {
Token token = new Token();
token.setAccessToken("accessToken");
token.setExpiresIn(12);
- token.setTime(13l);
+ token.setCreateTime(13l);
String content = XmlStream.toXML(token);
System.err.println(content);
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java
index 41295396..3321ab1f 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java
@@ -184,7 +184,7 @@ public class SuiteApi extends QyApi {
suitePerCodeHolder, suiteTokenHolder);
Token token = new Token(obj.getString("access_token"));
token.setExpiresIn(obj.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
suiteTicketHolder.getTokenStorager().caching(
tokenCreator.getCacheKey(), token);
// 缓存微信企业号永久授权码
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuitePreCodeCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuitePreCodeCreator.java
index 91433461..c5e66276 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuitePreCodeCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuitePreCodeCreator.java
@@ -54,7 +54,8 @@ public class WeixinSuitePreCodeCreator implements TokenCreator {
JSONObject result = response.getAsJson();
Token token = new Token(result.getString("pre_auth_code"));
token.setExpiresIn(result.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuiteTokenCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuiteTokenCreator.java
index 4bffeabd..261e0601 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuiteTokenCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinSuiteTokenCreator.java
@@ -50,7 +50,8 @@ public class WeixinSuiteTokenCreator implements TokenCreator {
obj = response.getAsJson();
Token token = new Token(obj.getString("suite_access_token"));
token.setExpiresIn(obj.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java
index 0ea26519..31240719 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java
@@ -60,7 +60,8 @@ public class WeixinTokenSuiteCreator implements TokenCreator {
obj = response.getAsJson();
Token token = new Token(obj.getString("access_token"));
token.setExpiresIn(obj.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java
index 4148afad..6476cf56 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java
@@ -52,7 +52,8 @@ public class WeixinJSTicketCreator implements TokenCreator {
JSONObject result = response.getAsJson();
Token token = new Token(result.getString("ticket"));
token.setExpiresIn(result.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinProviderTokenCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinProviderTokenCreator.java
index 358e7017..47cb6704 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinProviderTokenCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinProviderTokenCreator.java
@@ -53,7 +53,8 @@ public class WeixinProviderTokenCreator implements TokenCreator {
obj = response.getAsJson();
Token token = new Token(obj.getString("provider_access_token"));
token.setExpiresIn(obj.getIntValue("expires_in"));
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java
index 1a43ea0e..c54f60be 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java
@@ -50,7 +50,8 @@ public class WeixinTokenCreator implements TokenCreator {
WeixinResponse response = weixinExecutor.get(tokenUrl);
Token token = response.getAsObject(new TypeReference() {
});
- token.setTime(System.currentTimeMillis());
+ token.setCreateTime(System.currentTimeMillis());
+ token.setOriginalResult(response.getAsString());
return token;
}
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java
index 8f18cea5..cb37e67a 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java
@@ -29,6 +29,11 @@ public final class URLConsts {
*/
public static final String JS_TICKET_URL = BASE_URL
+ "/get_jsapi_ticket?access_token=%s";
+ /**
+ * 企业号获取ticket的url
+ */
+ public static final String TICKET_URL = BASE_URL
+ + "/ticket/get?access_token=%s&type=%s";
/**
* 企业号第三方应用套件获取token的url
*/
diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/DigestUtils.java
similarity index 97%
rename from weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java
rename to weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/DigestUtils.java
index 4251366e..6463b976 100644
--- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/DigestUtil.java
+++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/DigestUtils.java
@@ -12,7 +12,7 @@ import java.security.NoSuchAlgorithmException;
* @since JDK 1.6
* @see
*/
-public final class DigestUtil {
+public final class DigestUtils {
private static MessageDigest getDigest(final String algorithm) {
try {
diff --git a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/MessageUtil.java b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/MessageUtil.java
index 112e639c..decabf13 100644
--- a/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/MessageUtil.java
+++ b/weixin4j-server/src/main/java/com/foxinmy/weixin4j/util/MessageUtil.java
@@ -35,7 +35,7 @@ public final class MessageUtil {
for (String str : para) {
sb.append(str);
}
- return DigestUtil.SHA1(sb.toString());
+ return DigestUtils.SHA1(sb.toString());
}
/**