From 4b92f94a41ea00af9c3e60e916c76536e555cb44 Mon Sep 17 00:00:00 2001 From: Tim Sims Date: Mon, 3 Jan 2022 23:11:19 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#2479=20=E3=80=90=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E3=80=91=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E7=BE=A4=E5=8F=91=E6=88=90=E5=91=98=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E7=BB=93=E6=9E=9C=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/api/WxCpExternalContactService.java | 14 +++++ .../impl/WxCpExternalContactServiceImpl.java | 24 ++++++++ .../external/contact/WxCpGroupMsgResult.java | 59 +++++++++++++++++++ .../weixin/cp/constant/WxCpApiPathConsts.java | 1 + .../contact/WxCpGroupMsgResultTest.java | 37 ++++++++++++ 5 files changed, 135 insertions(+) create mode 100644 weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java create mode 100644 weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java index ef3cc2a3a..76ab62350 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpExternalContactService.java @@ -818,6 +818,20 @@ public interface WxCpExternalContactService { */ WxCpGroupMsgSendResult getGroupMsgSendResult(String msgid, String userid, Integer limit, String cursor) throws WxErrorException; + /** + *
+   * 企业跟第三方应用可通过该接口获取到创建企业群发的群发发送结果。
+   * https://work.weixin.qq.com/api/doc/16251
+   * 
+ * + * @param msgid 群发消息的id,通过创建企业群发接口返回 + * @param limit 返回的最大记录数,整型,最大值10000,默认值10000 + * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 + * @return wx cp base resp + * @throws WxErrorException the wx error exception + */ + public WxCpGroupMsgResult getGroupMsgResult(String msgid, Integer limit, String cursor) throws WxErrorException; + /** *
    * 获取群发成员发送任务列表。
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java
index 6cf6172a8..87e989578 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpExternalContactServiceImpl.java
@@ -648,6 +648,30 @@ public class WxCpExternalContactServiceImpl implements WxCpExternalContactServic
     return WxCpGroupMsgSendResult.fromJson(result);
   }
 
+  /**
+   * 
+   * 企业跟第三方应用可通过该接口获取到创建企业群发的群发发送结果。
+   * https://work.weixin.qq.com/api/doc/16251
+   * 
+ * + * @param msgid 群发消息的id,通过创建企业群发接口返回 + * @param limit 返回的最大记录数,整型,最大值10000,默认值10000 + * @param cursor 用于分页查询的游标,字符串类型,由上一次调用返回,首次调用可不填 + * @return wx cp base resp + * @throws WxErrorException the wx error exception + */ + @Override + public WxCpGroupMsgResult getGroupMsgResult(String msgid, Integer limit, String cursor) throws WxErrorException { + JsonObject json = new JsonObject(); + json.addProperty("msgid", msgid); + json.addProperty("limit", limit); + json.addProperty("cursor", cursor); + + final String url = this.mainService.getWxCpConfigStorage().getApiUrl(GET_GROUP_MSG_RESULT); + final String result = this.mainService.post(url, json.toString()); + return WxCpGroupMsgResult.fromJson(result); + } + /** *
    * 获取群发成员发送任务列表。
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java
new file mode 100644
index 000000000..5cae404f0
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResult.java
@@ -0,0 +1,59 @@
+package me.chanjar.weixin.cp.bean.external.contact;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 
+ * 获取企业群发成员执行结果
+ * 参考文档:https://work.weixin.qq.com/api/doc/16251
+ * 
+ * + * @author Tim Sims + */ +@Getter +@Setter +public class WxCpGroupMsgResult extends WxCpBaseResp implements Serializable { + private static final long serialVersionUID = -5166048319463473186L; + + @SerializedName("detail_list") + private List detailList; + + @SerializedName("next_cursor") + private String nextCursor; + + @Getter + @Setter + public static class ExternalContactGroupMsgDetailInfo implements Serializable { + private static final long serialVersionUID = 1500416806087532531L; + + // 外部联系人userid,群发消息到企业的客户群不吐出该字段 + @SerializedName("external_userid") + private String externalUserId; + + // 外部客户群id,群发消息到客户不吐出该字段 + @SerializedName("chat_id") + private String chatId; + + // 企业服务人员的userid + @SerializedName("userid") + private String userId; + + // 发送状态 0-未发送 1-已发送 2-因客户不是好友导致发送失败 3-因客户已经收到其他群发消息导致发送失败 + private Integer status; + + // 发送时间,发送状态为1时返回 + @SerializedName("send_time") + private Long sendTime; + } + + public static WxCpGroupMsgResult fromJson(String json) { + return WxCpGsonBuilder.create().fromJson(json, WxCpGroupMsgResult.class); + } +} diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java index c807b0f04..cea1bcb9b 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java @@ -233,6 +233,7 @@ public interface WxCpApiPathConsts { String GET_GROUP_MSG_SEND_RESULT = "/cgi-bin/externalcontact/get_groupmsg_send_result"; String GET_GROUP_MSG_TASK = "/cgi-bin/externalcontact/get_groupmsg_task"; String GET_GROUP_MSG_LIST_V2 = "/cgi-bin/externalcontact/get_groupmsg_list_v2"; + String GET_GROUP_MSG_RESULT = "/cgi-bin/externalcontact/get_group_msg_result"; String GET_PRODUCT_ALBUM = "/cgi-bin/externalcontact/get_product_album"; String GET_PRODUCT_ALBUM_LIST = "/cgi-bin/externalcontact/get_product_album_list"; diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java new file mode 100644 index 000000000..a0bc98b10 --- /dev/null +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/external/contact/WxCpGroupMsgResultTest.java @@ -0,0 +1,37 @@ +package me.chanjar.weixin.cp.bean.external.contact; + +import org.testng.annotations.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class WxCpGroupMsgResultTest { + + @Test + public void testToJson() { + /* + @see https://work.weixin.qq.com/api/doc/16251 + */ + String json = "{ " + + "\"errcode\": 0, " + + "\"errmsg\": \"ok\", " + + "\"detail_list\": [ " + + " { " + + " \"external_userid\": \"wmqfasd1e19278asdasAAAA\", " + + " \"chat_id\":\"wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA\", " + + " \"userid\": \"zhangsan\", " + + " \"status\": 1, " + + " \"send_time\": 1552536375 " + + " } " + + " ] " + + "}"; + + WxCpGroupMsgResult result = WxCpGroupMsgResult.fromJson(json); + assertThat(result.getDetailList().size()).isEqualTo(1); + WxCpGroupMsgResult.ExternalContactGroupMsgDetailInfo detail = result.getDetailList().get(0); + assertThat(detail.getChatId()).isEqualTo("wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA"); + assertThat(detail.getExternalUserId()).isEqualTo("wmqfasd1e19278asdasAAAA"); + assertThat(detail.getUserId()).isEqualTo("zhangsan"); + assertThat(detail.getStatus()).isEqualTo(1); + assertThat(detail.getSendTime()).isEqualTo(1552536375L); + } +}