From d8668fd36452cb1fe20ab3170c7fd638519efec2 Mon Sep 17 00:00:00 2001 From: ihao <13112651622@163.com> Date: Wed, 2 Jul 2025 16:31:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BE=AE=E4=BF=A1h5=E7=BA=AF=E7=AD=BE?= =?UTF-8?q?=E7=BA=A6=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=9D=9E?= =?UTF-8?q?=E5=BF=85=E5=A1=AB=E5=AD=97=E6=AE=B5=E5=88=A4=E6=96=AD=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E5=8A=A0=E5=85=A5url=EF=BC=8C=E5=90=A6=E5=88=99?= =?UTF-8?q?=E6=8B=BC=E6=8E=A5=E4=B8=BAnull=E5=80=BC=EF=BC=8C=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E7=AD=BE=E5=90=8D=E9=AA=8C=E8=AF=81=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxpay/service/impl/WxEntrustPapServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java index 951c1d5a8..8a90ea350 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java @@ -10,6 +10,7 @@ import com.github.binarywang.wxpay.util.SignUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.util.json.WxGsonBuilder; +import org.apache.commons.lang3.StringUtils; import java.net.URLEncoder; @@ -65,8 +66,13 @@ public class WxEntrustPapServiceImpl implements WxEntrustPapService { strBuilder.append("&contract_code=").append(wxH5EntrustRequest.getContractCode()); strBuilder.append("&contract_display_account=").append(URLEncoder.encode(wxH5EntrustRequest.getContractDisplayAccount())); strBuilder.append("&mch_id=").append(wxH5EntrustRequest.getMchId()).append("¬ify_url=").append(URLEncoder.encode(wxH5EntrustRequest.getNotifyUrl())); - strBuilder.append("&plan_id=").append(wxH5EntrustRequest.getPlanId()).append("&outerid=").append(URLEncoder.encode(wxH5EntrustRequest.getOuterId())); - strBuilder.append("&return_appid=").append(wxH5EntrustRequest.getReturnAppid()); + strBuilder.append("&plan_id=").append(wxH5EntrustRequest.getPlanId()); + if (StringUtils.isNotEmpty(wxH5EntrustRequest.getOuterId())) { + strBuilder.append("&outerid=").append(URLEncoder.encode(wxH5EntrustRequest.getOuterId())); + } + if (StringUtils.isNotEmpty(wxH5EntrustRequest.getReturnAppid())) { + strBuilder.append("&return_appid=").append(wxH5EntrustRequest.getReturnAppid()); + } strBuilder.append("&clientip=").append(wxH5EntrustRequest.getClientIp()); strBuilder.append("&request_serial=").append(wxH5EntrustRequest.getRequestSerial()).append("×tamp=").append(wxH5EntrustRequest.getTimestamp()); strBuilder.append("&version=").append(wxH5EntrustRequest.getVersion()).append("&sign=").append(sign); -- Gitee From a9a5b6cdde613517165a8f58126b46a1f8f5a184 Mon Sep 17 00:00:00 2001 From: ihao <13112651622@163.com> Date: Thu, 3 Jul 2025 14:08:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E7=AD=BE=E7=BA=A6=E3=80=81=E8=A7=A3=E7=BA=A6=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E9=80=9A=E7=9F=A5xml=E8=A7=A3=E6=9E=90=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E9=AA=8C=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxpay/service/WxEntrustPapService.java | 18 ++++++++++++++++++ .../service/impl/WxEntrustPapServiceImpl.java | 7 +++++++ 2 files changed, 25 insertions(+) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxEntrustPapService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxEntrustPapService.java index 168e43696..1a1ddb120 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxEntrustPapService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxEntrustPapService.java @@ -166,4 +166,22 @@ public interface WxEntrustPapService { * @throws WxPayException the wx pay exception */ WxWithholdOrderQueryResult papOrderQuery(WxWithholdOrderQueryRequest wxWithholdOrderQueryRequest) throws WxPayException; + + /** + *
+   *   签约、解约结果通知解析
+   *   详见:签约、解约结果通知
+   *   注意:
+   *    1、同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是:当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理,则再进行处理;如果已处理,则直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
+   *    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(单位:秒))后没有收到微信侧回调,商户应调用查询订单接口确认订单状态。
+   *   特别提醒:
+   *    1、商户系统对于签约、解约结果通知的内容一定要做签名验证,并校验返回的商户协议号和用户openid信息是否一致,防止数据泄露导致出现“假通知”,造成损失。
+   *    2、当收到通知进行处理时,首先检查对应业务数据的状态,判断该通知是否已经处理过,如果没有处理过再进行处理,如果处理过直接返回结果成功。在对业务数据进行状态检查和处理之前,要采用数据锁进行并发控制,以避免函数重入造成的数据混乱。
+   * 
+ * + * @param xmlData the wx withhold order query request + * @return wx sign result + * @throws WxPayException the wx pay exception + */ + WxSignQueryResult parseSignNotifyResult(String xmlData) throws WxPayException; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java index 8a90ea350..b70a7dee3 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/WxEntrustPapServiceImpl.java @@ -154,4 +154,11 @@ public class WxEntrustPapServiceImpl implements WxEntrustPapService { wxWithholdOrderQueryResult.checkResult(payService, wxWithholdOrderQueryRequest.getSignType(), true); return wxWithholdOrderQueryResult; } + + @Override + public WxSignQueryResult parseSignNotifyResult(String xmlData) throws WxPayException { + WxSignQueryResult result = BaseWxPayResult.fromXML(xmlData, WxSignQueryResult.class); + result.checkResult(payService, WxPayConstants.SignType.MD5, true); + return result; + } } -- Gitee