From fb7e739fef8bf8cbd846fab5820105513d93f754 Mon Sep 17 00:00:00 2001 From: Daniel Qian Date: Mon, 25 Aug 2014 17:57:06 +0800 Subject: [PATCH] =?UTF-8?q?issue=20#1=20=E6=B7=BB=E5=8A=A0=E5=88=86?= =?UTF-8?q?=E7=BB=84=E7=AE=A1=E7=90=86=E6=8E=A5=E5=8F=A3-=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=88=86=E7=BB=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chanjarster/weixin/api/WxService.java | 12 ++++++++++++ .../chanjarster/weixin/api/WxServiceImpl.java | 19 +++++++++++++++++++ .../weixin/util/json/WxGroupGsonAdapter.java | 5 ++++- .../weixin/api/WxGroupAPITest.java | 14 +++++++++++++- 4 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/main/java/chanjarster/weixin/api/WxService.java b/src/main/java/chanjarster/weixin/api/WxService.java index 1cc7dcf5..3bfbb07c 100644 --- a/src/main/java/chanjarster/weixin/api/WxService.java +++ b/src/main/java/chanjarster/weixin/api/WxService.java @@ -3,6 +3,7 @@ package chanjarster.weixin.api; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.List; import chanjarster.weixin.bean.WxCustomMessage; import chanjarster.weixin.bean.WxGroup; @@ -180,6 +181,7 @@ public interface WxService { /** *
    * 分组管理接口 - 创建分组
+   * 最多支持创建500个分组
    * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=分组管理接口
    * 
* @param name 分组名字(30个字符以内) @@ -187,6 +189,16 @@ public interface WxService { */ public WxGroup groupCreate(String name) throws WxErrorException; + /** + *
+   * 分组管理接口 - 查询所有分组
+   * 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=分组管理接口
+   * 
+ * @return + * @throws WxErrorException + */ + public List groupGet() throws WxErrorException; + /** * 注入 {@link WxConfigStorage} 的实现 * @param wxConfigProvider diff --git a/src/main/java/chanjarster/weixin/api/WxServiceImpl.java b/src/main/java/chanjarster/weixin/api/WxServiceImpl.java index dc250735..b0607356 100644 --- a/src/main/java/chanjarster/weixin/api/WxServiceImpl.java +++ b/src/main/java/chanjarster/weixin/api/WxServiceImpl.java @@ -3,9 +3,11 @@ package chanjarster.weixin.api; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.security.MessageDigest; import java.text.MessageFormat; import java.util.Arrays; +import java.util.List; import java.util.UUID; import java.util.concurrent.atomic.AtomicBoolean; @@ -36,6 +38,12 @@ import chanjarster.weixin.util.http.MediaUploadRequestExecutor; import chanjarster.weixin.util.http.RequestExecutor; import chanjarster.weixin.util.http.SimpleGetRequestExecutor; import chanjarster.weixin.util.http.SimplePostRequestExecutor; +import chanjarster.weixin.util.json.WxGsonBuilder; + +import com.google.gson.JsonElement; +import com.google.gson.internal.Streams; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; public class WxServiceImpl implements WxService { @@ -190,6 +198,17 @@ public class WxServiceImpl implements WxService { String responseContent = execute(new SimplePostRequestExecutor(), url, MessageFormat.format("'{'\"group\":'{'\"name\":\"{0}\"}}", name)); return WxGroup.fromJson(responseContent); } + + public List groupGet() throws WxErrorException { + String url = "https://api.weixin.qq.com/cgi-bin/groups/get"; + String responseContent = execute(new SimpleGetRequestExecutor(), url, null); + /* + * 操蛋的微信API,创建时返回的是 { group : { id : ..., name : ...} } + * 查询时返回的是 { groups : [ { id : ..., name : ..., count : ... }, ... ] } + */ + JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); + return WxGsonBuilder.INSTANCE.create().fromJson(tmpJsonElement.getAsJsonObject().get("groups"), new TypeToken>(){}.getType()); + } /** * 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求 diff --git a/src/main/java/chanjarster/weixin/util/json/WxGroupGsonAdapter.java b/src/main/java/chanjarster/weixin/util/json/WxGroupGsonAdapter.java index 99f724be..eb26a1a8 100644 --- a/src/main/java/chanjarster/weixin/util/json/WxGroupGsonAdapter.java +++ b/src/main/java/chanjarster/weixin/util/json/WxGroupGsonAdapter.java @@ -39,7 +39,10 @@ public class WxGroupGsonAdapter implements JsonSerializer, JsonDeserial public WxGroup deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { WxGroup group = new WxGroup(); - JsonObject groupJson = json.getAsJsonObject().get("group").getAsJsonObject(); + JsonObject groupJson = json.getAsJsonObject(); + if (json.getAsJsonObject().get("group") != null) { + groupJson = json.getAsJsonObject().get("group").getAsJsonObject(); + } if (groupJson.get("name") != null && !groupJson.get("name").isJsonNull()) { group.setName(GsonHelper.getAsString(groupJson.get("name"))); } diff --git a/src/test/java/chanjarster/weixin/api/WxGroupAPITest.java b/src/test/java/chanjarster/weixin/api/WxGroupAPITest.java index 71bc468c..b20b2f66 100644 --- a/src/test/java/chanjarster/weixin/api/WxGroupAPITest.java +++ b/src/test/java/chanjarster/weixin/api/WxGroupAPITest.java @@ -1,5 +1,7 @@ package chanjarster.weixin.api; +import java.util.List; + import org.testng.Assert; import org.testng.annotations.Guice; import org.testng.annotations.Test; @@ -21,9 +23,19 @@ public class WxGroupAPITest { @Inject protected WxServiceImpl wxService; - public void testCreateMenu() throws WxErrorException { + public void testGroupCreate() throws WxErrorException { WxGroup res = wxService.groupCreate("测试分组1"); Assert.assertEquals(res.getName(), "测试分组1"); } + @Test(dependsOnMethods="testGroupCreate") + public void testGroupGet() throws WxErrorException { + List groupList = wxService.groupGet(); + Assert.assertNotNull(groupList); + Assert.assertTrue(groupList.size() > 0); + for (WxGroup g : groupList) { + Assert.assertNotNull(g.getName()); + } + } + }