diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
index 296cd71a..69814299 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
@@ -864,6 +864,43 @@ public class WeixinProxy {
return userApi.getUser(openId, lang);
}
+ /**
+ * 批量获取用户信息
+ *
+ * @param openIds
+ * 用户ID
+ * @return 用户列表
+ * @see 获取用户信息
+ * @see com.foxinmy.weixin4j.mp.model.User
+ * @see com.foxinmy.weixin4j.mp.api.UserApi
+ * @throws WeixinException
+ * @see {@link #getUsers(Lang,String[])}
+ */
+ public List getUsers(String... openIds) throws WeixinException {
+ return userApi.getUsers(openIds);
+ }
+
+ /**
+ * 批量获取用户信息
+ *
+ * @param lang
+ * 国家地区语言版本
+ * @param openIds
+ * 用户ID
+ * @return 用户列表
+ * @see 获取用户信息
+ * @see com.foxinmy.weixin4j.mp.type.Lang
+ * @see com.foxinmy.weixin4j.mp.model.User
+ * @see com.foxinmy.weixin4j.mp.api.UserApi
+ * @throws WeixinException
+ */
+ public List getUsers(Lang lang, String... openIds)
+ throws WeixinException {
+ return userApi.getUsers(lang, openIds);
+ }
+
/**
* 获取用户一定数量(10000)的关注者列表
*
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
index 9ec4e63d..ed06c4ac 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
@@ -39,9 +39,6 @@ public class UserApi extends MpApi {
* 用户对应的ID
* @return 用户对象
* @throws WeixinException
- * @see 获取用户信息
- * @see com.foxinmy.weixin4j.mp.model.User
* @see {@link #getUser(String,Lang)}
*/
public User getUser(String openId) throws WeixinException {
@@ -69,13 +66,64 @@ public class UserApi extends MpApi {
public User getUser(String openId, Lang lang) throws WeixinException {
String user_info_uri = getRequestUri("api_user_info_uri");
Token token = tokenHolder.getToken();
- WeixinResponse response = weixinExecutor.get(String.format(user_info_uri,
- token.getAccessToken(), openId, lang.name()));
+ WeixinResponse response = weixinExecutor.get(String.format(
+ user_info_uri, token.getAccessToken(), openId, lang.name()));
return response.getAsObject(new TypeReference() {
});
}
+ /**
+ * 批量获取用户信息
+ *
+ * @param openIds
+ * 用户ID
+ * @return 用户列表
+ * @see 获取用户信息
+ * @see com.foxinmy.weixin4j.mp.model.User
+ * @throws WeixinException
+ * @see {@link #getUsers(Lang,String[])}
+ */
+ public List getUsers(String... openIds) throws WeixinException {
+ return getUsers(Lang.zh_CN, openIds);
+ }
+
+ /**
+ * 批量获取用户信息
+ *
+ * @param lang
+ * 国家地区语言版本
+ * @param openIds
+ * 用户ID
+ * @return 用户列表
+ * @see 获取用户信息
+ * @see com.foxinmy.weixin4j.mp.type.Lang
+ * @see com.foxinmy.weixin4j.mp.model.User
+ * @throws WeixinException
+ */
+ public List getUsers(Lang lang, String... openIds)
+ throws WeixinException {
+ String api_users_info_uri = getRequestUri("api_users_info_uri");
+ StringBuilder parameter = new StringBuilder();
+ parameter.append("{\"user_list\": [");
+ for (String openId : openIds) {
+ parameter.append("{\"openid\": \"").append(openId).append("\"");
+ parameter.append(",\"lang\": \"").append(lang.name()).append("\"")
+ .append("},");
+ }
+ parameter.delete(parameter.length() - 1, parameter.length());
+ parameter.append("]}");
+ Token token = tokenHolder.getToken();
+ WeixinResponse response = weixinExecutor.post(
+ String.format(api_users_info_uri, token.getAccessToken()),
+ parameter.toString());
+
+ return JSON.parseArray(
+ response.getAsJson().getString("user_info_list"), User.class);
+ }
+
/**
* 获取用户一定数量(10000)的关注者列表
*
@@ -90,8 +138,9 @@ public class UserApi extends MpApi {
public Following getFollowing(String nextOpenId) throws WeixinException {
String following_uri = getRequestUri("following_uri");
Token token = tokenHolder.getToken();
- WeixinResponse response = weixinExecutor.get(String.format(following_uri,
- token.getAccessToken(), nextOpenId == null ? "" : nextOpenId));
+ WeixinResponse response = weixinExecutor.get(String.format(
+ following_uri, token.getAccessToken(), nextOpenId == null ? ""
+ : nextOpenId));
Following following = response
.getAsObject(new TypeReference() {
diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
index 42f621c9..107036ac 100644
--- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
+++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
@@ -23,6 +23,8 @@ sns_user_info_uri=https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=
# \u76f4\u63a5\u83b7\u53d6\u7528\u6237\u4fe1\u606f
api_user_info_uri={api_cgi_url}/user/info?access_token=%s&openid=%s&lang=%s
+# \u6279\u91cf\u83b7\u53d6\u7528\u6237\u4fe1\u606f
+api_users_info_uri={api_cgi_url}/user/info/batchget?access_token=%s
# \u83b7\u53d6token
api_token_uri={api_cgi_url}/token?grant_type=client_credential&appid=%s&secret=%s
# \u83b7\u53d6\u4e8c\u7ef4\u7801