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