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 e37229cf8e..c5e55220e5 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 5bcfe9698a..ae4fbba8f6 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 void testFromXml() { 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 void testUploadMediaJobFinishEvent() { 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=="); + } }