33333333333
This commit is contained in:
@@ -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),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@@ -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("未开启支付,请联系客服");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"),
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
Reference in New Issue
Block a user