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