1
0
mirror of synced 2026-02-04 16:40:54 +08:00

🎨 #3827【企业微信】修复群聊变更事件MemChangeList字段命名规范问题

This commit is contained in:
Copilot
2026-01-03 16:45:03 +08:00
committed by GitHub
parent db15aec8de
commit 7c6dbf15e4
2 changed files with 75 additions and 1 deletions

View File

@@ -157,7 +157,7 @@ public class WxCpXmlMessage implements Serializable {
@XStreamAlias("MemChangeList") @XStreamAlias("MemChangeList")
@XStreamConverter(value = XStreamCDataConverter.class) @XStreamConverter(value = XStreamCDataConverter.class)
private String MemChangeList; private String memChangeList;
@XStreamAlias("LastMemVer") @XStreamAlias("LastMemVer")
@XStreamConverter(value = XStreamCDataConverter.class) @XStreamConverter(value = XStreamCDataConverter.class)

View File

@@ -497,4 +497,78 @@ public class WxCpXmlMessageTest {
assertEquals(wxMessage.getRobotId(), "robot_id_123"); assertEquals(wxMessage.getRobotId(), "robot_id_123");
assertEquals(wxMessage.getSessionId(), "session_id_456"); assertEquals(wxMessage.getSessionId(), "session_id_456");
} }
/**
* Test external chat change event
* 测试企业微信群聊变更事件解析 - 群成员变更场景
*/
public void testExternalChatChangeEvent() {
// 测试群成员加入事件
String xmlAddMember = "<xml>"
+ "<ToUserName><![CDATA[toUser]]></ToUserName>"
+ "<FromUserName><![CDATA[sys]]></FromUserName>"
+ "<CreateTime>1403610513</CreateTime>"
+ "<MsgType><![CDATA[event]]></MsgType>"
+ "<Event><![CDATA[change_external_chat]]></Event>"
+ "<ChangeType><![CDATA[update]]></ChangeType>"
+ "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
+ "<UpdateDetail><![CDATA[add_member]]></UpdateDetail>"
+ "<JoinScene>1</JoinScene>"
+ "<MemChangeCnt>2</MemChangeCnt>"
+ "<MemChangeList><![CDATA[wmEJiCwAAA9KG2qlSq6rKwASSgAAAA,wmEJiCwAAA9KG2qlSq6rKwBBBBBBB]]></MemChangeList>"
+ "</xml>";
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 = "<xml>"
+ "<ToUserName><![CDATA[toUser]]></ToUserName>"
+ "<FromUserName><![CDATA[sys]]></FromUserName>"
+ "<CreateTime>1403610513</CreateTime>"
+ "<MsgType><![CDATA[event]]></MsgType>"
+ "<Event><![CDATA[change_external_chat]]></Event>"
+ "<ChangeType><![CDATA[update]]></ChangeType>"
+ "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
+ "<UpdateDetail><![CDATA[del_member]]></UpdateDetail>"
+ "<QuitScene>1</QuitScene>"
+ "<MemChangeCnt>1</MemChangeCnt>"
+ "<MemChangeList><![CDATA[wmEJiCwAAA9KG2qlSq6rKwASSgAAAA]]></MemChangeList>"
+ "</xml>";
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 = "<xml>"
+ "<ToUserName><![CDATA[toUser]]></ToUserName>"
+ "<FromUserName><![CDATA[sys]]></FromUserName>"
+ "<CreateTime>1403610513</CreateTime>"
+ "<MsgType><![CDATA[event]]></MsgType>"
+ "<Event><![CDATA[change_external_chat]]></Event>"
+ "<ChangeType><![CDATA[update]]></ChangeType>"
+ "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
+ "<UpdateDetail><![CDATA[change_name]]></UpdateDetail>"
+ "</xml>";
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();
}
} }