diff --git a/README.md b/README.md
index 1a482b5d..5eb81036 100644
--- a/README.md
+++ b/README.md
@@ -197,6 +197,12 @@ netty的代码没有放到maven中心仓库,也没什么意义,因为最终需
+ clear code with findbugs plugin
+ change the version to 1.1
+
+* 2014-12-28
+
+ + **weixin4j-qy**:增加用户进入应用的callback事件
+
+ + **weixin4j-qy**:增加批量获取用户详情的接口
接下来
------
diff --git a/pom.xml b/pom.xml
index 41366489..01f3994e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.foxinmy
weixin4j
- 1.1
+ 1.2-SNAPSHOT
pom
weixin4j
https://github.com/foxinmy/weixin4j
diff --git a/weixin4j-base/pom.xml b/weixin4j-base/pom.xml
index 624fd516..7f57ad68 100644
--- a/weixin4j-base/pom.xml
+++ b/weixin4j-base/pom.xml
@@ -1,11 +1,10 @@
-
+
4.0.0
com.foxinmy
weixin4j
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-base
weixin4j-base
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/BaseMsg.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/BaseMsg.java
index ba508f91..94f95021 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/BaseMsg.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/BaseMsg.java
@@ -34,7 +34,7 @@ public class BaseMsg implements Serializable {
}
public BaseMsg(String msgType) {
- this(msgType, null, null);
+ this.msgType = msgType;
}
public BaseMsg(String toUserName, String fromUserName) {
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/EnterAgentEventMessage.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/EnterAgentEventMessage.java
new file mode 100644
index 00000000..b22a5410
--- /dev/null
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/EnterAgentEventMessage.java
@@ -0,0 +1,37 @@
+package com.foxinmy.weixin4j.msg.event;
+
+import com.foxinmy.weixin4j.type.EventType;
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+/**
+ * 用户进入应用的事件推送(企业号)本事件只有在应用的回调模式中打开上报开关时上报
+ *
+ * @className EnterAgentEventMessage
+ * @author jy
+ * @date 2014年12月28日
+ * @since JDK 1.7
+ * @see用户进入应用的事件推送
+ */
+public class EnterAgentEventMessage extends EventMessage {
+
+ private static final long serialVersionUID = 7675732524832500820L;
+
+ public EnterAgentEventMessage() {
+ super(EventType.enter_agent);
+ }
+
+ @XStreamAlias("EventKey")
+ private String eventKey; // 事件KEY值,与自定义菜单接口中KEY值对应
+
+ public String getEventKey() {
+ return eventKey;
+ }
+
+ @Override
+ public String toString() {
+ return "EnterAgentEventMessage [eventKey=" + eventKey + ", "
+ + super.toString() + "]";
+ }
+}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/TemplatesendjobfinishMessage.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/TemplatesendjobfinishMessage.java
index 08f6314e..9fdfc1cd 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/TemplatesendjobfinishMessage.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/TemplatesendjobfinishMessage.java
@@ -4,7 +4,7 @@ import com.foxinmy.weixin4j.type.EventType;
import com.thoughtworks.xstream.annotations.XStreamAlias;
/**
- * 模板消息事件推送
+ * 模板消息事件推送(公众平台)
*
* @className TemplatesendjobfinishMessage
* @author jy
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/menu/MenuEventMessage.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/menu/MenuEventMessage.java
index cacb2acf..83c4258a 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/menu/MenuEventMessage.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/msg/event/menu/MenuEventMessage.java
@@ -37,6 +37,7 @@ public class MenuEventMessage extends EventMessage {
@Override
public String toString() {
- return "eventKey=" + eventKey + ", " + super.toString();
+ return "MenuEventMessage [eventKey=" + eventKey + ", "
+ + super.toString() + "]";
}
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/ResponseMessage.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/ResponseMessage.java
index 6e5dd1c4..dfed1d73 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/ResponseMessage.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/ResponseMessage.java
@@ -8,6 +8,7 @@ import com.foxinmy.weixin4j.msg.model.Base;
import com.foxinmy.weixin4j.msg.model.News;
import com.foxinmy.weixin4j.msg.model.Responseable;
import com.foxinmy.weixin4j.util.ClassUtil;
+import com.foxinmy.weixin4j.xml.TextConverter;
import com.foxinmy.weixin4j.xml.XmlStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@@ -107,10 +108,7 @@ public class ResponseMessage extends BaseMsg {
@Override
public String toString() {
- return "ResponseMessage [" + box.toString() + ", attach=" + attach
- + ", getToUserName()=" + getToUserName()
- + ", getFromUserName()=" + getFromUserName()
- + ", getCreateTime()=" + getCreateTime() + ", getMsgType()="
- + getMsgType() + "]";
+ return "ResponseMessage [ " + super.toString() + ", attach=" + attach
+ + ", box=" + box + "]";
}
}
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/EventType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/EventType.java
index f648b3a2..bb1bb3e8 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/EventType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/EventType.java
@@ -1,5 +1,6 @@
package com.foxinmy.weixin4j.type;
+import com.foxinmy.weixin4j.msg.event.EnterAgentEventMessage;
import com.foxinmy.weixin4j.msg.event.EventMessage;
import com.foxinmy.weixin4j.msg.event.LocationEventMessage;
import com.foxinmy.weixin4j.msg.event.MassEventMessage;
@@ -31,7 +32,7 @@ public enum EventType {
MenuLocationEventMessage.class), click(MenuEventMessage.class), location(
LocationEventMessage.class),masssendjobfinish(
MassEventMessage.class), templatesendjobfinish(
- TemplatesendjobfinishMessage.class);
+ TemplatesendjobfinishMessage.class),enter_agent(EnterAgentEventMessage.class);
private Class extends EventMessage> eventClass;
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/TextConverter.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/TextConverter.java
similarity index 93%
rename from weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/TextConverter.java
rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/TextConverter.java
index 012a5800..93baaf7b 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/response/TextConverter.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/xml/TextConverter.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.response;
+package com.foxinmy.weixin4j.xml;
import com.foxinmy.weixin4j.msg.model.Text;
import com.thoughtworks.xstream.converters.SingleValueConverter;
diff --git a/weixin4j-mp/pom.xml b/weixin4j-mp/pom.xml
index dacef773..b94227b8 100644
--- a/weixin4j-mp/pom.xml
+++ b/weixin4j-mp/pom.xml
@@ -4,7 +4,7 @@
com.foxinmy
weixin4j
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-mp
weixin4j-mp
diff --git a/weixin4j-mp/weixin4j-mp-api/pom.xml b/weixin4j-mp/weixin4j-mp-api/pom.xml
index 27253a2e..9952839b 100644
--- a/weixin4j-mp/weixin4j-mp-api/pom.xml
+++ b/weixin4j-mp/weixin4j-mp-api/pom.xml
@@ -1,11 +1,10 @@
-
+
4.0.0
com.foxinmy
weixin4j-mp
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-mp-api
weixin4j-mp-api
diff --git a/weixin4j-mp/weixin4j-mp-server/pom.xml b/weixin4j-mp/weixin4j-mp-server/pom.xml
index c33710d3..f4f4c897 100644
--- a/weixin4j-mp/weixin4j-mp-server/pom.xml
+++ b/weixin4j-mp/weixin4j-mp-server/pom.xml
@@ -1,11 +1,10 @@
-
+
4.0.0
com.foxinmy
weixin4j-mp
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-mp-server
weixin4j-mp-server
diff --git a/weixin4j-qy/README.md b/weixin4j-qy/README.md
index b37856ed..f9b4532a 100644
--- a/weixin4j-qy/README.md
+++ b/weixin4j-qy/README.md
@@ -88,3 +88,9 @@ weixin4j-qy
* 2014-11-24
+ **weixin4j-qy-server**: 新增netty服务与消息分发
+
+ * 2014-12-28
+
+ + **weixin4j-qy**:增加用户进入应用的callback事件
+
+ + **weixin4j-qy**:增加批量获取用户详情的接口
diff --git a/weixin4j-qy/pom.xml b/weixin4j-qy/pom.xml
index ecc3f8f9..93018719 100644
--- a/weixin4j-qy/pom.xml
+++ b/weixin4j-qy/pom.xml
@@ -4,7 +4,7 @@
com.foxinmy
weixin4j
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-qy
weixin4j-qy
diff --git a/weixin4j-qy/weixin4j-qy-api/README.md b/weixin4j-qy/weixin4j-qy-api/README.md
index d31d778b..2461187e 100644
--- a/weixin4j-qy/weixin4j-qy-api/README.md
+++ b/weixin4j-qy/weixin4j-qy-api/README.md
@@ -57,3 +57,7 @@ weixin.properties说明
+ 新增`用户管理`接口
+ 新增`标签管理`接口
+
+* 2014-12-28
+
+ + 增加`批量获取用户详情`的接口
diff --git a/weixin4j-qy/weixin4j-qy-api/pom.xml b/weixin4j-qy/weixin4j-qy-api/pom.xml
index 14bd7bf8..63d52783 100644
--- a/weixin4j-qy/weixin4j-qy-api/pom.xml
+++ b/weixin4j-qy/weixin4j-qy-api/pom.xml
@@ -1,11 +1,10 @@
-
+
4.0.0
com.foxinmy
weixin4j-qy
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-qy-api
weixin4j-qy-api
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
index 1867b0d5..6c67c5b1 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
@@ -185,6 +185,8 @@ public class WeixinProxy {
* 是否递归获取子部门下面的成员 非必须
* @param userStatus
* 成员状态 status可叠加 非必须
+ * @param findDetail
+ * 是否获取详细信息
* @see com.foxinmy.weixin4j.qy.model.User
* @see 获取部门成员说明
@@ -193,8 +195,8 @@ public class WeixinProxy {
* @throws WeixinException
*/
public List listUser(int departId, boolean fetchChild,
- UserStatus userStatus) throws WeixinException {
- return userApi.listUser(departId, fetchChild, userStatus);
+ UserStatus userStatus, boolean findDetail) throws WeixinException {
+ return userApi.listUser(departId, fetchChild, userStatus, findDetail);
}
/**
@@ -244,7 +246,8 @@ public class WeixinProxy {
/**
* 更新标签(管理组必须是指定标签的创建者)
*
- * @param tag 标签信息
+ * @param tag
+ * 标签信息
* @see 更新标签说明
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java
index aac4cab8..1b114a4a 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java
@@ -1,8 +1,10 @@
package com.foxinmy.weixin4j.qy.api;
+import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.JsonResult;
@@ -132,6 +134,8 @@ public class UserApi extends QyApi {
* 是否递归获取子部门下面的成员 非必须
* @param userStatus
* 成员状态 status可叠加 非必须
+ * @param findDetail
+ * 是否获取详细信息
* @see com.foxinmy.weixin4j.qy.model.User
* @see 获取部门成员说明
@@ -139,14 +143,30 @@ public class UserApi extends QyApi {
* @throws WeixinException
*/
public List listUser(int departId, boolean fetchChild,
- UserStatus userStatus) throws WeixinException {
- String user_list_uri = getRequestUri("user_list_uri");
+ UserStatus userStatus, boolean findDetail) throws WeixinException {
+ String user_list_uri = findDetail ? getRequestUri("user_list_uri")
+ : getRequestUri("user_slist_uri");
Token token = tokenHolder.getToken();
Response response = request.post(String.format(user_list_uri,
token.getAccessToken(), departId, fetchChild ? 1 : 0,
userStatus.getVal()));
- return JSON.parseArray(response.getAsJson().getString("userlist"),
- User.class);
+ List list = null;
+ if (findDetail) {
+ JSONArray arrays = response.getAsJson().getJSONArray("userlist");
+ list = new ArrayList(arrays.size());
+ for (int i = 0; i < arrays.size(); i++) {
+ JSONObject obj = arrays.getJSONObject(i);
+ Object attrs = obj.getJSONObject("extattr").remove("attrs");
+ if (attrs != null) {
+ obj.put("extattr", attrs);
+ }
+ list.add(JSON.toJavaObject(obj, User.class));
+ }
+ } else {
+ list = JSON.parseArray(response.getAsJson().getString("userlist"),
+ User.class);
+ }
+ return list;
}
/**
@@ -159,7 +179,7 @@ public class UserApi extends QyApi {
* @throws WeixinException
*/
public List listUser(int departId) throws WeixinException {
- return listUser(departId, false, UserStatus.BOTH);
+ return listUser(departId, false, UserStatus.BOTH, false);
}
/**
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
index 77c63c72..ef58b8ea 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
@@ -22,7 +22,9 @@ user_get_uri={api_base_url}/user/get?access_token=%s&userid=%s
# code\u83b7\u53d6\u6210\u5458\u4fe1\u606f
user_getid_uri={api_base_url}/getuserinfo?access_token=%s&code=%s&agentid=%d
# \u83b7\u53d6\u90e8\u95e8\u6210\u5458
-user_list_uri={api_base_url}/user/simplelist?access_token=%s&department_id=%d&fetch_child=%d&status=%d
+user_slist_uri={api_base_url}/user/simplelist?access_token=%s&department_id=%d&fetch_child=%d&status=%d
+# \u83b7\u53d6\u90e8\u95e8\u6210\u5458(\u8be6\u60c5)
+user_list_uri={api_base_url}/user/list?access_token=%s&department_id=%d&fetch_child=%d&status=%d
# \u5220\u9664\u6210\u5458
user_delete_uri={api_base_url}/user/delete?access_token=%s&userid=%s
# \u6210\u5458\u4e8c\u6b21\u9a8c\u8bc1\u6210\u529f\u65f6\u8c03\u7528
diff --git a/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java b/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java
index 8e75fabe..f6e99c30 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java
+++ b/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/UserTest.java
@@ -10,6 +10,7 @@ import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.JsonResult;
import com.foxinmy.weixin4j.qy.api.UserApi;
import com.foxinmy.weixin4j.qy.model.User;
+import com.foxinmy.weixin4j.qy.type.UserStatus;
/**
* 部门API测试
@@ -57,7 +58,10 @@ public class UserTest extends TokenTest {
@Test
public void list() throws WeixinException {
- List userList = userApi.listUser(1);
+ List userList = userApi.listUser(1, true, UserStatus.BOTH, true);
+ Assert.assertFalse(userList.isEmpty());
+ System.out.println(userList);
+ userList = userApi.listUser(1);
Assert.assertFalse(userList.isEmpty());
System.out.println(userList);
}
diff --git a/weixin4j-qy/weixin4j-qy-server/README.md b/weixin4j-qy/weixin4j-qy-server/README.md
index 09e4762c..59517e61 100644
--- a/weixin4j-qy/weixin4j-qy-server/README.md
+++ b/weixin4j-qy/weixin4j-qy-server/README.md
@@ -51,4 +51,8 @@ weixin4j-qy-server
* 2014-11-24
- + 新增netty服务与消息分发
\ No newline at end of file
+ + 新增netty服务与消息分发
+
+* 2014-12-28
+
+ + 增加用户进入应用的callback事件
\ No newline at end of file
diff --git a/weixin4j-qy/weixin4j-qy-server/pom.xml b/weixin4j-qy/weixin4j-qy-server/pom.xml
index b8888293..c276e976 100644
--- a/weixin4j-qy/weixin4j-qy-server/pom.xml
+++ b/weixin4j-qy/weixin4j-qy-server/pom.xml
@@ -4,7 +4,7 @@
com.foxinmy
weixin4j-qy
- 1.1-SNAPSHOT
+ 1.2-SNAPSHOT
weixin4j-qy-server
weixin4j-qy-server
diff --git a/weixin4j-qy/weixin4j-qy-server/src/main/java/com/foxinmy/weixin4j/qy/action/event/EnterAgentAction.java b/weixin4j-qy/weixin4j-qy-server/src/main/java/com/foxinmy/weixin4j/qy/action/event/EnterAgentAction.java
new file mode 100644
index 00000000..dd23c736
--- /dev/null
+++ b/weixin4j-qy/weixin4j-qy-server/src/main/java/com/foxinmy/weixin4j/qy/action/event/EnterAgentAction.java
@@ -0,0 +1,24 @@
+package com.foxinmy.weixin4j.qy.action.event;
+
+import com.foxinmy.weixin4j.action.DebugAction;
+import com.foxinmy.weixin4j.action.mapping.ActionAnnotation;
+import com.foxinmy.weixin4j.msg.event.EnterAgentEventMessage;
+import com.foxinmy.weixin4j.type.EventType;
+import com.foxinmy.weixin4j.type.MessageType;
+
+/**
+ * 用户进入应用的事件推送
+ *
+ * @className
+ * @author jy
+ * @date 2014年12月28日
+ * @since JDK 1.7
+ * @see com.foxinmy.weixin4j.msg.event.EnterAgentEventMessage
+ * @see用户进入应用的事件推送
+ */
+@ActionAnnotation(msgType = MessageType.event, eventType = { EventType.enter_agent })
+public class EnterAgentAction extends DebugAction {
+
+}