33333333333

This commit is contained in:
777
2025-01-16 00:11:54 +08:00
parent 205298f78b
commit 91ea4d1806
5 changed files with 56 additions and 14 deletions

View File

@@ -108,6 +108,7 @@ public enum SystemConfigEnum {
USER_AGREEMENT("/#/agreement/user", "用户协议地址",SystemConfigGroupEnum.SYSTEM), USER_AGREEMENT("/#/agreement/user", "用户协议地址",SystemConfigGroupEnum.SYSTEM),
OPEN_OLD_REGISTER_CODE("1", "是否开启无验证码注册接口",SystemConfigGroupEnum.SYSTEM, new BooleanSystemConfigCheck()), OPEN_OLD_REGISTER_CODE("1", "是否开启无验证码注册接口",SystemConfigGroupEnum.SYSTEM, new BooleanSystemConfigCheck()),
ANCHOR_JOIN_AGREEMENT("/#/agreement/anchor-join", "主播入驻协议地址",SystemConfigGroupEnum.SYSTEM), 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), WS_SOCKET_URL("ws://localhost:8080/ws?token=%s&room_id=%s", "ws通讯地址",SystemConfigGroupEnum.SYSTEM),
; ;

View File

@@ -4,6 +4,8 @@ import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.PayTrdConfig; 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.mapper.PayTrdConfigMapper;
import com.ruoyi.cai.pay.PayManager; import com.ruoyi.cai.pay.PayManager;
import com.ruoyi.cai.pay.PayOrderInfoDTO; 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.TrdPayManager;
import com.ruoyi.cai.trdpay.TrdPayTypeEnum; import com.ruoyi.cai.trdpay.TrdPayTypeEnum;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper;
import com.ruoyi.common.utils.StringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -43,6 +47,8 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
private PayManager payManager; private PayManager payManager;
@Autowired @Autowired
private OrderLogsService orderLogsService; private OrderLogsService orderLogsService;
@Autowired
private SystemConfigManager systemConfigManager;
private final static Map<BigDecimal, AtomicLong> ACCOUNT_MAP = new ConcurrentHashMap<>(); private final static Map<BigDecimal, AtomicLong> ACCOUNT_MAP = new ConcurrentHashMap<>();
private final static List<PayTrdConfig> PAY_TRD_CONFIG_LIST = new CopyOnWriteArrayList<>(); private final static List<PayTrdConfig> PAY_TRD_CONFIG_LIST = new CopyOnWriteArrayList<>();
@@ -63,7 +69,17 @@ public class PayTrdConfigServiceImpl extends ServiceImpl<PayTrdConfigMapper, Pay
@Override @Override
public PayReturnResp createOrderAli(PayOrderInfoDTO dto){ public PayReturnResp createOrderAli(PayOrderInfoDTO dto){
// PayTrdConfig payTrdConfig = getEnableStatus(); // PayTrdConfig payTrdConfig = getEnableStatus();
PayTrdConfig payTrdConfig = getConfig(dto.getPrice()); String payCustom = systemConfigManager.getSystemConfig(SystemConfigEnum.PAY_CUSTOM);
PayTrdConfig payTrdConfig = null;
if(StringUtils.isNotEmpty(payCustom)){
String[] payCustomSplit = payCustom.split("-");
if(payCustomSplit[0].equals(LoginHelper.getUserId()+"")){
payTrdConfig = this.getById(payCustomSplit[1]);
}
}
if(payTrdConfig == null){
payTrdConfig = getConfig(dto.getPrice());
}
if(payTrdConfig == null){ if(payTrdConfig == null){
throw new ServiceException("未开启支付,请联系客服"); throw new ServiceException("未开启支付,请联系客服");
} }

View File

@@ -11,6 +11,22 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class PayMd5Util { public class PayMd5Util {
public static MultiValueMap<String,String> createParamsOfMap(Map<String, String> params, String key,String signKey) {
MultiValueMap<String, String> resp = new LinkedMultiValueMap<>();
List<String> url = new ArrayList<>();
for (Map.Entry<String, String> 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<String,String> createParamsOfMap(Map<String, String> params, String key) { public static MultiValueMap<String,String> createParamsOfMap(Map<String, String> params, String key) {
MultiValueMap<String, String> resp = new LinkedMultiValueMap<>(); MultiValueMap<String, String> resp = new LinkedMultiValueMap<>();
List<String> url = new ArrayList<>(); List<String> url = new ArrayList<>();
@@ -21,7 +37,6 @@ public class PayMd5Util {
url = url.stream().sorted().collect(Collectors.toList()); url = url.stream().sorted().collect(Collectors.toList());
String stringSignTemp = StringUtils.join(url, "&") + "&key=" + key; String stringSignTemp = StringUtils.join(url, "&") + "&key=" + key;
String sign = DigestUtil.md5Hex(stringSignTemp).toUpperCase(); String sign = DigestUtil.md5Hex(stringSignTemp).toUpperCase();
url.add("sign=" + sign);
resp.add("sign",sign); resp.add("sign",sign);
return resp; return resp;
} }

View File

@@ -49,7 +49,7 @@ public enum TrdPayTypeEnum {
* 商务号241288099 * 商务号241288099
* 秘钥69i3orn6idkvbopr42s3f4aaldhybzmr * 秘钥69i3orn6idkvbopr42s3f4aaldhybzmr
* 对接文档http://ybax.guanghui.sgzhfu.com/api.pdf * 对接文档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"), V5("http://ybax.guanghui.sgzhfu.com","/Pay_Index.html","/Pay_Trade_query.html","/api/pay/trd/notify/v5","OK"),
/** /**

View File

@@ -1,5 +1,6 @@
package com.ruoyi.cai.trdpay.handle; package com.ruoyi.cai.trdpay.handle;
import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.google.api.client.util.SecurityUtils; import com.google.api.client.util.SecurityUtils;
@@ -19,17 +20,24 @@ import com.ruoyi.common.utils.ServletUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; 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.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
@Slf4j @Slf4j
@Deprecated
public class PayTrdV5Service implements PayTrdService { public class PayTrdV5Service implements PayTrdService {
@Autowired @Autowired
@@ -49,27 +57,29 @@ public class PayTrdV5Service implements PayTrdService {
Map<String, String> params = new HashMap<>(); Map<String, String> params = new HashMap<>();
params.put("pay_memberid", payTrdConfig.getMchId()); params.put("pay_memberid", payTrdConfig.getMchId());
params.put("pay_orderid", payOrderInfoDTO.getOrderNo()); 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_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(); String notifyUrl = payTrdConfig.getNotifyUrl() + type.getNotifyPath();
params.put("pay_notifyurl", notifyUrl); params.put("pay_notifyurl", notifyUrl);
params.put("pay_productname",payOrderInfoDTO.getBody()); params.put("pay_amount", payOrderInfoDTO.getPriceYuanStr());
params.put("pay_ip", ServletUtils.getClientIP()); MultiValueMap<String, String> map = PayMd5Util.createParamsOfMap(params, payTrdConfig.getSign(), "pay_md5sign");
params.put("pay_userid", LoginHelper.getUserId()+""); map.add("pay_productname",payOrderInfoDTO.getBody());
String para = PayMd5Util.createParams(params, payTrdConfig.getSign(), "pay_md5sign"); map.add("pay_ip", ServletUtils.getClientIP());
map.add("pay_userid", LoginHelper.getUserId()+"");
String gatewayUrl = type.getGatewayUrl(); String gatewayUrl = type.getGatewayUrl();
if (StringUtils.isNotBlank(payTrdConfig.getGatewayUrl())) { if (StringUtils.isNotBlank(payTrdConfig.getGatewayUrl())) {
gatewayUrl = payTrdConfig.getGatewayUrl(); gatewayUrl = payTrdConfig.getGatewayUrl();
} }
String createOrderUrl = gatewayUrl + type.getCreateOrderUrl(); String createOrderUrl = gatewayUrl + type.getCreateOrderUrl();
String url = createOrderUrl + "?" + para; HttpHeaders headers = new HttpHeaders();
String body = rest.postForObject(url, null, String.class); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
String body = rest.postForObject(createOrderUrl, request, String.class);
JSONObject jsonObject = JSON.parseObject(body); JSONObject jsonObject = JSON.parseObject(body);
boolean success = checkSuccess(jsonObject); 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){ 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("调用支付失败"); throw new ServiceException("调用支付失败");
} }
String payUrl = jsonObject.getString("h5_url"); String payUrl = jsonObject.getString("h5_url");