Skip to content

Commit 7c6dbf1

Browse files
authored
🎨 #3827【企业微信】修复群聊变更事件MemChangeList字段命名规范问题
1 parent db15aec commit 7c6dbf1

File tree

2 files changed

+75
-1
lines changed

2 files changed

+75
-1
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public class WxCpXmlMessage implements Serializable {
157157

158158
@XStreamAlias("MemChangeList")
159159
@XStreamConverter(value = XStreamCDataConverter.class)
160-
private String MemChangeList;
160+
private String memChangeList;
161161

162162
@XStreamAlias("LastMemVer")
163163
@XStreamConverter(value = XStreamCDataConverter.class)

weixin-java-cp/src/test/java/me/chanjar/weixin/cp/bean/message/WxCpXmlMessageTest.java

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,4 +497,78 @@ public void testIntelligentRobotMessage() {
497497
assertEquals(wxMessage.getRobotId(), "robot_id_123");
498498
assertEquals(wxMessage.getSessionId(), "session_id_456");
499499
}
500+
501+
/**
502+
* Test external chat change event
503+
* 测试企业微信群聊变更事件解析 - 群成员变更场景
504+
*/
505+
public void testExternalChatChangeEvent() {
506+
// 测试群成员加入事件
507+
String xmlAddMember = "<xml>"
508+
+ "<ToUserName><![CDATA[toUser]]></ToUserName>"
509+
+ "<FromUserName><![CDATA[sys]]></FromUserName>"
510+
+ "<CreateTime>1403610513</CreateTime>"
511+
+ "<MsgType><![CDATA[event]]></MsgType>"
512+
+ "<Event><![CDATA[change_external_chat]]></Event>"
513+
+ "<ChangeType><![CDATA[update]]></ChangeType>"
514+
+ "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
515+
+ "<UpdateDetail><![CDATA[add_member]]></UpdateDetail>"
516+
+ "<JoinScene>1</JoinScene>"
517+
+ "<MemChangeCnt>2</MemChangeCnt>"
518+
+ "<MemChangeList><![CDATA[wmEJiCwAAA9KG2qlSq6rKwASSgAAAA,wmEJiCwAAA9KG2qlSq6rKwBBBBBBB]]></MemChangeList>"
519+
+ "</xml>";
520+
WxCpXmlMessage wxMessage = WxCpXmlMessage.fromXml(xmlAddMember);
521+
assertEquals(wxMessage.getToUserName(), "toUser");
522+
assertEquals(wxMessage.getFromUserName(), "sys");
523+
assertEquals(wxMessage.getCreateTime(), Long.valueOf(1403610513L));
524+
assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.EVENT);
525+
assertEquals(wxMessage.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CHAT);
526+
assertEquals(wxMessage.getChangeType(), "update");
527+
assertEquals(wxMessage.getChatId(), "wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA");
528+
assertEquals(wxMessage.getUpdateDetail(), "add_member");
529+
assertEquals(wxMessage.getJoinScene(), "1");
530+
assertEquals(wxMessage.getMemChangeCnt(), "2");
531+
assertEquals(wxMessage.getMemChangeList(), "wmEJiCwAAA9KG2qlSq6rKwASSgAAAA,wmEJiCwAAA9KG2qlSq6rKwBBBBBBB");
532+
533+
// 测试群成员退出事件
534+
String xmlDelMember = "<xml>"
535+
+ "<ToUserName><![CDATA[toUser]]></ToUserName>"
536+
+ "<FromUserName><![CDATA[sys]]></FromUserName>"
537+
+ "<CreateTime>1403610513</CreateTime>"
538+
+ "<MsgType><![CDATA[event]]></MsgType>"
539+
+ "<Event><![CDATA[change_external_chat]]></Event>"
540+
+ "<ChangeType><![CDATA[update]]></ChangeType>"
541+
+ "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
542+
+ "<UpdateDetail><![CDATA[del_member]]></UpdateDetail>"
543+
+ "<QuitScene>1</QuitScene>"
544+
+ "<MemChangeCnt>1</MemChangeCnt>"
545+
+ "<MemChangeList><![CDATA[wmEJiCwAAA9KG2qlSq6rKwASSgAAAA]]></MemChangeList>"
546+
+ "</xml>";
547+
WxCpXmlMessage wxMessage2 = WxCpXmlMessage.fromXml(xmlDelMember);
548+
assertEquals(wxMessage2.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CHAT);
549+
assertEquals(wxMessage2.getChangeType(), "update");
550+
assertEquals(wxMessage2.getChatId(), "wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA");
551+
assertEquals(wxMessage2.getUpdateDetail(), "del_member");
552+
assertEquals(wxMessage2.getQuitScene(), "1");
553+
assertEquals(wxMessage2.getMemChangeCnt(), "1");
554+
assertEquals(wxMessage2.getMemChangeList(), "wmEJiCwAAA9KG2qlSq6rKwASSgAAAA");
555+
556+
// 测试空MemChangeList场景(某些情况下可能没有成员变更列表)
557+
String xmlNoMemChangeList = "<xml>"
558+
+ "<ToUserName><![CDATA[toUser]]></ToUserName>"
559+
+ "<FromUserName><![CDATA[sys]]></FromUserName>"
560+
+ "<CreateTime>1403610513</CreateTime>"
561+
+ "<MsgType><![CDATA[event]]></MsgType>"
562+
+ "<Event><![CDATA[change_external_chat]]></Event>"
563+
+ "<ChangeType><![CDATA[update]]></ChangeType>"
564+
+ "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
565+
+ "<UpdateDetail><![CDATA[change_name]]></UpdateDetail>"
566+
+ "</xml>";
567+
WxCpXmlMessage wxMessage3 = WxCpXmlMessage.fromXml(xmlNoMemChangeList);
568+
assertEquals(wxMessage3.getEvent(), WxCpConsts.EventType.CHANGE_EXTERNAL_CHAT);
569+
assertEquals(wxMessage3.getChangeType(), "update");
570+
assertEquals(wxMessage3.getUpdateDetail(), "change_name");
571+
// 当XML中没有MemChangeList元素时,字段应该为null而不是空字符串
572+
assertThat(wxMessage3.getMemChangeList()).isNull();
573+
}
500574
}

0 commit comments

Comments
 (0)