@@ -570,5 +570,53 @@ public void testExternalChatChangeEvent() {
570570 assertEquals (wxMessage3 .getUpdateDetail (), "change_name" );
571571 // 当XML中没有MemChangeList元素时,字段应该为null而不是空字符串
572572 assertThat (wxMessage3 .getMemChangeList ()).isNull ();
573+
574+ // 测试企业微信4.8.0新格式:MemChangeList使用<Item>子元素(加群场景)
575+ String xmlNewFormatAddMember = "<xml>"
576+ + "<ToUserName><![CDATA[c2e112dad808119117371bbcd6]]></ToUserName>"
577+ + "<FromUserName><![CDATA[sys]]></FromUserName>"
578+ + "<CreateTime>9811170016713</CreateTime>"
579+ + "<MsgType><![CDATA[event]]></MsgType>"
580+ + "<Event><![CDATA[change_external_chat]]></Event>"
581+ + "<ChatId><![CDATA[wrxUBwDQAAa44T11Ziaed811rhUr8-3Igmug]]></ChatId>"
582+ + "<ChangeType><![CDATA[update]]></ChangeType>"
583+ + "<UpdateDetail><![CDATA[add_member]]></UpdateDetail>"
584+ + "<JoinScene>3</JoinScene>"
585+ + "<MemChangeCnt>1</MemChangeCnt>"
586+ + "<MemChangeList><Item><![CDATA[wmxUBwDQAAO-Hn5_wFJz4wvo5TxLFibw]]></Item></MemChangeList>"
587+ + "<LastMemVer><![CDATA[5807afd2ab75771d5e8ac623f534ac0b]]></LastMemVer>"
588+ + "<CurMemVer><![CDATA[ea36e8b6062b803cda0ee45e9418d637]]></CurMemVer>"
589+ + "</xml>" ;
590+ WxCpXmlMessage wxMessage4 = WxCpXmlMessage .fromXml (xmlNewFormatAddMember );
591+ assertEquals (wxMessage4 .getEvent (), WxCpConsts .EventType .CHANGE_EXTERNAL_CHAT );
592+ assertEquals (wxMessage4 .getChangeType (), "update" );
593+ assertEquals (wxMessage4 .getUpdateDetail (), "add_member" );
594+ assertEquals (wxMessage4 .getJoinScene (), "3" );
595+ assertEquals (wxMessage4 .getMemChangeCnt (), "1" );
596+ // 新格式:<Item>子元素中的成员ID应被正确解析
597+ assertEquals (wxMessage4 .getMemChangeList (), "wmxUBwDQAAO-Hn5_wFJz4wvo5TxLFibw" );
598+
599+ // 测试企业微信4.8.0新格式:多个<Item>子元素(多成员变更)
600+ String xmlNewFormatMultiMember = "<xml>"
601+ + "<ToUserName><![CDATA[toUser]]></ToUserName>"
602+ + "<FromUserName><![CDATA[sys]]></FromUserName>"
603+ + "<CreateTime>1403610513</CreateTime>"
604+ + "<MsgType><![CDATA[event]]></MsgType>"
605+ + "<Event><![CDATA[change_external_chat]]></Event>"
606+ + "<ChangeType><![CDATA[update]]></ChangeType>"
607+ + "<ChatId><![CDATA[wrOgQhDgAAMYQiS5ol9G7gK9JVAAAA]]></ChatId>"
608+ + "<UpdateDetail><![CDATA[del_member]]></UpdateDetail>"
609+ + "<QuitScene>1</QuitScene>"
610+ + "<MemChangeCnt>2</MemChangeCnt>"
611+ + "<MemChangeList>"
612+ + "<Item><![CDATA[wmEJiCwAAA9KG2qlSq6rKwASSgAAAA]]></Item>"
613+ + "<Item><![CDATA[wmEJiCwAAA9KG2qlSq6rKwBBBBBBB]]></Item>"
614+ + "</MemChangeList>"
615+ + "</xml>" ;
616+ WxCpXmlMessage wxMessage5 = WxCpXmlMessage .fromXml (xmlNewFormatMultiMember );
617+ assertEquals (wxMessage5 .getUpdateDetail (), "del_member" );
618+ assertEquals (wxMessage5 .getMemChangeCnt (), "2" );
619+ // 多个<Item>元素应被解析为逗号分隔字符串
620+ assertEquals (wxMessage5 .getMemChangeList (), "wmEJiCwAAA9KG2qlSq6rKwASSgAAAA,wmEJiCwAAA9KG2qlSq6rKwBBBBBBB" );
573621 }
574622}
0 commit comments