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==");
+ }
}