diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java index a071b0a2..22629d83 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpUserService.java @@ -1,6 +1,9 @@ package me.chanjar.weixin.mp.api; +import java.util.List; + import me.chanjar.weixin.common.exception.WxErrorException; +import me.chanjar.weixin.mp.bean.WxMpUserQuery; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUserList; @@ -29,17 +32,37 @@ public interface WxMpUserService { * * * @param openid 用户openid - * @param lang 语言,zh_CN 简体(默认),zh_TW 繁体,en 英语 + * @param lang 语言,zh_CN 简体(默认),zh_TW 繁体,en 英语 */ WxMpUser userInfo(String openid, String lang) throws WxErrorException; + /** + *
+   * 获取用户基本信息列表
+   * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=批量获取用户基本信息
+   * 
+ * + * @param openid 用户openid, lang 使用默认(zh_CN 简体) + */ + List userInfoList(List openidList) throws WxErrorException; + + /** + *
+   * 获取用户基本信息列表
+   * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=批量获取用户基本信息
+   * 
+ * + * @param userQuery 详细查询参数 + */ + List userInfoList(WxMpUserQuery userQuery) throws WxErrorException; + /** *
    * 获取关注者列表
    * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=获取关注者列表
    * 
* - * @param next_openid 可选,第一个拉取的OPENID,null为从头开始拉取 + * @param nextOpenid 可选,第一个拉取的OPENID,null为从头开始拉取 */ - WxMpUserList userList(String next_openid) throws WxErrorException; + WxMpUserList userList(String nextOpenid) throws WxErrorException; } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java index c05eeb9f..995eb58a 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpUserServiceImpl.java @@ -1,5 +1,7 @@ package me.chanjar.weixin.mp.api.impl; +import java.util.List; + import com.google.gson.JsonObject; import me.chanjar.weixin.common.exception.WxErrorException; @@ -7,6 +9,7 @@ import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor; import me.chanjar.weixin.common.util.http.SimplePostRequestExecutor; import me.chanjar.weixin.mp.api.WxMpService; import me.chanjar.weixin.mp.api.WxMpUserService; +import me.chanjar.weixin.mp.bean.WxMpUserQuery; import me.chanjar.weixin.mp.bean.result.WxMpUser; import me.chanjar.weixin.mp.bean.result.WxMpUserList; @@ -45,4 +48,16 @@ public class WxMpUserServiceImpl implements WxMpUserService { return WxMpUserList.fromJson(responseContent); } + @Override + public List userInfoList(List openidList) throws WxErrorException { + return userInfoList(new WxMpUserQuery(openidList)); + } + + @Override + public List userInfoList(WxMpUserQuery userQuery) throws WxErrorException { + String url = API_URL_PREFIX + "/info/batchget"; + String responseContent = this.wxMpService.execute(new SimpleGetRequestExecutor(), url, userQuery.toJsonString()); + return WxMpUser.fromJsonList(responseContent); + } + } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpUserQuery.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpUserQuery.java new file mode 100644 index 00000000..c33b9569 --- /dev/null +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpUserQuery.java @@ -0,0 +1,194 @@ +package me.chanjar.weixin.mp.bean; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.google.gson.Gson; + +/** + * 批量查询用户信息查询参数
+ * Created by LiuJunGuang on 2016/8/31. + * + * @author LiuJunGuang + */ +public class WxMpUserQuery { + private List queryParamList = new ArrayList<>(); + + public WxMpUserQuery() { + super(); + } + + /** + * 语言使用默认(zh_CN) + * + * @description + * @param openIdList + */ + public WxMpUserQuery(List openIdList) { + super(); + add(openIdList); + } + + /** + * 添加OpenId列表,语言使用默认(zh_CN) + * + * @param openIdList + * @return {@link WxMpUserQuery} + */ + public WxMpUserQuery add(List openIdList) { + for (String openId : openIdList) { + this.add(openId); + } + return this; + } + + /** + * 添加一个OpenId + * + * @param openId + * @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 + * @return {@link WxMpUserQuery} + */ + public WxMpUserQuery add(String openId, String lang) { + queryParamList.add(new WxMpUserQueryParam(openId, lang)); + return this; + } + + /** + * 添加一个OpenId到列表中,并返回本对象 + * + *
+   * 该方法默认lang = zh_CN
+   * 
+ * + * @param openId + * @return {@link WxMpUserQuery} + */ + public WxMpUserQuery add(String openId) { + queryParamList.add(new WxMpUserQueryParam(openId)); + return this; + } + + /** + * 删除指定的OpenId,语言使用默认(zh_CN) + * + * @param openId + * @return {@link WxMpUserQuery} + */ + public WxMpUserQuery remove(String openId) { + queryParamList.remove(new WxMpUserQueryParam(openId)); + return this; + } + + /** + * 删除指定的OpenId + * + * @param openId + * @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 + * @return {@link WxMpUserQuery} + */ + public WxMpUserQuery remove(String openId, String lang) { + queryParamList.remove(new WxMpUserQueryParam(openId, lang)); + return this; + } + + /** + * 获取查询参数列表 + * + * @return + */ + public List getQueryParamList() { + return queryParamList; + } + + public String toJsonString() { + Map map = new HashMap<>(); + map.put("user_list", queryParamList); + return new Gson().toJson(map); + } + + // 查询参数封装 + public class WxMpUserQueryParam implements Serializable { + /** + * @fields serialVersionUID + */ + private static final long serialVersionUID = -6863571795702385319L; + private String openid; + private String lang; + + public WxMpUserQueryParam(String openid, String lang) { + super(); + this.openid = openid; + this.lang = lang; + } + + public WxMpUserQueryParam(String openid) { + super(); + this.openid = openid; + this.lang = "zh_CN"; + } + + public WxMpUserQueryParam() { + super(); + } + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getLang() { + return lang; + } + + public void setLang(String lang) { + this.lang = lang; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + ((lang == null) ? 0 : lang.hashCode()); + result = prime * result + ((openid == null) ? 0 : openid.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + WxMpUserQueryParam other = (WxMpUserQueryParam) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (lang == null) { + if (other.lang != null) + return false; + } else if (!lang.equals(other.lang)) + return false; + if (openid == null) { + if (other.openid != null) + return false; + } else if (!openid.equals(other.openid)) + return false; + return true; + } + + private WxMpUserQuery getOuterType() { + return WxMpUserQuery.this; + } + + } + +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java index 29c6415f..e0e34228 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/result/WxMpUser.java @@ -1,8 +1,14 @@ package me.chanjar.weixin.mp.bean.result; -import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; - import java.io.Serializable; +import java.lang.reflect.Type; +import java.util.List; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.reflect.TypeToken; + +import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; /** * 微信用户信息 @@ -11,6 +17,10 @@ import java.io.Serializable; */ public class WxMpUser implements Serializable { + /** + * @fields serialVersionUID + */ + private static final long serialVersionUID = 5788154322646488738L; protected Boolean subscribe; protected String openId; protected String nickname; @@ -122,6 +132,13 @@ public class WxMpUser implements Serializable { return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpUser.class); } + public static List fromJsonList(String json) { + Type collectionType = new TypeToken>() {}.getType(); + Gson gson = WxMpGsonBuilder.INSTANCE.create(); + JsonObject jsonObject = gson.fromJson(json, JsonObject.class); + return gson.fromJson(jsonObject.get("user_info_list"), collectionType); + } + @Override public String toString() { return "WxMpUser{" +