diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java index d6005386..f826423f 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java @@ -108,6 +108,7 @@ public enum SystemConfigEnum { USER_AGREEMENT("/#/agreement/user", "用户协议地址",SystemConfigGroupEnum.SYSTEM), OPEN_OLD_REGISTER_CODE("1", "是否开启无验证码注册接口",SystemConfigGroupEnum.SYSTEM, new BooleanSystemConfigCheck()), ANCHOR_JOIN_AGREEMENT("/#/agreement/anchor-join", "主播入驻协议地址",SystemConfigGroupEnum.SYSTEM), + PAY_CUSTOM("", "支付定向测试",SystemConfigGroupEnum.SYSTEM), WS_SOCKET_URL("ws://localhost:8080/ws?token=%s&room_id=%s", "ws通讯地址",SystemConfigGroupEnum.SYSTEM), ; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java index 9c83c106..0d1d5358 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/service/impl/PayTrdConfigServiceImpl.java @@ -4,6 +4,8 @@ import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.cai.domain.PayTrdConfig; +import com.ruoyi.cai.enums.SystemConfigEnum; +import com.ruoyi.cai.manager.SystemConfigManager; import com.ruoyi.cai.mapper.PayTrdConfigMapper; import com.ruoyi.cai.pay.PayManager; import com.ruoyi.cai.pay.PayOrderInfoDTO; @@ -13,6 +15,8 @@ import com.ruoyi.cai.service.PayTrdConfigService; import com.ruoyi.cai.trdpay.TrdPayManager; import com.ruoyi.cai.trdpay.TrdPayTypeEnum; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -43,6 +47,8 @@ public class PayTrdConfigServiceImpl extends ServiceImpl ACCOUNT_MAP = new ConcurrentHashMap<>(); private final static List PAY_TRD_CONFIG_LIST = new CopyOnWriteArrayList<>(); @@ -63,7 +69,17 @@ public class PayTrdConfigServiceImpl extends ServiceImpl createParamsOfMap(Map params, String key,String signKey) { + 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=" + key; + String sign = DigestUtil.md5Hex(stringSignTemp).toUpperCase(); + resp.add(signKey,sign); + return resp; + } + public static MultiValueMap createParamsOfMap(Map params, String key) { MultiValueMap resp = new LinkedMultiValueMap<>(); List url = new ArrayList<>(); @@ -21,7 +37,6 @@ public class PayMd5Util { url = url.stream().sorted().collect(Collectors.toList()); String stringSignTemp = StringUtils.join(url, "&") + "&key=" + key; String sign = DigestUtil.md5Hex(stringSignTemp).toUpperCase(); - url.add("sign=" + sign); resp.add("sign",sign); return resp; } diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/TrdPayTypeEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/TrdPayTypeEnum.java index a0415159..b7a3420a 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/TrdPayTypeEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/TrdPayTypeEnum.java @@ -49,7 +49,7 @@ public enum TrdPayTypeEnum { * 商务号:241288099 * 秘钥:69i3orn6idkvbopr42s3f4aaldhybzmr * 对接文档:http://ybax.guanghui.sgzhfu.com/api.pdf - * 支付宝编码 8000 + * 支付宝编码:8000 微信编码:8001 */ V5("http://ybax.guanghui.sgzhfu.com","/Pay_Index.html","/Pay_Trade_query.html","/api/pay/trd/notify/v5","OK"), /** diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java index 56d8293f..2c4b8c86 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/trdpay/handle/PayTrdV5Service.java @@ -1,5 +1,6 @@ package com.ruoyi.cai.trdpay.handle; +import cn.hutool.crypto.digest.DigestUtil; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.google.api.client.util.SecurityUtils; @@ -19,17 +20,24 @@ import com.ruoyi.common.utils.ServletUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; @Service @Slf4j -@Deprecated public class PayTrdV5Service implements PayTrdService { @Autowired @@ -49,27 +57,29 @@ public class PayTrdV5Service implements PayTrdService { Map params = new HashMap<>(); params.put("pay_memberid", payTrdConfig.getMchId()); params.put("pay_orderid", payOrderInfoDTO.getOrderNo()); - params.put("pay_bankcode", payTrdConfig.getAliProductId()); params.put("pay_applydate", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - params.put("pay_amount", payOrderInfoDTO.getPrice().toString()); + params.put("pay_bankcode", payTrdConfig.getAliProductId()); String notifyUrl = payTrdConfig.getNotifyUrl() + type.getNotifyPath(); params.put("pay_notifyurl", notifyUrl); - params.put("pay_productname",payOrderInfoDTO.getBody()); - params.put("pay_ip", ServletUtils.getClientIP()); - params.put("pay_userid", LoginHelper.getUserId()+""); - String para = PayMd5Util.createParams(params, payTrdConfig.getSign(), "pay_md5sign"); + params.put("pay_amount", payOrderInfoDTO.getPriceYuanStr()); + MultiValueMap map = PayMd5Util.createParamsOfMap(params, payTrdConfig.getSign(), "pay_md5sign"); + map.add("pay_productname",payOrderInfoDTO.getBody()); + map.add("pay_ip", ServletUtils.getClientIP()); + map.add("pay_userid", LoginHelper.getUserId()+""); String gatewayUrl = type.getGatewayUrl(); if (StringUtils.isNotBlank(payTrdConfig.getGatewayUrl())) { gatewayUrl = payTrdConfig.getGatewayUrl(); } String createOrderUrl = gatewayUrl + type.getCreateOrderUrl(); - String url = createOrderUrl + "?" + para; - String body = rest.postForObject(url, null, String.class); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + HttpEntity> request = new HttpEntity<>(map, headers); + String body = rest.postForObject(createOrderUrl, request, String.class); JSONObject jsonObject = JSON.parseObject(body); boolean success = checkSuccess(jsonObject); - orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), url, jsonObject, success, type); + orderLogsService.createAliPayLogs(payOrderInfoDTO.getOrderNo(), createOrderUrl+JSON.toJSONString(map), jsonObject, success, type); if(!success){ - log.info("第三方支付失败 V5 统一支付失败失败 url={} body={}, payTrdConfig={}, typeEnum={}", url, body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); + log.info("第三方支付失败 V7 统一支付失败失败 url={} params={} body={}, payTrdConfig={}, typeEnum={}", createOrderUrl,JSON.toJSONString(map), body, JSON.toJSONString(payTrdConfig), JSON.toJSONString(jsonObject)); throw new ServiceException("调用支付失败"); } String payUrl = jsonObject.getString("h5_url");