@@ -20,6 +20,7 @@ import com.iformall.pay.WxRefundOrderSP;
import com.iformall.service.WxOrderService;
import com.iformall.service.WxRefundOrderService;
import com.iformall.utils.BeanUtils;
import com.iformall.utils.CipherUtil;
import com.iformall.utils.Utility;
import com.iformall.utils.XmlUtil;
import org.apache.commons.lang3.StringUtils;
@@ -689,60 +690,57 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
String partnerKey = payAccount.getApiKey();
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 (!"SUCCESS".equals(paramMap.get("return_code"))) {
logger.warn("notify o rder , wxpay status not success, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
logger.warn("notify refund, wxpay status not success, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "订单状态码非SUCCESS");
return XmlUtil.getRequestXml(resultMap);
}
String payOrderNo = paramMap.get("out_trade_no");
// 解密req_info
String req_info = CipherUtil.decryptReqInfo(paramMap.get("req_info"), partnerKey);
Map<String, String> reqMap = WxPayment.xmlToMap(req_info);
String payOrderNo = reqMap.get("out_trade_no");
Long payOrderId = Long.valueOf(payOrderNo);
WxPayOrder payOrder = wxPayOrderMapper.selectByPrimaryKey(payOrderId);
if (payOrder == null) {
logger.warn("notify order, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
logger.warn("notify refun d, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "支付订单不存在");
return XmlUtil.getRequestXml(resultMap);
}
// 验证支付金额
if(!param Map.get("total_fee").equals(payOrder.getPayAmount().toString())) {
logger.warn("notify o rder , wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
if(!req Map.get("total_fee").equals(payOrder.getPayAmount().toString())) {
logger.warn("notify refun d, wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "支付订单总金额不一致");
return XmlUtil.getRequestXml(resultMap);
}
String refundIdStr = param Map.get("out_refund_no");
String refundIdStr = req Map.get("out_refund_no");
Long refundOrderId = Long.valueOf(refundIdStr);
WxRefundOrder refundOrder = wxRefundOrderMapper.selectByPrimaryKey(refundOrderId);
if (refundOrder == null) {
logger.warn("notify o rder , wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
logger.warn("notify refun d, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "退款订单不存在");
return XmlUtil.getRequestXml(resultMap);
}
// 验证支付金额
if(!param Map.get("total_fee").equals(refundOrder.getTotalFee().toString())) {
logger.warn("notify o rder , wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
if(!req Map.get("total_fee").equals(refundOrder.getTotalFee().toString())) {
logger.warn("notify refun d, wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "订单总金额不一致");
return XmlUtil.getRequestXml(resultMap);
}
// 验证退款金额
if(!param Map.get("refund_fee").equals(refundOrder.getRefundFee().toString())) {
logger.warn("notify o rder , wxpay check refund_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
if(!req Map.get("refund_fee").equals(refundOrder.getRefundFee().toString())) {
logger.warn("notify refun d, wxpay check refund_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "退款总金额不一致");
@@ -750,16 +748,19 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
}
// 处理支付成功
handleRefundSuccess(refundOrder, paramMap.get("transaction_id"), param Map.get("refund_id"));
logger.info("notify o rder , wxpay checksign success, paramMap:{}, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
handleRefundSuccess(refundOrder, reqMap.get("transaction_id"), req Map.get("refund_id"));
logger.info("notify refun d, wxpay checksign success, paramMap:{}, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "SUCCESS");
resultMap.put("return_msg", "OK");
return XmlUtil.getRequestXml(resultMap);
}
} catch (RuntimeException e) {
logger.warn("notify order, alipay checksign error, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR);
logger.warn("notify refund paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), e.getMessage());
} catch (Exception e) {
logger.warn("notify refund, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), e.getMessage());
}
} else {
// 服务号回调
@@ -780,13 +781,6 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
String partnerKey = payAccount.getApiKey();
try {
if (payWay == EnumPayWay.PAY_WAY_WEAPP) {
boolean signVerified = false;
// 微信支付
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();
@@ -795,7 +789,12 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
return XmlUtil.getRequestXml(resultMap);
}
String payOrderNo = paramMap.get("out_trade_no");
// 解密req_info
String req_info = CipherUtil.decryptReqInfo(paramMap.get("req_info"), partnerKey);
logger.info(req_info);
Map<String, String> reqMap = WxPayment.xmlToMap(req_info);
String payOrderNo = reqMap.get("out_trade_no");
if (payOrderNo == null) {
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "SUCCESS");
@@ -805,41 +804,41 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
Long payOrderId = Long.valueOf(payOrderNo);
WxPayOrder payOrder = wxPayOrderMapper.selectByPrimaryKey(payOrderId);
if (payOrder == null) {
logger.warn("notify o rder , wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
logger.warn("notify refun d, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "支付订单不存在");
return XmlUtil.getRequestXml(resultMap);
}
// 验证支付金额
if(!param Map.get("total_fee").equals(payOrder.getPayAmount().toString())) {
logger.warn("notify o rder , wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
if(!req Map.get("total_fee").equals(payOrder.getPayAmount().toString())) {
logger.warn("notify refun d, wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "支付订单总金额不一致");
return XmlUtil.getRequestXml(resultMap);
}
String refundIdStr = param Map.get("out_refund_no");
String refundIdStr = req Map.get("out_refund_no");
Long refundOrderId = Long.valueOf(refundIdStr);
WxRefundOrder refundOrder = wxRefundOrderMapper.selectByPrimaryKey(refundOrderId);
if (refundOrder == null) {
logger.warn("notify o rder , wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
logger.warn("notify refun d, wxpay check pay order not exists, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "退款订单不存在");
return XmlUtil.getRequestXml(resultMap);
}
// 验证支付金额
if(!param Map.get("total_fee").equals(refundOrder.getTotalFee().toString())) {
logger.warn("notify o rder , wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
if(!req Map.get("total_fee").equals(refundOrder.getTotalFee().toString())) {
logger.warn("notify refun d, wxpay check total_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "订单总金额不一致");
return XmlUtil.getRequestXml(resultMap);
}
// 验证退款金额
if(!param Map.get("refund_fee").equals(refundOrder.getRefundFee().toString())) {
logger.warn("notify o rder , wxpay check refund_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
if(!req Map.get("refund_fee").equals(refundOrder.getRefundFee().toString())) {
logger.warn("notify refun d, wxpay check refund_fee is invalid, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "FAIL");
resultMap.put("return_msg", "退款总金额不一致");
@@ -847,16 +846,19 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService {
}
// 处理支付成功
handleRefundSuccess(refundOrder, paramMap.get("transaction_id"), param Map.get("refund_id"));
logger.info("notify o rder , wxpay checksign success, paramMap:{}, paramMap: "+param Map.toString()+ ", payWay:" + payWay.toString());
handleRefundSuccess(refundOrder, reqMap.get("transaction_id"), req Map.get("refund_id"));
logger.info("notify refun d, wxpay checksign success, paramMap:{}, paramMap: "+req Map.toString()+ ", payWay:" + payWay.toString());
SortedMap resultMap = new TreeMap();
resultMap.put("return_code", "SUCCESS");
resultMap.put("return_msg", "OK");
return XmlUtil.getRequestXml(resultMap);
}
} catch (RuntimeException e) {
logger.warn("notify o rder , wepay checksign error, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage());
logger.warn("notify refun d, wepay checksign error, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR);
} catch (Exception e) {
logger.warn("notify refund, paramMap: "+paramMap.toString()+ ", payWay:" + payWay.toString() + ", e:" + e.getMessage());
throw new MallinkException(ErrorCode.REFUND_ORDER_ERROR.getCode(), e.getMessage());
}
}