From 52e499b20ac5b4109217b9f062b5bddb380f2fab Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Thu, 17 Jul 2025 18:49:21 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=A9=E7=9F=AD=E5=85=85=E5=80=BC=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E9=93=BE=E6=8E=A5=E5=85=BC=E5=AE=B9=E7=AC=AC=E4=B8=89?= =?UTF-8?q?=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/strategy/V5PayStrategy.java | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/strategy/V5PayStrategy.java b/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/strategy/V5PayStrategy.java index 595dfbc7a..8226ffa95 100644 --- a/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/strategy/V5PayStrategy.java +++ b/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/strategy/V5PayStrategy.java @@ -2,6 +2,7 @@ package com.accompany.payment.strategy; import com.accompany.common.constant.Constant; import com.accompany.common.status.BusiStatus; +import com.accompany.common.utils.StringUtils; import com.accompany.core.base.UidContextHolder; import com.accompany.core.exception.ServiceException; import com.accompany.payment.annotation.PayChannelSupport; @@ -15,7 +16,10 @@ import com.accompany.payment.v5pay.V5PayService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.net.URI; +import java.net.URISyntaxException; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; @Service @@ -33,7 +37,8 @@ public class V5PayStrategy extends AbstractPayStrategy { chargeUserLimitService.chargeLimitCheck(UidContextHolder.get(), ChargeUserLimitConstant.LIMIT_TYPE_OF_H5); ChargeRecord chargeRecord = context.getChargeRecord(); ChargeProd chargeProd = context.getChargeProd(); - V5PayResponseVo orderRes = v5PayService.createOrder(chargeRecord, chargeProd, context.getSuccessUrl()); + String succeccUrl = extractAndBuildUrl(context.getSuccessUrl()); + V5PayResponseVo orderRes = v5PayService.createOrder(chargeRecord, chargeProd, succeccUrl); if (!orderRes.getCode().equalsIgnoreCase("1000")) { throw new ServiceException(BusiStatus.SERVERERROR); } @@ -43,4 +48,46 @@ public class V5PayStrategy extends AbstractPayStrategy { appMap.put(PayConstant.H5_PAY_ERBANNO_FIELD, context.getErbanNo()); return appMap; } + + public static String extractAndBuildUrl(String url) { + if (StringUtils.isEmpty(url)) { + return url; + } + try { + // 解析原始URL + URI uri = new URI(url); + + // 获取基础路径(协议+域名+路径,不带查询参数) + String basePath = uri.getScheme() + "://" + uri.getHost() + uri.getPath(); + + // 提取需要的参数 + Map targetParams = new LinkedHashMap<>(); + String query = uri.getQuery(); + if (query != null) { + for (String param : query.split("&")) { + String[] keyValue = param.split("=", 2); // 只分割第一个=号 + if (keyValue.length == 2) { + String key = keyValue[0]; + if ("channelType".equals(key) || "lang".equals(key)) { + targetParams.put(key, keyValue[1]); + } + } + } + } + + // 拼接新URL + if (!targetParams.isEmpty()) { + StringBuilder newUrl = new StringBuilder(basePath).append("?"); + targetParams.forEach((key, value) -> { + newUrl.append(key).append("=").append(value).append("&"); + }); + // 删除最后一个多余的& + return newUrl.substring(0, newUrl.length() - 1); + } + return basePath; + + } catch (URISyntaxException e) { + throw new IllegalArgumentException("Invalid URL format: " + url, e); + } + } }