🎨 #3942 【微信支付】修复WxSignQueryResult 缺少 change_type 和 operate_time 字段导致签约回调无法判断类型
This commit is contained in:
@@ -102,6 +102,36 @@ public class WxSignQueryResult extends BaseWxPayResult implements Serializable {
|
|||||||
@XStreamAlias("openid")
|
@XStreamAlias("openid")
|
||||||
private String openId;
|
private String openId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 变更类型, ADD:签约,DELETE:解约
|
||||||
|
* 签约/解约回调通知时返回
|
||||||
|
*/
|
||||||
|
@XStreamAlias("change_type")
|
||||||
|
private String changeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作时间
|
||||||
|
* 签约/解约回调通知时返回
|
||||||
|
*/
|
||||||
|
@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
|
@Override
|
||||||
protected void loadXml(Document d) {
|
protected void loadXml(Document d) {
|
||||||
@@ -117,6 +147,8 @@ public class WxSignQueryResult extends BaseWxPayResult implements Serializable {
|
|||||||
contractTerminatedMode = readXmlInteger(d, "contract_termination_mode");
|
contractTerminatedMode = readXmlInteger(d, "contract_termination_mode");
|
||||||
contractTerminationRemark = readXmlString(d, "contract_termination_remark");
|
contractTerminationRemark = readXmlString(d, "contract_termination_remark");
|
||||||
openId = readXmlString(d, "openid");
|
openId = readXmlString(d, "openid");
|
||||||
|
changeType = readXmlString(d, "change_type");
|
||||||
|
operateTime = readXmlString(d, "operate_time");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -117,9 +117,74 @@ public class WxSignQueryResultTest {
|
|||||||
Assert.assertNull(result.getContractTerminatedTime());
|
Assert.assertNull(result.getContractTerminatedTime());
|
||||||
Assert.assertNull(result.getContractTerminatedMode());
|
Assert.assertNull(result.getContractTerminatedMode());
|
||||||
Assert.assertNull(result.getContractTerminationRemark());
|
Assert.assertNull(result.getContractTerminationRemark());
|
||||||
|
Assert.assertNull(result.getChangeType());
|
||||||
|
Assert.assertNull(result.getOperateTime());
|
||||||
} finally {
|
} finally {
|
||||||
// 恢复默认值
|
// 恢复默认值
|
||||||
XmlConfig.fastMode = false;
|
XmlConfig.fastMode = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 测试签约回调通知 XML 解析 - change_type = ADD
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testFromXML_SignCallback_Add() {
|
||||||
|
String xmlString = "<xml>\n" +
|
||||||
|
" <return_code><![CDATA[SUCCESS]]></return_code>\n" +
|
||||||
|
" <appid><![CDATA[wx426b3015555b46be]]></appid>\n" +
|
||||||
|
" <mch_id><![CDATA[10000098]]></mch_id>\n" +
|
||||||
|
" <contract_id><![CDATA[Wx15463511252015071056489715]]></contract_id>\n" +
|
||||||
|
" <plan_id>123</plan_id>\n" +
|
||||||
|
" <openid><![CDATA[ozoKAt9TIPHfwVMkcniiNKZ1vbyw]]></openid>\n" +
|
||||||
|
" <request_serial>1695</request_serial>\n" +
|
||||||
|
" <contract_code><![CDATA[100001256]]></contract_code>\n" +
|
||||||
|
" <change_type><![CDATA[ADD]]></change_type>\n" +
|
||||||
|
" <operate_time>2015-07-01 10:00:00</operate_time>\n" +
|
||||||
|
" <contract_expired_time>2016-07-01 10:00:00</contract_expired_time>\n" +
|
||||||
|
" <sign><![CDATA[C380BEC2BFD727A4B6845133519F3AD6]]></sign>\n" +
|
||||||
|
"</xml>";
|
||||||
|
|
||||||
|
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 = "<xml>\n" +
|
||||||
|
" <return_code><![CDATA[SUCCESS]]></return_code>\n" +
|
||||||
|
" <appid><![CDATA[wx426b3015555b46be]]></appid>\n" +
|
||||||
|
" <mch_id><![CDATA[10000098]]></mch_id>\n" +
|
||||||
|
" <contract_id><![CDATA[Wx15463511252015071056489715]]></contract_id>\n" +
|
||||||
|
" <plan_id>123</plan_id>\n" +
|
||||||
|
" <openid><![CDATA[ozoKAt9TIPHfwVMkcniiNKZ1vbyw]]></openid>\n" +
|
||||||
|
" <request_serial>1695</request_serial>\n" +
|
||||||
|
" <contract_code><![CDATA[100001256]]></contract_code>\n" +
|
||||||
|
" <change_type><![CDATA[DELETE]]></change_type>\n" +
|
||||||
|
" <operate_time>2015-07-01 11:00:00</operate_time>\n" +
|
||||||
|
" <contract_termination_mode>2</contract_termination_mode>\n" +
|
||||||
|
" <sign><![CDATA[C380BEC2BFD727A4B6845133519F3AD6]]></sign>\n" +
|
||||||
|
"</xml>";
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user