From 62d6995d117e07b6683c9c73c6cbad999a03b16f Mon Sep 17 00:00:00 2001 From: zhangq Date: Sun, 14 Feb 2021 17:06:19 +0800 Subject: [PATCH 1/4] =?UTF-8?q?:new:=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=AF=B9=E6=8E=A5=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E5=BC=80=E6=94=BE=E6=A0=87=E7=AD=BE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/cp/bean/WxCpTpTag.java | 16 +++ .../bean/WxCpTpTagAddOrRemoveUsersResult.java | 16 +++ .../weixin/cp/bean/WxCpTpTagGetResult.java | 17 +++ .../cp/tp/service/WxCpTpTagService.java | 90 +++++++++++++ .../tp/service/impl/WxCpTpTagServiceImpl.java | 127 ++++++++++++++++++ 5 files changed, 266 insertions(+) create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpTagService.java create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java new file mode 100644 index 0000000000..de5385047b --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java @@ -0,0 +1,16 @@ +package me.chanjar.weixin.cp.bean; + +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +/** + * + * @author zhangq + * @since 2021-02-14 16:15 16:15 + */ +public class WxCpTpTag extends WxCpTag { + private static final long serialVersionUID = 7485287679462507128L; + + public static WxCpTpTag deserialize(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpTpTag.class); + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java new file mode 100644 index 0000000000..35319b1baf --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagAddOrRemoveUsersResult.java @@ -0,0 +1,16 @@ +package me.chanjar.weixin.cp.bean; + +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +/** + * 企业微信第三方开发-增加标签成员成员api响应体 + * @author zhangq + * @since 2021/2/14 16:44 + */ +public class WxCpTpTagAddOrRemoveUsersResult extends WxCpTagAddOrRemoveUsersResult { + private static final long serialVersionUID = 3490401800490702052L; + + public static WxCpTpTagAddOrRemoveUsersResult deserialize(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpTpTagAddOrRemoveUsersResult.class); + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java new file mode 100644 index 0000000000..d77e99b131 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTagGetResult.java @@ -0,0 +1,17 @@ +package me.chanjar.weixin.cp.bean; + +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +/** + * 获取标签成员接口响应体 + * @author zhangq + * @since 2021/2/14 16:28 + */ +public class WxCpTpTagGetResult extends WxCpTagGetResult { + private static final long serialVersionUID = 9051748686315562400L; + + public static WxCpTpTagGetResult deserialize(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpTpTagGetResult.class); + } + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpTagService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpTagService.java new file mode 100644 index 0000000000..25c5cf88b3 --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpTagService.java @@ -0,0 +1,90 @@ +package me.chanjar.weixin.cp.tp.service; + +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.bean.WxCpTpTag; +import me.chanjar.weixin.cp.bean.WxCpTpTagAddOrRemoveUsersResult; +import me.chanjar.weixin.cp.bean.WxCpTpTagGetResult; + +import java.util.List; + +/** + *
+ *   企业微信第三方开发-标签相关接口
+ * 
+ * + * @author zhangq + * @since 2021-02-14 16:02 + */ +public interface WxCpTpTagService { + /** + * 创建标签. + *
+   * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/tag/create?access_token=ACCESS_TOKEN
+   * 文档地址:https://work.weixin.qq.com/api/doc/90001/90143/90346
+   * 
+ * + * @param name 标签名称,长度限制为32个字以内(汉字或英文字母),标签名不可与其他标签重名。 + * @param id 标签id,非负整型,指定此参数时新增的标签会生成对应的标签id,不指定时则以目前最大的id自增。 + * @return 标签id + * @throws WxErrorException + */ + String create(String name, Integer id) throws WxErrorException; + + /** + * 更新标签. + * + * @param tagId 标签id + * @param tagName 标签名 + * @throws WxErrorException . + */ + void update(String tagId, String tagName) throws WxErrorException; + + /** + * 删除标签. + * + * @param tagId 标签id + * @throws WxErrorException . + */ + void delete(String tagId) throws WxErrorException; + + /** + * 获取标签成员 + * @param tagId + * @return + * @throws WxErrorException + */ + WxCpTpTagGetResult get(String tagId) throws WxErrorException; + + /** + * 增加标签成员. + * + * @param tagId 标签id + * @param userIds 用户ID 列表 + * @param partyIds 企业部门ID列表 + * @return . + * @throws WxErrorException . + */ + WxCpTpTagAddOrRemoveUsersResult addUsers2Tag(String tagId, List userIds, List partyIds) + throws WxErrorException; + + /** + * 移除标签成员. + * + * @param tagId 标签id + * @param userIds 用户id列表 + * @param partyIds 企业部门ID列表 + * @return . + * @throws WxErrorException . + */ + WxCpTpTagAddOrRemoveUsersResult removeUsersFromTag(String tagId, List userIds, List partyIds) + throws WxErrorException; + + /** + * 获得标签列表. + * + * @return 标签列表 + * @throws WxErrorException . + */ + List listAll() throws WxErrorException; + +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java new file mode 100644 index 0000000000..048441279a --- /dev/null +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java @@ -0,0 +1,127 @@ +package me.chanjar.weixin.cp.tp.service.impl; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import com.google.gson.JsonPrimitive; +import com.google.gson.reflect.TypeToken; +import lombok.RequiredArgsConstructor; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.json.GsonParser; +import me.chanjar.weixin.cp.api.WxCpService; +import me.chanjar.weixin.cp.bean.WxCpTpTag; +import me.chanjar.weixin.cp.bean.WxCpTpTagAddOrRemoveUsersResult; +import me.chanjar.weixin.cp.bean.WxCpTpTagGetResult; +import me.chanjar.weixin.cp.tp.service.WxCpTpTagService; +import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; + +import java.util.List; + +import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tag.*; + +/** + *
+ *   企业微信第三方开发-标签相关接口,部分照搬了WxCpTagServiceImpl
+ * 
+ * + * @author zhangq + * @since 2021-02-14 16:02 + */ +@RequiredArgsConstructor +public class WxCpTpTagServiceImpl implements WxCpTpTagService { + private final WxCpService mainService; + + @Override + public String create(String name, Integer id) throws WxErrorException { + JsonObject o = new JsonObject(); + o.addProperty("tagname", name); + + if (id != null) { + o.addProperty("tagid", id); + } + return this.create(o); + } + + private String create(JsonObject param) throws WxErrorException { + String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_CREATE); + String responseContent = this.mainService.post(url, param.toString()); + JsonObject jsonObject = GsonParser.parse(responseContent); + return jsonObject.get("tagid").getAsString(); + } + + @Override + public void update(String tagId, String tagName) throws WxErrorException { + String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_UPDATE); + JsonObject o = new JsonObject(); + o.addProperty("tagid", tagId); + o.addProperty("tagname", tagName); + this.mainService.post(url, o.toString()); + } + + @Override + public void delete(String tagId) throws WxErrorException { + String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(TAG_DELETE), tagId); + this.mainService.get(url, null); + } + + @Override + public List listAll() throws WxErrorException { + String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_LIST); + String responseContent = this.mainService.get(url, null); + JsonObject tmpJson = GsonParser.parse(responseContent); + return WxCpGsonBuilder.create().fromJson(tmpJson.get("taglist"), new TypeToken>() { + // do nothing + }.getType()); + } + + @Override + public WxCpTpTagGetResult get(String tagId) throws WxErrorException { + if (tagId == null) { + throw new IllegalArgumentException("缺少tagId参数"); + } + + String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(TAG_GET), tagId); + String responseContent = this.mainService.get(url, null); + return WxCpTpTagGetResult.deserialize(responseContent); + } + + @Override + public WxCpTpTagAddOrRemoveUsersResult addUsers2Tag(String tagId, List userIds, List partyIds) + throws WxErrorException { + String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_ADD_TAG_USERS); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("tagid", tagId); + this.addUserIdsAndPartyIdsToJson(userIds, partyIds, jsonObject); + + return WxCpTpTagAddOrRemoveUsersResult.deserialize(this.mainService.post(url, jsonObject.toString())); + } + + @Override + public WxCpTpTagAddOrRemoveUsersResult removeUsersFromTag(String tagId, List userIds, List partyIds) + throws WxErrorException { + String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_DEL_TAG_USERS); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("tagid", tagId); + this.addUserIdsAndPartyIdsToJson(userIds, partyIds, jsonObject); + + return WxCpTpTagAddOrRemoveUsersResult.deserialize(this.mainService.post(url, jsonObject.toString())); + } + + private void addUserIdsAndPartyIdsToJson(List userIds, List partyIds, JsonObject jsonObject) { + if (userIds != null) { + JsonArray jsonArray = new JsonArray(); + for (String userId : userIds) { + jsonArray.add(new JsonPrimitive(userId)); + } + jsonObject.add("userlist", jsonArray); + } + + if (partyIds != null) { + JsonArray jsonArray = new JsonArray(); + for (String userId : partyIds) { + jsonArray.add(new JsonPrimitive(userId)); + } + jsonObject.add("partylist", jsonArray); + } + } + +} From e90f0507df1c0bf7be430abd17789d9f1a00d6fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=BA?= Date: Thu, 25 Feb 2021 11:10:17 +0800 Subject: [PATCH 2/4] =?UTF-8?q?:art:=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=AE=8C=E5=96=84=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3=E7=9A=84=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/WxCpTpTagServiceImplTest.java | 41 +++++++++++++++++++ weixin-java-cp/src/test/resources/testng.xml | 1 + 2 files changed, 42 insertions(+) create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java new file mode 100644 index 0000000000..8af7931622 --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java @@ -0,0 +1,41 @@ +package me.chanjar.weixin.cp.tp.service.impl; + +import org.testng.annotations.Test; + +import static org.testng.Assert.*; + +/** + * 企业微信-第三方开发-标签管理相关测试 + * @author zhangq + * @since 2021/2/15 9:14 + */ +public class WxCpTpTagServiceImplTest { + + @Test + public void testCreate() { + } + + @Test + public void testUpdate() { + } + + @Test + public void testDelete() { + } + + @Test + public void testListAll() { + } + + @Test + public void testGet() { + } + + @Test + public void testAddUsers2Tag() { + } + + @Test + public void testRemoveUsersFromTag() { + } +} diff --git a/weixin-java-cp/src/test/resources/testng.xml b/weixin-java-cp/src/test/resources/testng.xml index 942c73fdd8..0bd6fbdd23 100644 --- a/weixin-java-cp/src/test/resources/testng.xml +++ b/weixin-java-cp/src/test/resources/testng.xml @@ -8,6 +8,7 @@ + From 7997d5d05c6575299b2c7ca3b9c78b40167c2412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=BA?= Date: Thu, 25 Feb 2021 15:13:20 +0800 Subject: [PATCH 3/4] =?UTF-8?q?:art:=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=AE=8C=E5=96=84=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E7=9B=B8=E5=85=B3=E7=9A=84=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../me/chanjar/weixin/cp/bean/WxCpTpTag.java | 16 +- .../tp/service/impl/WxCpTpTagServiceImpl.java | 23 +-- .../impl/WxCpTpTagServiceImplTest.java | 148 +++++++++++++++--- 3 files changed, 155 insertions(+), 32 deletions(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java index de5385047b..b584b31dd1 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpTag.java @@ -1,14 +1,26 @@ package me.chanjar.weixin.cp.bean; +import com.google.gson.annotations.SerializedName; +import lombok.Data; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; +import java.io.Serializable; + /** * * @author zhangq * @since 2021-02-14 16:15 16:15 */ -public class WxCpTpTag extends WxCpTag { - private static final long serialVersionUID = 7485287679462507128L; +@Data +public class WxCpTpTag implements Serializable { + + private static final long serialVersionUID = 581740383760234134L; + + @SerializedName("tagid") + private String tagId; + + @SerializedName("tagname") + private String tagName; public static WxCpTpTag deserialize(String json) { return WxCpGsonBuilder.create().fromJson(json, WxCpTpTag.class); diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java index 048441279a..1b03f18c79 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImpl.java @@ -7,10 +7,11 @@ import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.json.GsonParser; -import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpTpTag; import me.chanjar.weixin.cp.bean.WxCpTpTagAddOrRemoveUsersResult; import me.chanjar.weixin.cp.bean.WxCpTpTagGetResult; +import me.chanjar.weixin.cp.config.WxCpTpConfigStorage; +import me.chanjar.weixin.cp.tp.service.WxCpTpService; import me.chanjar.weixin.cp.tp.service.WxCpTpTagService; import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder; @@ -28,7 +29,7 @@ */ @RequiredArgsConstructor public class WxCpTpTagServiceImpl implements WxCpTpTagService { - private final WxCpService mainService; + private final WxCpTpService mainService; @Override public String create(String name, Integer id) throws WxErrorException { @@ -42,7 +43,7 @@ public String create(String name, Integer id) throws WxErrorException { } private String create(JsonObject param) throws WxErrorException { - String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_CREATE); + String url = getWxCpTpConfigStorage().getApiUrl(TAG_CREATE); String responseContent = this.mainService.post(url, param.toString()); JsonObject jsonObject = GsonParser.parse(responseContent); return jsonObject.get("tagid").getAsString(); @@ -50,7 +51,7 @@ private String create(JsonObject param) throws WxErrorException { @Override public void update(String tagId, String tagName) throws WxErrorException { - String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_UPDATE); + String url = getWxCpTpConfigStorage().getApiUrl(TAG_UPDATE); JsonObject o = new JsonObject(); o.addProperty("tagid", tagId); o.addProperty("tagname", tagName); @@ -59,13 +60,13 @@ public void update(String tagId, String tagName) throws WxErrorException { @Override public void delete(String tagId) throws WxErrorException { - String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(TAG_DELETE), tagId); + String url = String.format(getWxCpTpConfigStorage().getApiUrl(TAG_DELETE), tagId); this.mainService.get(url, null); } @Override public List listAll() throws WxErrorException { - String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_LIST); + String url = getWxCpTpConfigStorage().getApiUrl(TAG_LIST); String responseContent = this.mainService.get(url, null); JsonObject tmpJson = GsonParser.parse(responseContent); return WxCpGsonBuilder.create().fromJson(tmpJson.get("taglist"), new TypeToken>() { @@ -79,7 +80,7 @@ public WxCpTpTagGetResult get(String tagId) throws WxErrorException { throw new IllegalArgumentException("缺少tagId参数"); } - String url = String.format(this.mainService.getWxCpConfigStorage().getApiUrl(TAG_GET), tagId); + String url = String.format(getWxCpTpConfigStorage().getApiUrl(TAG_GET), tagId); String responseContent = this.mainService.get(url, null); return WxCpTpTagGetResult.deserialize(responseContent); } @@ -87,7 +88,7 @@ public WxCpTpTagGetResult get(String tagId) throws WxErrorException { @Override public WxCpTpTagAddOrRemoveUsersResult addUsers2Tag(String tagId, List userIds, List partyIds) throws WxErrorException { - String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_ADD_TAG_USERS); + String url = getWxCpTpConfigStorage().getApiUrl(TAG_ADD_TAG_USERS); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("tagid", tagId); this.addUserIdsAndPartyIdsToJson(userIds, partyIds, jsonObject); @@ -98,7 +99,7 @@ public WxCpTpTagAddOrRemoveUsersResult addUsers2Tag(String tagId, List u @Override public WxCpTpTagAddOrRemoveUsersResult removeUsersFromTag(String tagId, List userIds, List partyIds) throws WxErrorException { - String url = this.mainService.getWxCpConfigStorage().getApiUrl(TAG_DEL_TAG_USERS); + String url = getWxCpTpConfigStorage().getApiUrl(TAG_DEL_TAG_USERS); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("tagid", tagId); this.addUserIdsAndPartyIdsToJson(userIds, partyIds, jsonObject); @@ -124,4 +125,8 @@ private void addUserIdsAndPartyIdsToJson(List userIds, List part } } + @SuppressWarnings("deprecation") + private WxCpTpConfigStorage getWxCpTpConfigStorage() { + return this.mainService.getWxCpTpConfigStorage(); + } } diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java index 8af7931622..44c3ff68d1 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpTagServiceImplTest.java @@ -1,41 +1,147 @@ package me.chanjar.weixin.cp.tp.service.impl; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.cp.bean.WxCpTpTag; +import me.chanjar.weixin.cp.bean.WxCpTpTagAddOrRemoveUsersResult; +import me.chanjar.weixin.cp.bean.WxCpTpTagGetResult; +import me.chanjar.weixin.cp.config.WxCpTpConfigStorage; +import me.chanjar.weixin.cp.config.impl.WxCpTpDefaultConfigImpl; +import me.chanjar.weixin.cp.tp.service.WxCpTpTagService; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import org.testng.collections.CollectionUtils; +import java.util.Arrays; +import java.util.List; + +import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tag.*; +import static org.mockito.Matchers.*; +import static org.mockito.Mockito.when; import static org.testng.Assert.*; /** * 企业微信-第三方开发-标签管理相关测试 + * * @author zhangq * @since 2021/2/15 9:14 */ public class WxCpTpTagServiceImplTest { - @Test - public void testCreate() { - } + @Mock + private WxCpTpServiceImpl wxCpTpService; + + private WxCpTpConfigStorage configStorage; + + private WxCpTpTagService wxCpTpTagService; + + @BeforeClass + public void setUp() { + MockitoAnnotations.initMocks(this); + configStorage = new WxCpTpDefaultConfigImpl(); + when(wxCpTpService.getWxCpTpConfigStorage()).thenReturn(configStorage); + wxCpTpTagService = new WxCpTpTagServiceImpl(wxCpTpService); + } + + @Test + public void testCreate() throws WxErrorException { + String url = configStorage.getApiUrl(TAG_CREATE); + String tagName = "test_tag_name"; + int tagId = 12; + String result = "{\"errcode\":0,\"errmsg\":\"created\",\"tagid\":12}"; + when(wxCpTpService.post(eq(url), any(String.class))).thenReturn(result); + + assertEquals(wxCpTpTagService.create(tagName, tagId), String.valueOf(tagId)); + } + + @Test + public void testListAll() throws WxErrorException { + String url = configStorage.getApiUrl(TAG_LIST); + String result = "{\"errcode\":0,\"errmsg\":\"ok\",\"taglist\":[{\"tagid\":1,\"tagname\":\"a\"},{\"tagid\":2,\"tagname\":\"b\"}]}"; + when(wxCpTpService.get(eq(url), anyString())).thenReturn(result); + + List wxCpTpTags = wxCpTpTagService.listAll(); + assertNotNull(wxCpTpTags); + assertTrue(CollectionUtils.hasElements(wxCpTpTags)); + assertEquals(wxCpTpTags.get(0).getTagId(), "1"); + assertEquals(wxCpTpTags.get(1).getTagName(), "b"); + } + + @Test + public void testGet() throws WxErrorException { + String tagId = "anyTagId"; + String url = String.format(configStorage.getApiUrl(TAG_GET), tagId); + String result = "{\"errcode\":0,\"errmsg\":\"ok\",\"tagname\":\"乒乓球协会\",\"userlist\":[{\"userid\":\"zhangsan\",\"name\":\"李四\"}],\"partylist\":[2]}"; + when(wxCpTpService.get(eq(url), anyString())).thenReturn(result); + + WxCpTpTagGetResult getResult = wxCpTpTagService.get(tagId); + assertEquals(getResult.getTagname(), "乒乓球协会"); + assertEquals((int) getResult.getPartylist().get(0), 2); + assertEquals(getResult.getUserlist().get(0).getUserId(), "zhangsan"); + } - @Test - public void testUpdate() { - } + @Test + public void testAddUsers2Tag() throws WxErrorException { + String tagId = "anyTagId"; + String url = configStorage.getApiUrl(TAG_ADD_TAG_USERS); + // 成功时返回对象 + String success = "{\"errcode\":0,\"errmsg\":\"ok\"}"; + when(wxCpTpService.post(eq(url), anyString())).thenReturn(success); + WxCpTpTagAddOrRemoveUsersResult postResult = wxCpTpTagService + .addUsers2Tag(tagId, Arrays.asList("usr1", "usr2"), Arrays.asList("dept1", "dept2")); + assertEquals((int) postResult.getErrCode(), 0); + assertNull(postResult.getInvalidParty()); + assertNull(postResult.getInvalidUsers()); - @Test - public void testDelete() { - } + // 部分失败时返回对象 + String partFailure = "{\"errcode\":0,\"errmsg\":\"ok\",\"invalidlist\":\"usr1|usr2\",\"invalidparty\":[2,3,4]}"; + when(wxCpTpService.post(eq(url), anyString())).thenReturn(partFailure); + postResult = wxCpTpTagService.addUsers2Tag(tagId, Arrays.asList("usr1", "usr2"), Arrays.asList("dept1", "dept2")); + assertEquals((int) postResult.getErrCode(), 0); + assertEquals(postResult.getInvalidUserList().size(), 2); + assertEquals(postResult.getInvalidUserList().get(1), "usr2"); + assertEquals(postResult.getInvalidParty().length, 3); + assertEquals(postResult.getInvalidParty()[1], "3"); - @Test - public void testListAll() { - } + // 全部失败时返回对象 + String allFailure = "{\"errcode\":40070,\"errmsg\":\"all list invalid \"}"; + when(wxCpTpService.post(eq(url), anyString())).thenReturn(allFailure); + postResult = wxCpTpTagService.addUsers2Tag(tagId, Arrays.asList("usr1", "usr2"), Arrays.asList("dept1", "dept2")); + assertEquals((int) postResult.getErrCode(), 40070); + assertNull(postResult.getInvalidParty()); + assertNull(postResult.getInvalidUsers()); + } - @Test - public void testGet() { - } + @Test + public void testRemoveUsersFromTag() throws WxErrorException { + String tagId = "anyTagId"; + String url = configStorage.getApiUrl(TAG_DEL_TAG_USERS); + // 成功时返回对象 + String success = "{\"errcode\":0,\"errmsg\":\"ok\"}"; + when(wxCpTpService.post(eq(url), anyString())).thenReturn(success); + WxCpTpTagAddOrRemoveUsersResult postResult = wxCpTpTagService + .removeUsersFromTag(tagId, Arrays.asList("usr1", "usr2"), Arrays.asList("dept1", "dept2")); + assertEquals((int) postResult.getErrCode(), 0); + assertNull(postResult.getInvalidParty()); + assertNull(postResult.getInvalidUsers()); - @Test - public void testAddUsers2Tag() { - } + // 部分失败时返回对象 + String partFailure = "{\"errcode\":0,\"errmsg\":\"ok\",\"invalidlist\":\"usr1|usr2\",\"invalidparty\":[2,3,4]}"; + when(wxCpTpService.post(eq(url), anyString())).thenReturn(partFailure); + postResult = wxCpTpTagService.removeUsersFromTag(tagId, Arrays.asList("usr1", "usr2"), Arrays.asList("dept1", "dept2")); + assertEquals((int) postResult.getErrCode(), 0); + assertEquals(postResult.getInvalidUserList().size(), 2); + assertEquals(postResult.getInvalidUserList().get(1), "usr2"); + assertEquals(postResult.getInvalidParty().length, 3); + assertEquals(postResult.getInvalidParty()[1], "3"); - @Test - public void testRemoveUsersFromTag() { - } + // 全部失败时返回对象 + String allFailure = "{\"errcode\":40070,\"errmsg\":\"all list invalid \"}"; + when(wxCpTpService.post(eq(url), anyString())).thenReturn(allFailure); + postResult = wxCpTpTagService.removeUsersFromTag(tagId, Arrays.asList("usr1", "usr2"), Arrays.asList("dept1", "dept2")); + assertEquals((int) postResult.getErrCode(), 40070); + assertNull(postResult.getInvalidParty()); + assertNull(postResult.getInvalidUsers()); + } } From 61b497c0a0beae59bf7d16994a566a0dbf28d623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E5=BC=BA?= Date: Thu, 25 Feb 2021 15:31:34 +0800 Subject: [PATCH 4/4] =?UTF-8?q?:new:=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E6=8F=90=E4=BE=9B=E4=BD=BFtoken?= =?UTF-8?q?=E5=92=8Cticket=E5=A4=B1=E6=95=88=E7=9A=84=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E6=9F=90=E4=BA=9B=E6=83=85=E5=86=B5=EF=BC=88=E6=AF=94?= =?UTF-8?q?=E5=A6=82=E6=9C=BA=E6=9E=84=E5=8F=96=E6=B6=88=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=AE=89=E8=A3=85=E6=97=B6=EF=BC=89=E4=BE=9B=E5=BA=94=E5=95=86?= =?UTF-8?q?=E4=BE=A7=E9=9C=80=E8=A6=81=E6=B8=85=E7=90=86=E8=BF=99=E4=BA=9B?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E7=9A=84=E7=A5=A8=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/cp/tp/service/WxCpTpService.java | 28 +++++++++++++++++++ .../service/impl/BaseWxCpTpServiceImpl.java | 25 +++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java index 73a173b98a..8018e2eb21 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java @@ -491,4 +491,32 @@ public interface WxCpTpService { */ WxJsapiSignature createSuiteJsApiTicketSignature(String url, String authCorpId) throws WxErrorException; + /** + * 使套件accessToken缓存失效 + */ + void expireSuiteAccessToken(); + + /** + * 使机构accessToken缓存失效 + * @param authCorpId 机构id + */ + void expireAccessToken(String authCorpId); + + /** + * 使机构jsapiticket缓存失效 + * @param authCorpId 机构id + */ + void expireAuthCorpJsApiTicket(String authCorpId); + + /** + * 使应用jsapiticket失效 + * @param authCorpId 机构id + */ + void expireAuthSuiteJsApiTicket(String authCorpId); + + /** + * 使供应商accessToken失效 + */ + void expireProviderToken(); + } diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java index c61f1a8c9f..c8409d21aa 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java @@ -548,6 +548,31 @@ public WxJsapiSignature createSuiteJsApiTicketSignature(String url, String authC return doCreateWxJsapiSignature(url, authCorpId, this.getSuiteJsApiTicket(authCorpId)); } + @Override + public void expireSuiteAccessToken() { + this.configStorage.expireSuiteAccessToken(); + } + + @Override + public void expireAccessToken(String authCorpId) { + this.configStorage.expireAccessToken(authCorpId); + } + + @Override + public void expireAuthCorpJsApiTicket(String authCorpId) { + this.configStorage.expireAuthCorpJsApiTicket(authCorpId); + } + + @Override + public void expireAuthSuiteJsApiTicket(String authCorpId) { + this.configStorage.expireAuthSuiteJsApiTicket(authCorpId); + } + + @Override + public void expireProviderToken() { + this.configStorage.expireProviderToken(); + } + private WxJsapiSignature doCreateWxJsapiSignature(String url, String authCorpId, String jsapiTicket) { long timestamp = System.currentTimeMillis() / 1000; String noncestr = RandomUtils.getRandomStr();