From ed009a9b7d768d95b10f1813fcd0769d747e70b9 Mon Sep 17 00:00:00 2001 From: "Stormeye.Wu" Date: Thu, 6 Sep 2018 20:34:39 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=BE=AE=E4=BF=A1=E5=9B=9E=E8=B0=83][?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D]:=E6=94=AF=E6=8C=81=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E9=AA=8C=E7=AD=BE=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/simple/pay/WxPayment.java | 15 ++++++++++++ .../service/impl/WxPayOrderServiceImpl.java | 24 +++++++++++++++---- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/mallinkService/src/main/java/com/simple/pay/WxPayment.java b/mallinkService/src/main/java/com/simple/pay/WxPayment.java index 9eb183287..40d1e442d 100644 --- a/mallinkService/src/main/java/com/simple/pay/WxPayment.java +++ b/mallinkService/src/main/java/com/simple/pay/WxPayment.java @@ -434,6 +434,21 @@ public class WxPayment { return sign.equals(localSign); } + /** + * 支付异步通知时校验sign + * + * @param params + * 参数 + * @param paternerKey + * 支付密钥 + * @return {boolean} + */ + public static boolean verifyNotifyHMAC(Map params, String paternerKey) { + String sign = params.get("sign"); + String localSign = WxPayment.createSignHMAC(params, paternerKey); + return sign.equals(localSign); + } + /** * 判断接口返回的code是否是SUCCESS * diff --git a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java index 421a3726d..98d1156a5 100644 --- a/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java @@ -516,17 +516,21 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { String mchId = paramMap.get("mch_id"); String subMchId = paramMap.get("sub_mch_id"); WxAppinfo appinfo = null; + boolean isNormal = true; if (StringUtils.isBlank(subAppId) && StringUtils.isBlank(subMchId)) { // 普通商户号 appinfo = wxAppinfoMapper.findByAppId(appId); if (appinfo == null) { throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); } + isNormal = true; } else { + // 服务号 现在用hmac-sha256 appinfo = wxAppinfoMapper.findByAppId(subAppId); if (appinfo == null) { throw new MallinkException(ErrorCode.APP_ID_NOT_FOUND); } + isNormal = false; } WxPayAccount payAccount = wxPayAccountMapper.selectByPrimaryKey(appinfo.getPayId()); @@ -537,12 +541,22 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { try { if (payWay == EnumPayWay.PAY_WAY_WEAPP) { boolean signVerified = false; - // 微信支付 - signVerified = WxPayment.verifyNotify(paramMap, partnerKey); - if (!signVerified) { - logger.warn("notify order, wxpay checksign error, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); - throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + if (isNormal) { + // 普通商户号支付 + signVerified = WxPayment.verifyNotify(paramMap, partnerKey); + if (!signVerified) { + logger.warn("notify order, wxpay checksign error, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); + throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } + } else { + // 服务号 现在用hmac-sha256 + signVerified = WxPayment.verifyNotifyHMAC(paramMap, partnerKey); + if (!signVerified) { + logger.warn("notify order, wxpay checksign error, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); + throw new MallinkException(ErrorCode.PAY_ORDER_NOTIFY_CHECK_SIGN_ERROR); + } } + if (!"SUCCESS".equals(paramMap.get("return_code"))) { logger.warn("notify order, wxpay status not success, paramMap: " + paramMap.toString() + ", payWay:" + payWay.toString()); SortedMap resultMap = new TreeMap();