diff --git a/.gitignore b/.gitignore
index c880f664..87bd9366 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/README.md b/README.md
index c229030c..38d34923 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@ weixin4j
2.API的成功调用依赖于正确的appid等数据,填写格式说明见API工程下的README.md文件.
-3.如需使用netty服务,可以在相应的action中实现自己的具体业务,打包后放到`正确的目录`下解压`weixin-*-server-bin.zip`执行`sh startup.sh start`便可启动服务.
+3.如需使用netty服务,可以在相应的action中实现自己的具体业务,打包后启动服务即可,具体详情可参考README.
如何获取
-------
diff --git a/weixin4j-base/.gitignore b/weixin4j-base/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-base/.gitignore
+++ b/weixin4j-base/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
index 21affe2c..dad31b48 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
@@ -26,7 +26,8 @@ import com.foxinmy.weixin4j.xml.XStream;
* @since JDK 1.7
* @see 微信公众平台获取token说明
- * @see 微信企业号获取token说明
+ * @see 微信企业号获取token说明
* @see com.foxinmy.weixin4j.model.Token
*/
public class FileTokenHolder extends AbstractTokenHolder {
@@ -54,9 +55,9 @@ public class FileTokenHolder extends AbstractTokenHolder {
@Override
public Token getToken() throws WeixinException {
String id = weixinAccount.getId();
- if (StringUtils.isBlank(id) || StringUtils.isBlank(weixinAccount.getSecret())) {
- throw new IllegalArgumentException(
- "id or secret not be null!");
+ if (StringUtils.isBlank(id)
+ || StringUtils.isBlank(weixinAccount.getSecret())) {
+ throw new IllegalArgumentException("id or secret not be null!");
}
File token_file = new File(String.format("%s/token_%s.xml",
ConfigUtil.getValue("token_path"), id));
@@ -67,13 +68,11 @@ public class FileTokenHolder extends AbstractTokenHolder {
if (token_file.exists()) {
token = XStream.get(new FileInputStream(token_file),
Token.class);
- long expise_time = token.getTime()
- + (token.getExpiresIn() * 1000) - 3;
- if (expise_time > now_time) {
+ long expire_time = token.getTime()
+ + (token.getExpiresIn() * 1000) - 2;
+ if (expire_time > now_time) {
return token;
}
- } else {
- token_file.createNewFile();
}
Response response = request.get(weixinAccount.getTokenUrl());
token = response.getAsObject(new TypeReference() {
@@ -81,7 +80,7 @@ public class FileTokenHolder extends AbstractTokenHolder {
token.setTime(now_time);
XStream.to(token, new FileOutputStream(token_file));
} catch (IOException e) {
- throw new WeixinException("-1", "IO ERROR");
+ throw new WeixinException(e.getMessage());
}
return token;
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md
index d674ea9f..bab679c0 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md
@@ -1 +1,7 @@
-Token的实现
\ No newline at end of file
+包含token的实现
+
+FileTokenHolder.java 基于文件保存的token实现
+
+RedisTokenHolder.java 基于redis保存的token实现(推荐)
+
+当然自己也可实现token的存取,继承`AbstractTokenHolder`实现`getToken`方法
\ No newline at end of file
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
index 2105a3a7..36652f30 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
@@ -1,5 +1,7 @@
package com.foxinmy.weixin4j.token;
+import java.util.Calendar;
+
import org.apache.commons.lang3.StringUtils;
import redis.clients.jedis.Jedis;
@@ -70,19 +72,19 @@ public class RedisTokenHolder extends AbstractTokenHolder {
Jedis jedis = null;
try {
jedis = jedisPool.getResource();
+ Calendar now = Calendar.getInstance();
String key = String.format("token:%s", id);
String accessToken = jedis.get(key);
if (StringUtils.isBlank(accessToken)) {
token = request.get(weixinAccount.getTokenUrl()).getAsObject(
new TypeReference() {
});
- jedis.setex(key, token.getExpiresIn() - 3,
+ jedis.setex(key, token.getExpiresIn(),
token.getAccessToken());
- token.setTime(System.currentTimeMillis());
+ token.setTime(now.getTimeInMillis());
} else {
token = new Token();
token.setAccessToken(accessToken);
- token.setExpiresIn(jedis.ttl(key).intValue());
}
} catch (JedisException e) {
jedisPool.returnBrokenResource(jedis);
diff --git a/weixin4j-mp/.gitignore b/weixin4j-mp/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-mp/.gitignore
+++ b/weixin4j-mp/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-mp/weixin4j-mp-api/.gitignore b/weixin4j-mp/weixin4j-mp-api/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-mp/weixin4j-mp-api/.gitignore
+++ b/weixin4j-mp/weixin4j-mp-api/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-mp/weixin4j-mp-server/.gitignore b/weixin4j-mp/weixin4j-mp-server/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-mp/weixin4j-mp-server/.gitignore
+++ b/weixin4j-mp/weixin4j-mp-server/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-mp/weixin4j-mp-server/README.md b/weixin4j-mp/weixin4j-mp-server/README.md
index 00e78f64..1ea63e6d 100644
--- a/weixin4j-mp/weixin4j-mp-server/README.md
+++ b/weixin4j-mp/weixin4j-mp-server/README.md
@@ -40,9 +40,16 @@ weixin4j-mp-server
bill_path=/tmp/weixin/bill
ca_file=/tmp/weixin/xxxxx.p12 | xxxxx.pfx
-2.`mvn package`,得到一个zip的压缩包,解压到启动目录(见`src/main/startup.sh/APP_HOME`)
+2.在对应的action中实现自己的具体业务 如 TextAction 则表示收到文本消息
-3.启动netty服务(`com.foxinmy.weixin4j.mp.startup.WeixinMpServerBootstrap`)
+ @Override
+ public ResponseMessage execute(TextMessage inMessage) {
+ return new ResponseMessage(new Text("Hello World!"), inMessage);
+ }
+
+3.`mvn package`,得到一个zip的压缩包,解压到启动目录(见`src/main/startup.sh/APP_HOME`)
+
+4.启动netty服务(`com.foxinmy.weixin4j.mp.startup.WeixinMpServerBootstrap`)
sh startup.sh start
diff --git a/weixin4j-qy/.gitignore b/weixin4j-qy/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-qy/.gitignore
+++ b/weixin4j-qy/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-qy/weixin4j-qy-api/.gitignore b/weixin4j-qy/weixin4j-qy-api/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-qy/weixin4j-qy-api/.gitignore
+++ b/weixin4j-qy/weixin4j-qy-api/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-qy/weixin4j-qy-server/.gitignore b/weixin4j-qy/weixin4j-qy-server/.gitignore
index c880f664..87bd9366 100644
--- a/weixin4j-qy/weixin4j-qy-server/.gitignore
+++ b/weixin4j-qy/weixin4j-qy-server/.gitignore
@@ -17,6 +17,10 @@ hs_err_pid*
/.classpath
/.tomcatplugin
+# idea ignore
+/.idea
+*.iml
+
# maven ignore
target/*
diff --git a/weixin4j-qy/weixin4j-qy-server/README.md b/weixin4j-qy/weixin4j-qy-server/README.md
index def4a3ad..09e4762c 100644
--- a/weixin4j-qy/weixin4j-qy-server/README.md
+++ b/weixin4j-qy/weixin4j-qy-server/README.md
@@ -30,9 +30,16 @@ weixin4j-qy-server
token_path=/tmp/weixin/token
media_path=/tmp/weixin/media
-2.`mvn package`,得到一个zip的压缩包,解压到启动目录(见`src/main/startup.sh/APP_HOME`)
+2.在对应的action中实现自己的具体业务 如 TextAction 则表示收到文本消息
-3.启动netty服务(`com.foxinmy.weixin4j.mp.startup.WeixinQyServerBootstrap`)
+ @Override
+ public ResponseMessage execute(TextMessage inMessage) {
+ return new ResponseMessage(new Text("Hello World!"), inMessage);
+ }
+
+3.`mvn package`,得到一个zip的压缩包,解压到启动目录(见`src/main/startup.sh/APP_HOME`)
+
+4.启动netty服务(`com.foxinmy.weixin4j.mp.startup.WeixinQyServerBootstrap`)
sh startup.sh start