fix: WxSignQueryResult 缺少 change_type 和 operate_time 字段导致签约回调无法判断类型#3942
fix: WxSignQueryResult 缺少 change_type 和 operate_time 字段导致签约回调无法判断类型#3942
Conversation
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com> Agent-Logs-Url: https://github.com/binarywang/WxJava/sessions/9b604dd5-ff35-4198-b2dd-5db33fb0176c
🤖 Augment PR SummarySummary: Fixes entrust (PAP) sign/un-sign callback parsing by adding missing fields to 🤖 Was this summary useful? React with 👍 or 👎 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a8afc1d3c6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @XStreamAlias("change_type") | ||
| private String changeType; |
There was a problem hiding this comment.
Preserve all-args constructor binary compatibility
Adding new fields to this class changes the Lombok-generated @AllArgsConstructor signature, so downstream code compiled against the previous 11-argument constructor will hit NoSuchMethodError at runtime after upgrading this library jar. This is a backward-compatibility regression for consumers who instantiate WxSignQueryResult directly; consider keeping the old constructor explicitly (or avoiding a public all-args API) before adding new constructor parameters.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Pull request overview
本次 PR 修复微信支付委托代扣「签约/解约结果通知」解析结果中缺少 change_type 与 operate_time 的问题,使调用方能够区分签约(ADD)与解约(DELETE)回调类型,符合 SDK 在回调处理场景的字段完整性预期(关联 #3941)。
Changes:
- 为
WxSignQueryResult新增changeType(change_type)、operateTime(operate_time)字段 - 在
WxSignQueryResult#loadXml()中补充对上述字段的解析(覆盖XmlConfig.fastMode=true分支)
| */ | ||
| @XStreamAlias("operate_time") | ||
| private String operateTime; | ||
|
|
There was a problem hiding this comment.
该类使用了 Lombok 的 @AllArgsConstructor;新增 changeType/operateTime 字段会改变全参构造函数签名,导致依赖旧构造函数的调用方在编译期或运行期出现不兼容(NoSuchMethodError)。为保持向后兼容,建议显式补一个与旧字段列表一致的构造函数并标注 @deprecated(内部委托到新的全参构造),或移除/限制全参构造函数的对外暴露(例如改为 Builder)。
| /** | |
| * 兼容旧版本的构造函数(不包含 changeType、operateTime 字段)。 | |
| * <p> | |
| * 新增字段后,为保持向后兼容而保留旧签名,内部委托到新的全参构造函数。 | |
| * | |
| * @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); | |
| } |
| 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"); |
There was a problem hiding this comment.
新增字段的 XML 解析逻辑(change_type/operate_time)目前没有对应的单元测试覆盖。仓库中已存在 WxSignQueryResultTest 且会开启 XmlConfig.fastMode 覆盖 loadXml 分支,建议补充包含 change_type/operate_time 的回调 XML 样例并断言 changeType/operateTime 能被正确解析(同时可保留字段缺失时为 null 的断言)。
WxEntrustPapService.parseSignNotifyResult()返回WxSignQueryResult,但该类缺少change_type字段,导致调用方无法区分签约(ADD)和解约(DELETE)回调。Changes
WxSignQueryResult:新增changeType(change_type)和operateTime(operate_time)字段,并在loadXml()中补充解析逻辑此改动向后兼容,
WxSignQueryResult的查询场景不受影响。Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.