diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/PaySignUtil.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/PaySignUtil.java index daae278b..06014d3a 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/PaySignUtil.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/PaySignUtil.java @@ -12,21 +12,21 @@ import java.util.stream.Collectors; public class PaySignUtil { - public static String createMD5ToUpperCase(Map params,String subKey) { - return createMD5(params,subKey).toUpperCase(); + public static String createMD5ToUpperCase(Map params,String signKey) { + return createMD5(params,signKey).toUpperCase(); } - public static String createMD5ToLowerCase(Map params,String subKey) { - return createMD5(params,subKey).toLowerCase(); + public static String createMD5ToLowerCase(Map params,String signKey) { + return createMD5(params,signKey).toLowerCase(); } - public static String createMD5(Map params,String subKey) { + public static String createMD5(Map params,String signKey) { List url = new ArrayList<>(); for (Map.Entry entry : params.entrySet()) { url.add(entry.getKey() + "=" + entry.getValue()); } url = url.stream().sorted().collect(Collectors.toList()); - String stringSignTemp = StringUtils.join(url, "&") + subKey; + String stringSignTemp = StringUtils.join(url, "&") + signKey; return DigestUtil.md5Hex(stringSignTemp); } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV13Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV13Service.java index b5cd38e1..84f303b9 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV13Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV13Service.java @@ -8,7 +8,6 @@ import com.ruoyi.cai.pay.PayOrderInfoDTO; import com.ruoyi.cai.pay.PayReturnResp; import com.ruoyi.cai.service.OrderLogsService; import com.ruoyi.cai.service.PayTrdConfigService; -import com.ruoyi.cai.trdpay.PayMd5Util; import com.ruoyi.cai.trdpay.PaySignUtil; import com.ruoyi.cai.trdpay.PayTrdService; import com.ruoyi.cai.trdpay.TrdPayTypeEnum; @@ -40,10 +39,8 @@ public class PayTrdV13Service implements PayTrdService { public TrdPayTypeEnum getType() { return TrdPayTypeEnum.V13; } - - public static final String PUBLIC_KEY = ""; - - private String v1(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig, boolean wx){ + @Override + public PayReturnResp createOrderAli(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig, boolean wx) { TrdPayTypeEnum type = getType(); Map params = new HashMap<>(); params.put("pid", payTrdConfig.getMchId()); @@ -60,52 +57,21 @@ public class PayTrdV13Service implements PayTrdService { params.put("name", payOrderInfoDTO.getSubject()); params.put("money", payOrderInfoDTO.getPriceYuanStr()); params.put("clientip", ServletUtils.getClientIP()); - String sign = PaySignUtil.createMD5ToLowerCase(params, ""); + String sign = PaySignUtil.createMD5ToLowerCase(params, payTrdConfig.getSign()); MultiValueMap multiValueMap = MapUtils.mapToMultiValueMap(params); multiValueMap.add("sign", sign); multiValueMap.add("sign_type", "MD5"); String gatewayUrl = getGatewayUrl(payTrdConfig); String createOrderUrl = gatewayUrl + type.getCreateOrderUrl(); - return RestTemplateUtil.postFormData(createOrderUrl, multiValueMap); - } - - @Override - public PayReturnResp createOrderAli(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig, boolean wx) { - TrdPayTypeEnum type = getType(); - Map params = new HashMap<>(); - params.put("param", payTrdConfig.getId()+""); - params.put("pid", payTrdConfig.getMchId()); - params.put("method", "jump"); - params.put("device", "mobile"); - if(wx){ - params.put("type", "wxpay"); - }else{ - params.put("type", "alipay"); - } - params.put("out_trade_no", payOrderInfoDTO.getOrderNo()); - String notifyUrl = type.getNotifyUrl(payTrdConfig.getNotifyUrl(), wx); - params.put("notify_url", notifyUrl); -// params.put("return_url", notifyUrl); - params.put("name", payOrderInfoDTO.getSubject()); - params.put("money", payOrderInfoDTO.getPriceYuanStr()); - params.put("clientip", ServletUtils.getClientIP()); - params.put("timestamp", System.currentTimeMillis()/1000+""); - String rsa = PaySignUtil.createRSA256(params, payTrdConfig.getSign(), PUBLIC_KEY); - MultiValueMap multiValueMap = MapUtils.mapToMultiValueMap(params); - MultiValueMap map = PayMd5Util.createParamsOfMapMD5(params, payTrdConfig.getSign()); - multiValueMap.add("sign", rsa); - multiValueMap.add("sign_type", "RSA"); - String gatewayUrl = getGatewayUrl(payTrdConfig); - String createOrderUrl = gatewayUrl + type.getCreateOrderUrl(); String body = RestTemplateUtil.postFormData(createOrderUrl, multiValueMap); JSONObject jsonObject = JSON.parseObject(body); boolean success = checkSuccess(jsonObject); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject, success, type, getStepName(wx)); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(multiValueMap), jsonObject, success, type, getStepName(wx)); if(!success){ - log.info("第三方支付失败 V13 统一支付失败失败 url={} params={} body={}, payTrdConfig={}", createOrderUrl,JSON.toJSONString(map), body, JSON.toJSONString(payTrdConfig)); + log.info("第三方支付失败 V13 统一支付失败失败 url={} params={} body={}, payTrdConfig={}", createOrderUrl,JSON.toJSONString(multiValueMap), body, JSON.toJSONString(payTrdConfig)); throw new ServiceException("调用支付失败"); } - String payUrl = jsonObject.getString("pay_info"); + String payUrl = jsonObject.getString("payurl"); return PayReturnResp.createH5(payUrl); } @@ -113,7 +79,7 @@ public class PayTrdV13Service implements PayTrdService { if(jsonObject == null){ return false; } - if(!"0".equals(jsonObject.getString("code"))){ + if(!"1".equals(jsonObject.getString("code"))){ return false; } return true; @@ -121,26 +87,14 @@ public class PayTrdV13Service implements PayTrdService { @Override public NotifyResp getNotifyResp(Map sourceData) { - String sign = sourceData.get("sign"); String mchOrderNo = sourceData.get("trade_no"); String payOrderId = sourceData.get("out_trade_no"); String status = sourceData.get("trade_status"); - String params = sourceData.get("params"); NotifyResp resp = new NotifyResp(); resp.setOrderNo(mchOrderNo); resp.setTrdOrderNo(payOrderId); resp.setPayTypeEnum(getType()); resp.setSourceData(sourceData); - PayTrdConfig payTrdConfig = payTrdConfigService.getById(params); - if(payTrdConfig == null){ - resp.setSuccess(false); - return resp; - } - boolean checked = PaySignUtil.checkRSA256(sourceData, PUBLIC_KEY, payTrdConfig.getSign(), sign, "sign", "sign_type"); - if(!checked){ - resp.setSuccess(false); - return resp; - } resp.setSuccess("TRADE_SUCCESS".equals(status)); return resp; }