From 9ba4a975bf81821751bbbb5b60fad07b3e0b0b20 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:25:14 +0000 Subject: [PATCH 1/3] Initial plan From a8afc1d3c66bb58a391d6f9dc00f8401c2ae9c46 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:29:02 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=A7=94=E6=89=98?= =?UTF-8?q?=E4=BB=A3=E6=89=A3=E7=AD=BE=E7=BA=A6=E5=9B=9E=E8=B0=83=E7=BC=BA?= =?UTF-8?q?=E5=B0=91change=5Ftype=E5=AD=97=E6=AE=B5=E8=A7=A3=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/9b604dd5-ff35-4198-b2dd-5db33fb0176c --- .../wxpay/bean/result/WxSignQueryResult.java | 16 ++++++++++++++++ 1 file changed, 16 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 af19aec60..00bf9cda2 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 @@ -102,6 +102,20 @@ public class WxSignQueryResult extends BaseWxPayResult implements Serializable { @XStreamAlias("openid") private String openId; + /** + * 变更类型, ADD:签约,DELETE:解约 + * 签约/解约回调通知时返回 + */ + @XStreamAlias("change_type") + private String changeType; + + /** + * 操作时间 + * 签约/解约回调通知时返回 + */ + @XStreamAlias("operate_time") + private String operateTime; + @Override protected void loadXml(Document d) { @@ -117,6 +131,8 @@ protected void loadXml(Document d) { contractTerminatedMode = readXmlInteger(d, "contract_termination_mode"); contractTerminationRemark = readXmlString(d, "contract_termination_remark"); openId = readXmlString(d, "openid"); + changeType = readXmlString(d, "change_type"); + operateTime = readXmlString(d, "operate_time"); } @Override 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 3/3] =?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 void testFromXML_RequiredFieldsOnly() { 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; + } + } }