Просмотр исходного кода

[微信回调][修复]:支持不同验签方式

release_toaliyun_real
Stormeye.Wu 7 лет назад
Родитель
Сommit
ed009a9b7d
2 измененных файлов: 34 добавлений и 5 удалений
  1. +15
    -0
      mallinkService/src/main/java/com/simple/pay/WxPayment.java
  2. +19
    -5
      mallinkService/src/main/java/com/simple/service/impl/WxPayOrderServiceImpl.java

+ 15
- 0
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<String, String> params, String paternerKey) {
String sign = params.get("sign");
String localSign = WxPayment.createSignHMAC(params, paternerKey);
return sign.equals(localSign);
}

/**
* 判断接口返回的code是否是SUCCESS
*


+ 19
- 5
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();


Загрузка…
Отмена
Сохранить