From 1957e0f867fc833093727da5d985961d7a8ef908 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 11 Apr 2026 12:54:56 +0000
Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B7=BB=E5=8A=A0WxSignQueryResult?=
=?UTF-8?q?=E5=90=91=E5=90=8E=E5=85=BC=E5=AE=B9=E6=9E=84=E9=80=A0=E5=87=BD?=
=?UTF-8?q?=E6=95=B0=E5=B9=B6=E8=A1=A5=E5=85=85change=5Ftype/operate=5Ftim?=
=?UTF-8?q?e=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/8bd848c3-daae-447f-ac54-3c2c0c8dcfb6
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
---
.../wxpay/bean/result/WxSignQueryResult.java | 16 +++++
.../bean/result/WxSignQueryResultTest.java | 65 +++++++++++++++++++
2 files changed, 81 insertions(+)
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java
index 00bf9cda2..ca435f5b0 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResult.java
@@ -116,6 +116,22 @@ public class WxSignQueryResult extends BaseWxPayResult implements Serializable {
@XStreamAlias("operate_time")
private String operateTime;
+ /**
+ * 为保持向后兼容保留的构造函数(不含 changeType、operateTime 字段)。
+ *
+ * @deprecated 请使用包含所有字段的全参构造函数。
+ */
+ @Deprecated
+ public WxSignQueryResult(String contractId, String planId, Long requestSerial,
+ String contractCode, String contractDisplayAccount,
+ Integer contractState, String contractSignedTime,
+ String contractExpiredTime, String contractTerminatedTime,
+ Integer contractTerminatedMode, String contractTerminationRemark,
+ String openId) {
+ this(contractId, planId, requestSerial, contractCode, contractDisplayAccount,
+ contractState, contractSignedTime, contractExpiredTime, contractTerminatedTime,
+ contractTerminatedMode, contractTerminationRemark, openId, null, null);
+ }
@Override
protected void loadXml(Document d) {
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResultTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResultTest.java
index 52df2b6e2..12d62b148 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResultTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/result/WxSignQueryResultTest.java
@@ -117,9 +117,74 @@ public class WxSignQueryResultTest {
Assert.assertNull(result.getContractTerminatedTime());
Assert.assertNull(result.getContractTerminatedMode());
Assert.assertNull(result.getContractTerminationRemark());
+ Assert.assertNull(result.getChangeType());
+ Assert.assertNull(result.getOperateTime());
} finally {
// 恢复默认值
XmlConfig.fastMode = false;
}
}
+
+ /**
+ * 测试签约回调通知 XML 解析 - change_type = ADD
+ */
+ @Test
+ public void testFromXML_SignCallback_Add() {
+ String xmlString = "\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " 123\n" +
+ " \n" +
+ " 1695\n" +
+ " \n" +
+ " \n" +
+ " 2015-07-01 10:00:00\n" +
+ " 2016-07-01 10:00:00\n" +
+ " \n" +
+ "";
+
+ XmlConfig.fastMode = true;
+ try {
+ WxSignQueryResult result = WxSignQueryResult.fromXML(xmlString, WxSignQueryResult.class);
+
+ Assert.assertEquals(result.getChangeType(), "ADD");
+ Assert.assertEquals(result.getOperateTime(), "2015-07-01 10:00:00");
+ } finally {
+ XmlConfig.fastMode = false;
+ }
+ }
+
+ /**
+ * 测试解约回调通知 XML 解析 - change_type = DELETE
+ */
+ @Test
+ public void testFromXML_SignCallback_Delete() {
+ String xmlString = "\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " 123\n" +
+ " \n" +
+ " 1695\n" +
+ " \n" +
+ " \n" +
+ " 2015-07-01 11:00:00\n" +
+ " 2\n" +
+ " \n" +
+ "";
+
+ XmlConfig.fastMode = true;
+ try {
+ WxSignQueryResult result = WxSignQueryResult.fromXML(xmlString, WxSignQueryResult.class);
+
+ Assert.assertEquals(result.getChangeType(), "DELETE");
+ Assert.assertEquals(result.getOperateTime(), "2015-07-01 11:00:00");
+ Assert.assertEquals(result.getContractTerminatedMode().intValue(), 2);
+ } finally {
+ XmlConfig.fastMode = false;
+ }
+ }
}