From 7db1c286a60db70d472df506f3636c9534c5329c Mon Sep 17 00:00:00 2001 From: 777 <123@qwe.com> Date: Mon, 13 Jan 2025 20:41:15 +0800 Subject: [PATCH] 33333333333 --- .../web/controller/cai/app/PayController.java | 23 ++++++++++++- .../impl/AccountChangeLogServiceImpl.java | 3 ++ .../com/ruoyi/cai/trdpay/TrdPayTypeEnum.java | 2 +- .../cai/trdpay/handle/PayTrdV8Service.java | 33 ++++++++++++++----- 4 files changed, 51 insertions(+), 10 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java index 22b8e940..9f926b5e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/cai/app/PayController.java @@ -304,12 +304,33 @@ public class PayController { } } + @GetMapping(value = "/trd/notify/v8") + @Operation(hidden = true) + @Log(title = "第三方支付回调V8", businessType = BusinessType.OTHER, isSaveDb = false) + @SaIgnore + public String trdNotifyUrlV8(HttpServletRequest request) { + try { + TrdPayTypeEnum trdPayTypeEnum = TrdPayTypeEnum.V8; + Map params = AliPayApi.toMap(request); + log.info("收到第三方支付回调 {}:{}",trdPayTypeEnum.name(), JSON.toJSONString(params)); + NotifyResp notifyResp = trdPayManager.getNotifyResp(params, trdPayTypeEnum); + if(!notifyResp.isSuccess()){ + return "failure"; + } + payManager.callBack(notifyResp.getOrderNo(),notifyResp.getTrdOrderNo(),params,notifyResp.getPayTypeEnum().name(), PayTypeEnum.TRD); + return trdPayTypeEnum.getNotifyResp(); + } catch (Exception e) { + log.error("第三方支付回调失败! V8", e); + return "failure"; + } + } + @PostMapping(value = "/trd/notify/{type}") @Operation(hidden = true) @Log(title = "第三方支付回调", businessType = BusinessType.OTHER, isSaveDb = false) @SaIgnore - public String trdNotifyUrlV1(HttpServletRequest request,@PathVariable("type") String type) { + public String trdNotifyUrl(HttpServletRequest request,@PathVariable("type") String type) { try { if(type == null){ log.error("收到第三方支付回调,支付类型为空"); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountChangeLogServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountChangeLogServiceImpl.java index 96b6fc40..ddf08ebd 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountChangeLogServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/AccountChangeLogServiceImpl.java @@ -177,6 +177,9 @@ public class AccountChangeLogServiceImpl extends ServiceImpl createParamsOfMap(Map params, String key) { + MultiValueMap resp = new LinkedMultiValueMap<>(); + List url = new ArrayList<>(); + for (Map.Entry entry : params.entrySet()) { + url.add(entry.getKey() + "=" + entry.getValue()); + resp.add(entry.getKey(), entry.getValue()); + } + url = url.stream().sorted().collect(Collectors.toList()); + String stringSignTemp = StringUtils.join(url, "&") + key; + String sign = DigestUtil.md5Hex(stringSignTemp).toLowerCase(); + url.add("sign=" + sign); + resp.add("sign",sign); + return resp; + } + + @Override public PayReturnResp createOrderAli(PayOrderInfoDTO payOrderInfoDTO, PayTrdConfig payTrdConfig) { @@ -49,19 +70,15 @@ public class PayTrdV8Service implements PayTrdService { RestTemplate rest = RestTemplateUtil.getNoSSLRest(); Map params = new HashMap<>(); params.put("pid", payTrdConfig.getMchId()); - params.put("method", "jump"); params.put("device", "mobile"); params.put("type", "alipay"); params.put("out_trade_no", payOrderInfoDTO.getOrderNo()); String notifyUrl = payTrdConfig.getNotifyUrl() + type.getNotifyPath(); params.put("notify_url", notifyUrl); - params.put("return_url", ""); params.put("name", payOrderInfoDTO.getSubject()); params.put("money", payOrderInfoDTO.getPriceYuanStr()); params.put("clientip", ServletUtils.getClientIP()); - params.put("timestamp", System.currentTimeMillis()/1000 + ""); - MultiValueMap map = PayMd5Util.createParamsOfMap(params, payTrdConfig.getSign()); - map.add("sign_type","MD5"); + MultiValueMap map = createParamsOfMap(params, payTrdConfig.getSign()); String gatewayUrl = type.getGatewayUrl(); if (StringUtils.isNotBlank(payTrdConfig.getGatewayUrl())) { gatewayUrl = payTrdConfig.getGatewayUrl(); @@ -77,18 +94,18 @@ public class PayTrdV8Service implements PayTrdService { log.error("第三方支付失败 V8 返回数据为空 url={} params={}",createOrderUrl,JSON.toJSONString(map)); throw new ServiceException("调用支付失败"); } - if(!"0".equals(jsonObject.getString("code"))){ + if(!"1".equals(jsonObject.getString("code"))){ log.info("第三方支付失败 V8 统一支付失败失败 url={} params={} body={}, payTrdConfig={}, typeEnum={}", createOrderUrl,JSON.toJSONString(map), body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } - String payUrl = jsonObject.getString("pay_info"); + String payUrl = jsonObject.getString("payurl"); return PayReturnResp.createH5(payUrl); } @Override public NotifyResp getNotifyResp(Map sourceData) { String mchOrderNo = sourceData.get("out_trade_no"); - String payOrderId = sourceData.get("api_trade_no"); + String payOrderId = sourceData.get("trade_no"); String status = sourceData.get("trade_status"); NotifyResp resp = new NotifyResp(); resp.setOrderNo(mchOrderNo);