From 1788d9071e48d0073bd9b1e238c4d9ed5d252d96 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Wed, 24 Sep 2025 21:40:27 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#3715=20=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=9B=9E=E8=B0=83=E6=B6=88=E6=81=AF=E4=B8=AD=E7=9A=84?= =?UTF-8?q?MsgId=E6=94=B9=E4=B8=BA=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cp/bean/message/WxCpXmlMessage.java | 2 +- .../cp/bean/message/WxCpXmlMessageTest.java | 31 ++++++++++++++++++- 2 files changed, 31 insertions(+), 2 deletions(-) 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 e37229cf8..c5e55220e 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 @@ -92,7 +92,7 @@ public class WxCpXmlMessage implements Serializable { private String content; @XStreamAlias("MsgId") - private Long msgId; + private String msgId; @XStreamAlias("PicUrl") @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 5bcfe9698..ae4fbba8f 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 @@ -72,7 +72,7 @@ public class WxCpXmlMessageTest { assertEquals(wxMessage.getCreateTime(), Long.valueOf(1348831860)); assertEquals(wxMessage.getMsgType(), WxConsts.XmlMsgType.TEXT); assertEquals(wxMessage.getContent(), "this is a test"); - assertEquals(wxMessage.getMsgId(), Long.valueOf(1234567890123456L)); + assertEquals(wxMessage.getMsgId(), "1234567890123456"); assertEquals(wxMessage.getPicUrl(), "this is a url"); assertEquals(wxMessage.getMediaId(), "media_id"); assertEquals(wxMessage.getFormat(), "Format"); @@ -442,4 +442,33 @@ public class WxCpXmlMessageTest { assertThat(wxCpXmlMessage.getJobId()).isEqualTo("jobid_S0MrnndvRG5fadSlLwiBqiDDbM143UqTmKP3152FZk4"); assertThat(wxCpXmlMessage.getEvent()).isEqualTo(UPLOAD_MEDIA_JOB_FINISH); } + + /** + * Test both numeric and string msgId formats to ensure backward compatibility + */ + public void testMsgIdStringAndNumericFormats() { + // Test with numeric msgId (old format) + String xmlWithNumeric = "" + + "" + + "" + + "1348831860" + + "" + + "" + + "1234567890123456" + + ""; + WxCpXmlMessage wxMessageNumeric = WxCpXmlMessage.fromXml(xmlWithNumeric); + assertEquals(wxMessageNumeric.getMsgId(), "1234567890123456"); + + // Test with string msgId (new format - the actual issue case) + String xmlWithString = "" + + "" + + "" + + "1348831860" + + "" + + "" + + "CAIQg/PKxgYY2sC9tpuAgAMg9/zKaw==" + + ""; + WxCpXmlMessage wxMessageString = WxCpXmlMessage.fromXml(xmlWithString); + assertEquals(wxMessageString.getMsgId(), "CAIQg/PKxgYY2sC9tpuAgAMg9/zKaw=="); + } }