| @@ -9,6 +9,10 @@ | |||||
| package me.chanjar.weixin.common.util.json; | package me.chanjar.weixin.common.util.json; | ||||
| import java.util.List; | |||||
| import com.google.common.collect.Lists; | |||||
| import com.google.gson.JsonArray; | |||||
| import com.google.gson.JsonElement; | import com.google.gson.JsonElement; | ||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| @@ -112,4 +116,21 @@ public class GsonHelper { | |||||
| return r == null ? 0f : r; | return r == null ? 0f : r; | ||||
| } | } | ||||
| public static Integer[] getIntArray(JsonObject o, String string) { | |||||
| JsonArray jsonArray = getAsJsonArray(o.getAsJsonArray(string)); | |||||
| if (jsonArray == null) { | |||||
| return null; | |||||
| } | |||||
| List<Integer> result = Lists.newArrayList(); | |||||
| for (int i = 0; i < jsonArray.size(); i++) { | |||||
| result.add(jsonArray.get(i).getAsInt()); | |||||
| } | |||||
| return result.toArray(new Integer[0]); | |||||
| } | |||||
| public static JsonArray getAsJsonArray(JsonElement element) { | |||||
| return element == null ? null : element.getAsJsonArray(); | |||||
| } | |||||
| } | } | ||||
| @@ -56,7 +56,8 @@ public class WxMpUserServiceImpl implements WxMpUserService { | |||||
| @Override | @Override | ||||
| public List<WxMpUser> userInfoList(WxMpUserQuery userQuery) throws WxErrorException { | public List<WxMpUser> userInfoList(WxMpUserQuery userQuery) throws WxErrorException { | ||||
| String url = API_URL_PREFIX + "/info/batchget"; | String url = API_URL_PREFIX + "/info/batchget"; | ||||
| String responseContent = this.wxMpService.execute(new SimplePostRequestExecutor(), url, userQuery.toJsonString()); | |||||
| String responseContent = this.wxMpService.post(url, | |||||
| userQuery.toJsonString()); | |||||
| return WxMpUser.fromJsonList(responseContent); | return WxMpUser.fromJsonList(responseContent); | ||||
| } | } | ||||
| @@ -24,22 +24,22 @@ public class WxMpUserQuery { | |||||
| /** | /** | ||||
| * 语言使用默认(zh_CN) | * 语言使用默认(zh_CN) | ||||
| * | * | ||||
| * @param openIdList | |||||
| * @param openids | |||||
| */ | */ | ||||
| public WxMpUserQuery(List<String> openIdList) { | |||||
| public WxMpUserQuery(List<String> openids) { | |||||
| super(); | super(); | ||||
| add(openIdList); | |||||
| add(openids); | |||||
| } | } | ||||
| /** | /** | ||||
| * 添加OpenId列表,语言使用默认(zh_CN) | * 添加OpenId列表,语言使用默认(zh_CN) | ||||
| * | * | ||||
| * @param openIdList | |||||
| * @param openids | |||||
| * @return {@link WxMpUserQuery} | * @return {@link WxMpUserQuery} | ||||
| */ | */ | ||||
| public WxMpUserQuery add(List<String> openIdList) { | |||||
| for (String openId : openIdList) { | |||||
| this.add(openId); | |||||
| public WxMpUserQuery add(List<String> openids) { | |||||
| for (String openid : openids) { | |||||
| this.add(openid); | |||||
| } | } | ||||
| return this; | return this; | ||||
| } | } | ||||
| @@ -47,12 +47,12 @@ public class WxMpUserQuery { | |||||
| /** | /** | ||||
| * 添加一个OpenId | * 添加一个OpenId | ||||
| * | * | ||||
| * @param openId | |||||
| * @param openid | |||||
| * @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 | * @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 | ||||
| * @return {@link WxMpUserQuery} | * @return {@link WxMpUserQuery} | ||||
| */ | */ | ||||
| public WxMpUserQuery add(String openId, String lang) { | |||||
| this.queryParamList.add(new WxMpUserQueryParam(openId, lang)); | |||||
| public WxMpUserQuery add(String openid, String lang) { | |||||
| this.queryParamList.add(new WxMpUserQueryParam(openid, lang)); | |||||
| return this; | return this; | ||||
| } | } | ||||
| @@ -63,34 +63,34 @@ public class WxMpUserQuery { | |||||
| * 该方法默认lang = zh_CN | * 该方法默认lang = zh_CN | ||||
| * </pre> | * </pre> | ||||
| * | * | ||||
| * @param openId | |||||
| * @param openid | |||||
| * @return {@link WxMpUserQuery} | * @return {@link WxMpUserQuery} | ||||
| */ | */ | ||||
| public WxMpUserQuery add(String openId) { | |||||
| this.queryParamList.add(new WxMpUserQueryParam(openId)); | |||||
| public WxMpUserQuery add(String openid) { | |||||
| this.queryParamList.add(new WxMpUserQueryParam(openid)); | |||||
| return this; | return this; | ||||
| } | } | ||||
| /** | /** | ||||
| * 删除指定的OpenId,语言使用默认(zh_CN) | * 删除指定的OpenId,语言使用默认(zh_CN) | ||||
| * | * | ||||
| * @param openId | |||||
| * @param openid | |||||
| * @return {@link WxMpUserQuery} | * @return {@link WxMpUserQuery} | ||||
| */ | */ | ||||
| public WxMpUserQuery remove(String openId) { | |||||
| this.queryParamList.remove(new WxMpUserQueryParam(openId)); | |||||
| public WxMpUserQuery remove(String openid) { | |||||
| this.queryParamList.remove(new WxMpUserQueryParam(openid)); | |||||
| return this; | return this; | ||||
| } | } | ||||
| /** | /** | ||||
| * 删除指定的OpenId | * 删除指定的OpenId | ||||
| * | * | ||||
| * @param openId | |||||
| * @param openid | |||||
| * @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 | * @param lang 国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语 | ||||
| * @return {@link WxMpUserQuery} | * @return {@link WxMpUserQuery} | ||||
| */ | */ | ||||
| public WxMpUserQuery remove(String openId, String lang) { | |||||
| this.queryParamList.remove(new WxMpUserQueryParam(openId, lang)); | |||||
| public WxMpUserQuery remove(String openid, String lang) { | |||||
| this.queryParamList.remove(new WxMpUserQueryParam(openid, lang)); | |||||
| return this; | return this; | ||||
| } | } | ||||
| @@ -110,9 +110,6 @@ public class WxMpUserQuery { | |||||
| // 查询参数封装 | // 查询参数封装 | ||||
| public class WxMpUserQueryParam implements Serializable { | public class WxMpUserQueryParam implements Serializable { | ||||
| /** | |||||
| * @fields serialVersionUID | |||||
| */ | |||||
| private static final long serialVersionUID = -6863571795702385319L; | private static final long serialVersionUID = -6863571795702385319L; | ||||
| private String openid; | private String openid; | ||||
| private String lang; | private String lang; | ||||
| @@ -4,6 +4,9 @@ import java.io.Serializable; | |||||
| import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
| import java.util.List; | import java.util.List; | ||||
| import org.apache.commons.lang3.builder.ToStringBuilder; | |||||
| import org.apache.commons.lang3.builder.ToStringStyle; | |||||
| import com.google.gson.Gson; | import com.google.gson.Gson; | ||||
| import com.google.gson.JsonObject; | import com.google.gson.JsonObject; | ||||
| import com.google.gson.reflect.TypeToken; | import com.google.gson.reflect.TypeToken; | ||||
| @@ -17,91 +20,111 @@ import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
| */ | */ | ||||
| public class WxMpUser implements Serializable { | public class WxMpUser implements Serializable { | ||||
| /** | |||||
| * @fields serialVersionUID | |||||
| */ | |||||
| private static final long serialVersionUID = 5788154322646488738L; | private static final long serialVersionUID = 5788154322646488738L; | ||||
| protected Boolean subscribe; | |||||
| protected String openId; | |||||
| protected String nickname; | |||||
| protected String sex; | |||||
| protected String language; | |||||
| protected String city; | |||||
| protected String province; | |||||
| protected String country; | |||||
| protected String headImgUrl; | |||||
| protected Long subscribeTime; | |||||
| protected String unionId; | |||||
| protected Integer sexId; | |||||
| protected String remark; | |||||
| protected Integer groupId; | |||||
| private Boolean subscribe; | |||||
| private String openId; | |||||
| private String nickname; | |||||
| private String sex; | |||||
| private String language; | |||||
| private String city; | |||||
| private String province; | |||||
| private String country; | |||||
| private String headImgUrl; | |||||
| private Long subscribeTime; | |||||
| private String unionId; | |||||
| private Integer sexId; | |||||
| private String remark; | |||||
| private Integer groupId; | |||||
| private Integer[] tagIds; | |||||
| public Boolean getSubscribe() { | public Boolean getSubscribe() { | ||||
| return this.subscribe; | return this.subscribe; | ||||
| } | } | ||||
| public Boolean isSubscribe() { | public Boolean isSubscribe() { | ||||
| return this.subscribe; | return this.subscribe; | ||||
| } | } | ||||
| public void setSubscribe(Boolean subscribe) { | public void setSubscribe(Boolean subscribe) { | ||||
| this.subscribe = subscribe; | this.subscribe = subscribe; | ||||
| } | } | ||||
| public String getOpenId() { | public String getOpenId() { | ||||
| return this.openId; | return this.openId; | ||||
| } | } | ||||
| public void setOpenId(String openId) { | public void setOpenId(String openId) { | ||||
| this.openId = openId; | this.openId = openId; | ||||
| } | } | ||||
| public String getNickname() { | public String getNickname() { | ||||
| return this.nickname; | return this.nickname; | ||||
| } | } | ||||
| public void setNickname(String nickname) { | public void setNickname(String nickname) { | ||||
| this.nickname = nickname; | this.nickname = nickname; | ||||
| } | } | ||||
| public String getSex() { | public String getSex() { | ||||
| return this.sex; | return this.sex; | ||||
| } | } | ||||
| public void setSex(String sex) { | public void setSex(String sex) { | ||||
| this.sex = sex; | this.sex = sex; | ||||
| } | } | ||||
| public String getLanguage() { | public String getLanguage() { | ||||
| return this.language; | return this.language; | ||||
| } | } | ||||
| public void setLanguage(String language) { | public void setLanguage(String language) { | ||||
| this.language = language; | this.language = language; | ||||
| } | } | ||||
| public String getCity() { | public String getCity() { | ||||
| return this.city; | return this.city; | ||||
| } | } | ||||
| public void setCity(String city) { | public void setCity(String city) { | ||||
| this.city = city; | this.city = city; | ||||
| } | } | ||||
| public String getProvince() { | public String getProvince() { | ||||
| return this.province; | return this.province; | ||||
| } | } | ||||
| public void setProvince(String province) { | public void setProvince(String province) { | ||||
| this.province = province; | this.province = province; | ||||
| } | } | ||||
| public String getCountry() { | public String getCountry() { | ||||
| return this.country; | return this.country; | ||||
| } | } | ||||
| public void setCountry(String country) { | public void setCountry(String country) { | ||||
| this.country = country; | this.country = country; | ||||
| } | } | ||||
| public String getHeadImgUrl() { | public String getHeadImgUrl() { | ||||
| return this.headImgUrl; | return this.headImgUrl; | ||||
| } | } | ||||
| public void setHeadImgUrl(String headImgUrl) { | public void setHeadImgUrl(String headImgUrl) { | ||||
| this.headImgUrl = headImgUrl; | this.headImgUrl = headImgUrl; | ||||
| } | } | ||||
| public Long getSubscribeTime() { | public Long getSubscribeTime() { | ||||
| return this.subscribeTime; | return this.subscribeTime; | ||||
| } | } | ||||
| public void setSubscribeTime(Long subscribeTime) { | public void setSubscribeTime(Long subscribeTime) { | ||||
| this.subscribeTime = subscribeTime; | this.subscribeTime = subscribeTime; | ||||
| } | } | ||||
| public String getUnionId() { | public String getUnionId() { | ||||
| return this.unionId; | return this.unionId; | ||||
| } | } | ||||
| public void setUnionId(String unionId) { | public void setUnionId(String unionId) { | ||||
| this.unionId = unionId; | this.unionId = unionId; | ||||
| } | } | ||||
| @@ -118,22 +141,34 @@ public class WxMpUser implements Serializable { | |||||
| public String getRemark() { | public String getRemark() { | ||||
| return this.remark; | return this.remark; | ||||
| } | } | ||||
| public void setRemark(String remark) { | public void setRemark(String remark) { | ||||
| this.remark = remark; | this.remark = remark; | ||||
| } | } | ||||
| public Integer getGroupId() { | public Integer getGroupId() { | ||||
| return this.groupId; | return this.groupId; | ||||
| } | } | ||||
| public void setGroupId(Integer groupId) { | public void setGroupId(Integer groupId) { | ||||
| this.groupId = groupId; | this.groupId = groupId; | ||||
| } | } | ||||
| public Integer[] getTagIds() { | |||||
| return this.tagIds; | |||||
| } | |||||
| public void setTagIds(Integer[] tagIds) { | |||||
| this.tagIds = tagIds; | |||||
| } | |||||
| public static WxMpUser fromJson(String json) { | public static WxMpUser fromJson(String json) { | ||||
| return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpUser.class); | return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpUser.class); | ||||
| } | } | ||||
| public static List<WxMpUser> fromJsonList(String json) { | public static List<WxMpUser> fromJsonList(String json) { | ||||
| Type collectionType = new TypeToken<List<WxMpUser>>() {}.getType(); | |||||
| Type collectionType = new TypeToken<List<WxMpUser>>() { | |||||
| }.getType(); | |||||
| Gson gson = WxMpGsonBuilder.INSTANCE.create(); | Gson gson = WxMpGsonBuilder.INSTANCE.create(); | ||||
| JsonObject jsonObject = gson.fromJson(json, JsonObject.class); | JsonObject jsonObject = gson.fromJson(json, JsonObject.class); | ||||
| return gson.fromJson(jsonObject.get("user_info_list"), collectionType); | return gson.fromJson(jsonObject.get("user_info_list"), collectionType); | ||||
| @@ -141,20 +176,7 @@ public class WxMpUser implements Serializable { | |||||
| @Override | @Override | ||||
| public String toString() { | public String toString() { | ||||
| return "WxMpUser{" + | |||||
| "subscribe=" + this.subscribe + | |||||
| ", openId='" + this.openId + '\'' + | |||||
| ", nickname='" + this.nickname + '\'' + | |||||
| ", sex='" + this.sex + '\'' + | |||||
| ", language='" + this.language + '\'' + | |||||
| ", city='" + this.city + '\'' + | |||||
| ", province='" + this.province + '\'' + | |||||
| ", country='" + this.country + '\'' + | |||||
| ", headImgUrl='" + this.headImgUrl + '\'' + | |||||
| ", subscribeTime=" + this.subscribeTime + | |||||
| ", unionId='" + this.unionId + '\'' + | |||||
| ", remark='" + this.remark + '\'' + | |||||
| ", groupId='" + this.groupId + '\'' + | |||||
| '}'; | |||||
| return ToStringBuilder.reflectionToString(this, ToStringStyle.JSON_STYLE); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,7 +1,3 @@ | |||||
| /** | |||||
| * Copyright(c) 2011-2016 by UCredit Inc. | |||||
| * All Rights Reserved | |||||
| */ | |||||
| package me.chanjar.weixin.mp.bean.store; | package me.chanjar.weixin.mp.bean.store; | ||||
| import org.apache.commons.lang3.builder.ToStringBuilder; | import org.apache.commons.lang3.builder.ToStringBuilder; | ||||
| @@ -8,12 +8,17 @@ | |||||
| */ | */ | ||||
| package me.chanjar.weixin.mp.util.json; | package me.chanjar.weixin.mp.util.json; | ||||
| import com.google.gson.*; | |||||
| import java.lang.reflect.Type; | |||||
| import com.google.gson.JsonDeserializationContext; | |||||
| import com.google.gson.JsonDeserializer; | |||||
| import com.google.gson.JsonElement; | |||||
| import com.google.gson.JsonObject; | |||||
| import com.google.gson.JsonParseException; | |||||
| import me.chanjar.weixin.common.util.json.GsonHelper; | import me.chanjar.weixin.common.util.json.GsonHelper; | ||||
| import me.chanjar.weixin.mp.bean.result.WxMpUser; | import me.chanjar.weixin.mp.bean.result.WxMpUser; | ||||
| import java.lang.reflect.Type; | |||||
| public class WxMpUserGsonAdapter implements JsonDeserializer<WxMpUser> { | public class WxMpUserGsonAdapter implements JsonDeserializer<WxMpUser> { | ||||
| @Override | @Override | ||||
| @@ -36,6 +41,7 @@ public class WxMpUserGsonAdapter implements JsonDeserializer<WxMpUser> { | |||||
| Integer sexId = GsonHelper.getInteger(o, "sex"); | Integer sexId = GsonHelper.getInteger(o, "sex"); | ||||
| wxMpUser.setRemark(GsonHelper.getString(o, "remark")); | wxMpUser.setRemark(GsonHelper.getString(o, "remark")); | ||||
| wxMpUser.setGroupId(GsonHelper.getInteger(o, "groupid")); | wxMpUser.setGroupId(GsonHelper.getInteger(o, "groupid")); | ||||
| wxMpUser.setTagIds(GsonHelper.getIntArray(o, "tagid_list")); | |||||
| wxMpUser.setSexId(sexId); | wxMpUser.setSexId(sexId); | ||||
| if(new Integer(1).equals(sexId)) { | if(new Integer(1).equals(sexId)) { | ||||
| wxMpUser.setSex("男"); | wxMpUser.setSex("男"); | ||||
| @@ -1,7 +1,3 @@ | |||||
| /** | |||||
| * Copyright(c) 2011-2016 by UCredit Inc. | |||||
| * All Rights Reserved | |||||
| */ | |||||
| package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
| import org.apache.commons.lang3.builder.ToStringBuilder; | import org.apache.commons.lang3.builder.ToStringBuilder; | ||||
| @@ -1,7 +1,3 @@ | |||||
| /** | |||||
| * Copyright(c) 2011-2016 by UCredit Inc. | |||||
| * All Rights Reserved | |||||
| */ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import static org.junit.Assert.assertNotNull; | import static org.junit.Assert.assertNotNull; | ||||
| @@ -1,10 +1,11 @@ | |||||
| package me.chanjar.weixin.mp.api.impl; | package me.chanjar.weixin.mp.api.impl; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.List; | import java.util.List; | ||||
| import org.testng.Assert; | import org.testng.Assert; | ||||
| import org.testng.annotations.BeforeTest; | |||||
| import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||
| import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||
| @@ -28,34 +29,42 @@ import me.chanjar.weixin.mp.bean.result.WxMpUserList; | |||||
| public class WxMpUserServiceImplTest { | public class WxMpUserServiceImplTest { | ||||
| @Inject | @Inject | ||||
| protected WxMpServiceImpl wxService; | |||||
| private WxMpServiceImpl wxService; | |||||
| private WxXmlMpInMemoryConfigStorage configProvider; | |||||
| @BeforeTest | |||||
| public void setup() { | |||||
| this.configProvider = (WxXmlMpInMemoryConfigStorage) this.wxService | |||||
| .getWxMpConfigStorage(); | |||||
| } | |||||
| public void testUserUpdateRemark() throws WxErrorException { | public void testUserUpdateRemark() throws WxErrorException { | ||||
| WxXmlMpInMemoryConfigStorage configProvider = (WxXmlMpInMemoryConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
| this.wxService.getUserService().userUpdateRemark(configProvider.getOpenid(), "测试备注名"); | |||||
| this.wxService.getUserService() | |||||
| .userUpdateRemark(this.configProvider.getOpenid(), "测试备注名"); | |||||
| } | } | ||||
| public void testUserInfo() throws WxErrorException { | public void testUserInfo() throws WxErrorException { | ||||
| WxXmlMpInMemoryConfigStorage configProvider = (WxXmlMpInMemoryConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
| WxMpUser user = this.wxService.getUserService().userInfo(configProvider.getOpenid(), null); | |||||
| WxMpUser user = this.wxService.getUserService() | |||||
| .userInfo(this.configProvider.getOpenid(), null); | |||||
| Assert.assertNotNull(user); | Assert.assertNotNull(user); | ||||
| System.out.println(user); | System.out.println(user); | ||||
| } | } | ||||
| public void testUserInfoList() throws WxErrorException { | public void testUserInfoList() throws WxErrorException { | ||||
| WxXmlMpInMemoryConfigStorage configProvider = (WxXmlMpInMemoryConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
| List<String> openIdList = new ArrayList<>(); | |||||
| openIdList.add(configProvider.getOpenid()); | |||||
| List<WxMpUser> userList = this.wxService.getUserService().userInfoList(openIdList); | |||||
| List<String> openids = new ArrayList<>(); | |||||
| openids.add(this.configProvider.getOpenid()); | |||||
| List<WxMpUser> userList = this.wxService.getUserService() | |||||
| .userInfoList(openids); | |||||
| Assert.assertEquals(userList.size(), 1); | Assert.assertEquals(userList.size(), 1); | ||||
| System.out.println(userList); | |||||
| System.out.println(userList); | |||||
| } | } | ||||
| public void testUserInfoListByWxMpUserQuery() throws WxErrorException { | public void testUserInfoListByWxMpUserQuery() throws WxErrorException { | ||||
| WxXmlMpInMemoryConfigStorage configProvider = (WxXmlMpInMemoryConfigStorage) this.wxService.getWxMpConfigStorage(); | |||||
| WxMpUserQuery query = new WxMpUserQuery(); | WxMpUserQuery query = new WxMpUserQuery(); | ||||
| query.add(configProvider.getOpenid(), "zh_CN"); | |||||
| List<WxMpUser> userList = this.wxService.getUserService().userInfoList(query); | |||||
| query.add(this.configProvider.getOpenid(), "zh_CN"); | |||||
| List<WxMpUser> userList = this.wxService.getUserService() | |||||
| .userInfoList(query); | |||||
| Assert.assertEquals(userList.size(), 1); | Assert.assertEquals(userList.size(), 1); | ||||
| System.out.println(userList); | System.out.println(userList); | ||||
| } | } | ||||
| @@ -68,6 +77,5 @@ public class WxMpUserServiceImplTest { | |||||
| Assert.assertFalse(wxMpUserList.getOpenIds().size() == -1); | Assert.assertFalse(wxMpUserList.getOpenIds().size() == -1); | ||||
| System.out.println(wxMpUserList); | System.out.println(wxMpUserList); | ||||
| } | } | ||||
| } | } | ||||