Skip to content

Commit 696ce86

Browse files
ihao56binarywang
authored andcommitted
🆕 #3636【微信支付】增加微信签约、解约结果通知解析的方法
1 parent 8c81395 commit 696ce86

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxEntrustPapService.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,4 +166,22 @@ public interface WxEntrustPapService {
166166
* @throws WxPayException the wx pay exception
167167
*/
168168
WxWithholdOrderQueryResult papOrderQuery(WxWithholdOrderQueryRequest wxWithholdOrderQueryRequest) throws WxPayException;
169+
170+
/**
171+
* <pre>
172+
* 签约、解约结果通知解析
173+
* 详见:<a href="https://pay.weixin.qq.com/doc/v2/merchant/4011987586">签约、解约结果通知</a>
174+
* 注意:
175+
* 1、同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是:当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
176+
* 2、如果在所有通知频率(0/10/10/10/30/30/30/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300/300(单位:秒))后没有收到微信侧回调,商户应调用查询订单接口确认订单状态。
177+
* 特别提醒:
178+
* 1、商户系统对于签约、解约结果通知的内容一定要做签名验证,并校验返回的商户协议号和用户openid信息是否一致,防止数据泄露导致出现“假通知”,造成损失。
179+
* 2、当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
180+
* </pre>
181+
*
182+
* @param xmlData the wx withhold order query request
183+
* @return wx sign result
184+
* @throws WxPayException the wx pay exception
185+
*/
186+
WxSignQueryResult parseSignNotifyResult(String xmlData) throws WxPayException;
169187
}

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,4 +154,11 @@ public WxWithholdOrderQueryResult papOrderQuery(WxWithholdOrderQueryRequest wxWi
154154
wxWithholdOrderQueryResult.checkResult(payService, wxWithholdOrderQueryRequest.getSignType(), true);
155155
return wxWithholdOrderQueryResult;
156156
}
157+
158+
@Override
159+
public WxSignQueryResult parseSignNotifyResult(String xmlData) throws WxPayException {
160+
WxSignQueryResult result = BaseWxPayResult.fromXML(xmlData, WxSignQueryResult.class);
161+
result.checkResult(payService, WxPayConstants.SignType.MD5, true);
162+
return result;
163+
}
157164
}

0 commit comments

Comments
 (0)