diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java
index bc0e81b9..a63a9b43 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/jssdk/JSSDKAPI.java
@@ -6,7 +6,7 @@ package com.foxinmy.weixin4j.jssdk;
* @className JSSDKAPI
* @author jy
* @date 2015年12月23日
- * @since JDK 1.7
+ * @since JDK 1.6
* @see
*/
public enum JSSDKAPI {
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
index c9a82225..401aeae7 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
@@ -3,7 +3,6 @@ package com.foxinmy.weixin4j.qy;
import java.io.InputStream;
import java.util.List;
-import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.weixin.JsonResult;
import com.foxinmy.weixin4j.model.Button;
@@ -199,9 +198,9 @@ public class WeixinProxy {
* @see com.foxinmy.weixin4j.tuple.File
* @see com.foxinmy.weixin4j.tuple.News
* @see com.foxinmy.weixin4j.tuple.MpNews
- * @see com.foxinmy.weixin4j.qy.message.NotifyMessage
+ * @see com.foxinmy.weixin4j.qy.model.IdParameter
*/
- public JSONObject sendNotifyMessage(NotifyMessage message)
+ public IdParameter sendNotifyMessage(NotifyMessage message)
throws WeixinException {
return notifyApi.sendNotifyMessage(message);
}
@@ -710,22 +709,19 @@ public class WeixinProxy {
}
/**
- * 根据code获取成员信息
+ * 根据code获取成员ID信息
*
* @param code
* 通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
- * @return { "UserId":"USERID", "DeviceId":"DEVICEID" } or
- * {"OpenId":"OPENID","DeviceId":"DEVICEID"}
+ * @return 两个元素的数组 第一个元素为userId或者openId
+ * 第二个元素为deviceId
* @see com.foxinmy.weixin4j.qy.api.UserApi
* @see
- * 企业获取code
- * @see
- * 根据code获取成员信息
+ * "http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3">
+ * oauth授权获取用户信息
* @throws WeixinException
*/
- public JSONObject getUserIdByCode(String code) throws WeixinException {
+ public String[] getUserIdByCode(String code) throws WeixinException {
return userApi.getUserIdByCode(code);
}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java
index 95427376..fb5e18b8 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java
@@ -1,5 +1,8 @@
package com.foxinmy.weixin4j.qy.api;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
@@ -68,8 +71,9 @@ public class NotifyApi extends QyApi {
* @see com.foxinmy.weixin4j.tuple.News
* @see com.foxinmy.weixin4j.tuple.MpNews
* @see com.foxinmy.weixin4j.qy.message.NotifyMessage
+ * @see com.foxinmy.weixin4j.qy.model.IdParameter
*/
- public JSONObject sendNotifyMessage(NotifyMessage message)
+ public IdParameter sendNotifyMessage(NotifyMessage message)
throws WeixinException {
NotifyTuple tuple = message.getTuple();
Map target = message.getTarget().getParameter();
@@ -87,8 +91,29 @@ public class NotifyApi extends QyApi {
WeixinResponse response = weixinExecutor.post(
String.format(message_send_uri, token.getAccessToken()),
obj.toJSONString());
-
- return response.getAsJson();
+ obj = response.getAsJson();
+ IdParameter idParameter = new IdParameter();
+ if (obj.containsKey("invaliduser")) {
+ idParameter.setUserIds(Arrays.asList(obj.getString("invalidlist")
+ .split(IdParameter.SEPARATORS)));
+ }
+ if (obj.containsKey("invalidparty")) {
+ List partyIds = new ArrayList();
+ for (String id : obj.getString("invalidlist").split(
+ IdParameter.SEPARATORS)) {
+ partyIds.add(Integer.parseInt(id));
+ }
+ idParameter.setPartyIds(partyIds);
+ }
+ if (obj.containsKey("invalidtag")) {
+ List tagIds = new ArrayList();
+ for (String id : obj.getString("invalidtag").split(
+ IdParameter.SEPARATORS)) {
+ tagIds.add(Integer.parseInt(id));
+ }
+ idParameter.setPartyIds(tagIds);
+ }
+ return idParameter;
}
/**
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java
index 76b324c1..5b32e94e 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java
@@ -205,7 +205,7 @@ public class TagApi extends QyApi {
IdParameter idParameter = new IdParameter();
if (obj.containsKey("invalidlist")) {
idParameter.setUserIds(Arrays.asList(obj.getString("invalidlist")
- .split(String.valueOf(IdParameter.SEPARATOR))));
+ .split(IdParameter.SEPARATORS)));
}
if (obj.containsKey("partylist")) {
idParameter.setPartyIds(JSON.parseArray(obj.getString("partylist"),
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java
index f5e92d41..fda35be5 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java
@@ -17,6 +17,7 @@ import com.foxinmy.weixin4j.qy.type.InviteType;
import com.foxinmy.weixin4j.qy.type.UserStatus;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.util.NameValue;
+import com.foxinmy.weixin4j.util.StringUtil;
/**
* 成员API
@@ -165,7 +166,7 @@ public class UserApi extends QyApi {
}
/**
- * code获取userid(管理员须拥有agent的使用权限;agentid必须和跳转链接时所在的企业应用ID相同。)
+ * 根据code获取用户信息
*
* @param code
* 通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
@@ -174,15 +175,45 @@ public class UserApi extends QyApi {
* @see {@link #getUser(String)}
* @see {@link #getUserIdByCode(String,int)}
* @see
- * 企业获取code
- * @see
- * 根据code获取成员信息
+ * "http://qydev.weixin.qq.com/wiki/index.php?title=OAuth%E9%AA%8C%E8%AF%81%E6%8E%A5%E5%8F%A3">
+ * oauth授权获取用户信息
* @throws WeixinException
*/
public User getUserByCode(String code) throws WeixinException {
- return getUser(getUserIdByCode(code).getString("UserId"));
+ String[] userIds = getUserIdByCode(code);
+ if (Boolean.parseBoolean(userIds[2])) {
+ return getUser(openid2userid(userIds[0]));
+ } else {
+ return getUser(userIds[0]);
+ }
+ }
+
+ /**
+ * 根据code获取成员ID信息
+ *
+ * @param code
+ * 通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
+ * @return 两个元素的数组 第一个元素为userId或者openId
+ * 第二个元素为deviceId
+ * @see
+ * oauth授权获取用户信息
+ * @throws WeixinException
+ */
+ public String[] getUserIdByCode(String code) throws WeixinException {
+ String user_getid_uri = getRequestUri("user_getid_uri");
+ Token token = tokenHolder.getToken();
+ WeixinResponse response = weixinExecutor.get(String.format(
+ user_getid_uri, token.getAccessToken(), code));
+ JSONObject result = response.getAsJson();
+ String userId = result.getString("UserId");
+ boolean need2 = false;
+ if (StringUtil.isBlank(userId)) {
+ userId = result.getString("OpenId");
+ need2 = true;
+ }
+ return new String[] { userId, result.getString("DeviceId"),
+ Boolean.toString(need2) };
}
/**
@@ -208,28 +239,6 @@ public class UserApi extends QyApi {
return JSON.parseObject(response.getAsString(), OUserInfo.class);
}
- /**
- * 根据code获取成员信息
- *
- * @param code
- * 通过员工授权获取到的code,每次员工授权带上的code将不一样,code只能使用一次,5分钟未被使用自动过期
- * @return { "UserId":"USERID", "DeviceId":"DEVICEID" }
- * @see
- * 企业获取code
- * @see
- * 根据code获取成员信息
- * @throws WeixinException
- */
- public JSONObject getUserIdByCode(String code) throws WeixinException {
- String user_getid_uri = getRequestUri("user_getid_uri");
- Token token = tokenHolder.getToken();
- WeixinResponse response = weixinExecutor.get(String.format(
- user_getid_uri, token.getAccessToken(), code));
- return response.getAsJson();
- }
-
/**
* 获取部门成员
*
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java
index 478f7bbe..1f02dbf2 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/model/IdParameter.java
@@ -25,6 +25,8 @@ public class IdParameter implements Serializable {
public static final char SEPARATOR = '|';
+ public static final String SEPARATORS = String.valueOf(SEPARATOR);
+
@JSONField(name = "user")
private List userIds;
@JSONField(name = "party")
diff --git a/weixin4j-qy/src/test/java/com/foxinmy/weixin4j/qy/test/NotifyTest.java b/weixin4j-qy/src/test/java/com/foxinmy/weixin4j/qy/test/NotifyTest.java
index 9ad80536..cfbec395 100644
--- a/weixin4j-qy/src/test/java/com/foxinmy/weixin4j/qy/test/NotifyTest.java
+++ b/weixin4j-qy/src/test/java/com/foxinmy/weixin4j/qy/test/NotifyTest.java
@@ -1,14 +1,12 @@
package com.foxinmy.weixin4j.qy.test;
-import junit.framework.Assert;
-
import org.junit.Before;
import org.junit.Test;
-import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.qy.api.NotifyApi;
import com.foxinmy.weixin4j.qy.message.NotifyMessage;
+import com.foxinmy.weixin4j.qy.model.IdParameter;
import com.foxinmy.weixin4j.tuple.File;
import com.foxinmy.weixin4j.tuple.Image;
import com.foxinmy.weixin4j.tuple.MpNews;
@@ -88,8 +86,8 @@ public class NotifyTest extends TokenTest {
@Test
public void send1() throws WeixinException {
Text text = new Text("this is a text");
- JSONObject result = notifyApi.sendNotifyMessage(new NotifyMessage(1,
+ IdParameter result = notifyApi.sendNotifyMessage(new NotifyMessage(1,
text));
- Assert.assertEquals(0, result.getIntValue("errcode"));
+ System.err.println(result);
}
}