From e5a15dc39db4c292c50979065abd23e7cc17c760 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 3 Jan 2026 06:50:56 +0000 Subject: [PATCH 1/2] Initial plan From 2c2b06e973223da54c73b0b6fd61dfb90576547a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 3 Jan 2026 07:00:12 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E7=BE=A4=E8=81=8A=E5=8F=98=E6=9B=B4=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6MemChangeList=E5=AD=97=E6=AE=B5=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E5=B9=B6=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> --- .../cp/bean/message/WxCpXmlMessage.java | 2 +- .../cp/bean/message/WxCpXmlMessageTest.java | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java index d15eda882..4001c7d0e 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java @@ -157,7 +157,7 @@ public class WxCpXmlMessage implements Serializable { @XStreamAlias("MemChangeList") @XStreamConverter(value = XStreamCDataConverter.class) - private String MemChangeList; + private String memChangeList; @XStreamAlias("LastMemVer") @XStreamConverter(value = XStreamCDataConverter.class) diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java index 94874519c..0b2324a5f 100644 --- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java +++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java @@ -497,4 +497,78 @@ public void testIntelligentRobotMessage() { assertEquals(wxMessage.getRobotId(), "robot_id_123"); assertEquals(wxMessage.getSessionId(), "session_id_456"); } + + /** + * Test external chat change event + * 测试企业微信群聊变更事件解析 - 群成员变更场景 + */ + public void testExternalChatChangeEvent() { + // 测试群成员加入事件 + String xmlAddMember = "" + + "" + + "" + + "1403610513" + + "" + + "" + + "" + + "" + + "" + + "1" + + "2" + + "" + + ""; + WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xmlAddMember); + assertEquals(wxMessage.getToUserName(), "toUser"); + assertEquals(wxMessage.getFromUserName(), "sys"); + assertEquals(wxMessage.getCreateTime(), Long.valueOf(1403610513L)); + assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT); + assertEquals(wxMessage.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CHAT); + assertEquals(wxMessage.getChangeType(), "update"); + assertEquals(wxMessage.getChatId(), "wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA"); + assertEquals(wxMessage.getUpdateDetail(), "add_member"); + assertEquals(wxMessage.getJoinScene(), "1"); + assertEquals(wxMessage.getMemChangeCnt(), "2"); + assertEquals(wxMessage.getMemChangeList(), "wmEJiCwAAA9KG2qlSq6rKwASSgAAAA,wmEJiCwAAA9KG2qlSq6rKwBBBBBBB"); + + // 测试群成员退出事件 + String xmlDelMember = "" + + "" + + "" + + "1403610513" + + "" + + "" + + "" + + "" + + "" + + "1" + + "1" + + "" + + ""; + WxCpXmlMessage wxMessage2 = WxCpXmlMessage.fromXml(xmlDelMember); + assertEquals(wxMessage2.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CHAT); + assertEquals(wxMessage2.getChangeType(), "update"); + assertEquals(wxMessage2.getChatId(), "wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA"); + assertEquals(wxMessage2.getUpdateDetail(), "del_member"); + assertEquals(wxMessage2.getQuitScene(), "1"); + assertEquals(wxMessage2.getMemChangeCnt(), "1"); + assertEquals(wxMessage2.getMemChangeList(), "wmEJiCwAAA9KG2qlSq6rKwASSgAAAA"); + + // 测试空MemChangeList场景(某些情况下可能没有成员变更列表) + String xmlNoMemChangeList = "" + + "" + + "" + + "1403610513" + + "" + + "" + + "" + + "" + + "" + + ""; + WxCpXmlMessage wxMessage3 = WxCpXmlMessage.fromXml(xmlNoMemChangeList); + assertEquals(wxMessage3.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CHAT); + assertEquals(wxMessage3.getChangeType(), "update"); + assertEquals(wxMessage3.getUpdateDetail(), "change_name"); + // 当XML中没有MemChangeList元素时,字段应该为null而不是空字符串 + assertThat(wxMessage3.getMemChangeList()).isNull(); + } }