This commit is contained in:
777
2025-07-08 15:43:32 +08:00
parent 9a72fe0151
commit 7c38443e9f
2 changed files with 13 additions and 59 deletions

View File

@@ -12,21 +12,21 @@ import java.util.stream.Collectors;
public class PaySignUtil {
public static String createMD5ToUpperCase(Map<String, String> params,String subKey) {
return createMD5(params,subKey).toUpperCase();
public static String createMD5ToUpperCase(Map<String, String> params,String signKey) {
return createMD5(params,signKey).toUpperCase();
}
public static String createMD5ToLowerCase(Map<String, String> params,String subKey) {
return createMD5(params,subKey).toLowerCase();
public static String createMD5ToLowerCase(Map<String, String> params,String signKey) {
return createMD5(params,signKey).toLowerCase();
}
public static String createMD5(Map<String, String> params,String subKey) {
public static String createMD5(Map<String, String> params,String signKey) {
List<String> url = new ArrayList<>();
for (Map.Entry<String, String> 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);
}

View File

@@ -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<String, String> 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<String, String> 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<String, String> 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<String, String> multiValueMap = MapUtils.mapToMultiValueMap(params);
MultiValueMap<String, String> 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<String, String> 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;
}