From d7fd9123c3e100e5fc8079fea8d9cacf8afd4a32 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 26 八月 2026 09:29:06 +0800
Subject: [PATCH] update
---
cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$2.class | 0
cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java | 3
cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/OssUploadUtil.java | 4
cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java | 1
cloud-server-account/src/main/java/com/dsh/account/model/ImageCaptchaVo.java | 38 ++++
cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java | 1
cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java | 4
cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil.class | 0
cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar.original | 0
cloud-server-account/src/main/resources/sharding-jdbc.properties | 2
cloud-server-activity/src/main/resources/sharding-jdbc.properties | 4
cloud-server-communityWorldCup/target/classes/bootstrap.properties | 2
cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java | 110 +++++++++++
cloud-server-course/src/main/resources/sharding-jdbc.properties | 4
cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java | 80 ++++++++
cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$1.class | 0
cloud-server-competition/src/main/resources/sharding-jdbc.properties | 2
cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/controller/WorldCupController.class | 0
cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java | 1
cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar | 0
cloud-server-management/src/main/java/com/dsh/config/RedisConfig.java | 2
cloud-server-account/src/main/java/com/dsh/account/util/ALiSendSms.java | 4
cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java | 1
cloud-server-competition/src/main/java/com/dsh/config/RedisConfig.java | 2
cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java | 4
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/ALiSendSms.java | 4
cloud-server-account/src/main/java/com/dsh/account/service/ImageCaptchaService.java | 162 ++++++++++++++++++
cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 60 ++++++
cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml | 6
cloud-server-management/src/main/webapp/WEB-INF/view/login.html | 2
cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java | 1
cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java | 3
cloud-server-communityWorldCup/target/maven-archiver/pom.properties | 2
33 files changed, 475 insertions(+), 34 deletions(-)
diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
index 17adc31..a75c076 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java
@@ -11,6 +11,7 @@
import com.dsh.account.model.AdvertisementChangeStateDTO;
import com.dsh.account.model.AppUserByNameAndPhoneDTO;
import com.dsh.account.model.AppUserIdsByCityName;
+import com.dsh.account.model.ImageCaptchaVo;
import com.dsh.account.model.JoinPlayPaiVo;
import com.dsh.account.model.LoginSMSCodeVo;
import com.dsh.account.model.LoginWeChatVo;
@@ -61,6 +62,8 @@
@Autowired
private TAppUserService appUserService;
+ @Autowired
+ private ImageCaptchaService imageCaptchaService;
@Autowired
private VipClient vipClient;
@@ -316,28 +319,121 @@
}
@ResponseBody
- @PostMapping("/base/appUser/getSMSCode")
- @ApiOperation(value = "获取短信验证码", tags = {"APP-登录注册"})
+ @PostMapping("/base/appUser/imageCaptcha")
+ @ApiOperation(value = "获取短信发送前置图形验证码", tags = {"APP-登录注册"})
@ApiImplicitParams({
@ApiImplicitParam(value = "类型(1:登录,2:注册,3:修改密码,4:忘记密码)", name = "type", dataType = "int", required = true),
@ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true)
})
- public ResultUtil getSMSCode(Integer type, String phone) {
- if (ToolUtil.isEmpty(phone)) {
+ public ResultUtil<ImageCaptchaVo> getImageCaptcha(Integer type, String phone, HttpServletRequest request) {
+ if (!isValidPhone(phone)) {
return ResultUtil.paranErr("phone");
}
- if (ToolUtil.isEmpty(type)) {
+ if (!isValidSmsType(type)) {
return ResultUtil.paranErr("type");
}
try {
- ResultUtil smsCode = appUserService.getSMSCode(type, phone);
- return smsCode;
+ ImageCaptchaVo captcha = imageCaptchaService.create(phone, type, getClientIp(request));
+ if (captcha == null) {
+ return ResultUtil.error("图形验证码获取过于频繁,请稍后重试", null);
+ }
+ return ResultUtil.success(captcha);
} catch (Exception e) {
e.printStackTrace();
return ResultUtil.runErr();
}
}
+ @ResponseBody
+ @PostMapping("/base/appUser/getSMSCode")
+ @ApiOperation(value = "获取短信验证码", tags = {"APP-登录注册"})
+ @ApiImplicitParams({
+ @ApiImplicitParam(value = "类型(1:登录,2:注册,3:修改密码,4:忘记密码)", name = "type", dataType = "int", required = true),
+ @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true),
+ @ApiImplicitParam(value = "图形验证码唯一标识", name = "captchaId", dataType = "string", required = true),
+ @ApiImplicitParam(value = "图形验证码", name = "captchaCode", dataType = "string", required = true)
+ })
+ public ResultUtil getSMSCode(Integer type, String phone, String captchaId, String captchaCode,
+ HttpServletRequest request) {
+ if (!isValidPhone(phone)) {
+ return ResultUtil.paranErr("phone");
+ }
+ if (!isValidSmsType(type)) {
+ return ResultUtil.paranErr("type");
+ }
+ if (ToolUtil.isEmpty(captchaId)|| ToolUtil.isEmpty(captchaCode) ) {
+ return ResultUtil.error("系统维护中,注册或登录请联系场地管理员");
+ }
+ if (!imageCaptchaService.verifyAndConsume(captchaId, captchaCode, phone, type)) {
+ return ResultUtil.error("图形验证码错误或已失效,请刷新后重试");
+ }
+ try {
+ return appUserService.getSMSCode(type, phone, getClientIp(request));
+ } catch (Exception e) {
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }
+
+ private boolean isValidPhone(String phone) {
+ return phone != null && phone.matches("^1\\d{10}$");
+ }
+
+ private boolean isValidSmsType(Integer type) {
+ return type != null && type >= 1 && type <= 4;
+ }
+
+ private String getClientIp(HttpServletRequest request) {
+ String remoteAddress = request.getRemoteAddr();
+ if (!isInternalProxyAddress(remoteAddress)) {
+ return remoteAddress;
+ }
+
+ String forwardedFor = request.getHeader("X-Forwarded-For");
+ if (ToolUtil.isNotEmpty(forwardedFor)) {
+ String[] addresses = forwardedFor.split(",");
+ for (int i = addresses.length - 1; i >= 0; i--) {
+ String clientIp = addresses[i].trim();
+ if (isValidIpText(clientIp) && !isInternalProxyAddress(clientIp)) {
+ return clientIp;
+ }
+ }
+ }
+ String realIp = request.getHeader("X-Real-IP");
+ if (isValidIpText(realIp)) {
+ return realIp.trim();
+ }
+ return remoteAddress;
+ }
+
+ private boolean isInternalProxyAddress(String ip) {
+ if (ip == null) {
+ return false;
+ }
+ if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip) || "::1".equals(ip)
+ || ip.startsWith("10.") || ip.startsWith("192.168.")) {
+ return true;
+ }
+ if (ip.startsWith("172.")) {
+ String[] parts = ip.split("\\.");
+ if (parts.length == 4) {
+ try {
+ int secondPart = Integer.parseInt(parts[1]);
+ return secondPart >= 16 && secondPart <= 31;
+ } catch (NumberFormatException ignored) {
+ return false;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isValidIpText(String ip) {
+ return ToolUtil.isNotEmpty(ip)
+ && ip.length() <= 45
+ && ip.trim().matches("[0-9a-fA-F:.]+");
+ }
+
@Autowired
private TStudentService studentService;
diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/ImageCaptchaVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/ImageCaptchaVo.java
new file mode 100644
index 0000000..f81c858
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/model/ImageCaptchaVo.java
@@ -0,0 +1,38 @@
+package com.dsh.account.model;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 图形验证码响应。
+ */
+@ApiModel(value = "图形验证码")
+public class ImageCaptchaVo {
+
+ @ApiModelProperty(value = "验证码唯一标识")
+ private String captchaId;
+
+ @ApiModelProperty(value = "PNG图片的Base64 Data URL")
+ private String image;
+
+ @ApiModelProperty(value = "有效期,单位:秒")
+ private Integer expireIn;
+
+ public ImageCaptchaVo(String captchaId, String image, Integer expireIn) {
+ this.captchaId = captchaId;
+ this.image = image;
+ this.expireIn = expireIn;
+ }
+
+ public String getCaptchaId() {
+ return captchaId;
+ }
+
+ public String getImage() {
+ return image;
+ }
+
+ public Integer getExpireIn() {
+ return expireIn;
+ }
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/ImageCaptchaService.java b/cloud-server-account/src/main/java/com/dsh/account/service/ImageCaptchaService.java
new file mode 100644
index 0000000..7d3a5b0
--- /dev/null
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/ImageCaptchaService.java
@@ -0,0 +1,162 @@
+package com.dsh.account.service;
+
+import com.dsh.account.model.ImageCaptchaVo;
+import com.dsh.account.util.RedisUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.imageio.ImageIO;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.security.SecureRandom;
+import java.util.Base64;
+import java.util.Locale;
+import java.util.UUID;
+
+/**
+ * 短信发送前置图形验证码服务。
+ */
+@Service
+public class ImageCaptchaService {
+
+ private static final String CAPTCHA_KEY_PREFIX = "security:sms:image-captcha:";
+ private static final String CREATE_LIMIT_KEY_PREFIX = "security:sms:image-captcha:create:";
+ private static final char[] CAPTCHA_CHARS = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ".toCharArray();
+ private static final int CAPTCHA_LENGTH = 4;
+ private static final int IMAGE_WIDTH = 120;
+ private static final int IMAGE_HEIGHT = 44;
+
+ private final SecureRandom secureRandom = new SecureRandom();
+
+ @Autowired
+ private RedisUtil redisUtil;
+
+ @Value("${security.sms.image-captcha-expire-seconds:120}")
+ private int expireSeconds;
+
+ @Value("${security.sms.image-captcha-max-per-minute:10}")
+ private int maxPerMinute;
+
+ /**
+ * 创建与手机号、短信用途绑定的图形验证码。
+ *
+ * @return 达到生成频率上限时返回null
+ */
+ public ImageCaptchaVo create(String phone, Integer type, String clientIp) throws IOException {
+ if (!redisUtil.tryAcquireFixedWindow(
+ CREATE_LIMIT_KEY_PREFIX + clientIp,
+ maxPerMinute,
+ 60)) {
+ return null;
+ }
+
+ String captchaId = UUID.randomUUID().toString().replace("-", "");
+ String captchaCode = randomCode();
+ redisUtil.setStrValue(
+ CAPTCHA_KEY_PREFIX + captchaId,
+ captchaValue(phone, type, captchaCode),
+ expireSeconds
+ );
+ return new ImageCaptchaVo(captchaId, renderImage(captchaCode), expireSeconds);
+ }
+
+ /**
+ * 原子校验并删除验证码。无论输入是否正确,每个验证码都只能提交一次。
+ */
+ public boolean verifyAndConsume(String captchaId, String captchaCode, String phone, Integer type) {
+ if (captchaId == null || captchaCode == null) {
+ return false;
+ }
+
+ String normalizedId = captchaId.trim().toLowerCase(Locale.ROOT);
+ String normalizedCode = captchaCode.trim().toUpperCase(Locale.ROOT);
+ if (!normalizedId.matches("[0-9a-f]{32}") || !normalizedCode.matches("[0-9A-Z]{4}")) {
+ return false;
+ }
+
+ return redisUtil.consumeIfEquals(
+ CAPTCHA_KEY_PREFIX + normalizedId,
+ captchaValue(phone, type, normalizedCode)
+ );
+ }
+
+ private String randomCode() {
+ StringBuilder code = new StringBuilder(CAPTCHA_LENGTH);
+ for (int i = 0; i < CAPTCHA_LENGTH; i++) {
+ code.append(CAPTCHA_CHARS[secureRandom.nextInt(CAPTCHA_CHARS.length)]);
+ }
+ return code.toString();
+ }
+
+ private String renderImage(String code) throws IOException {
+ BufferedImage image = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics = image.createGraphics();
+ try {
+ graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ graphics.setColor(new Color(245, 247, 250));
+ graphics.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
+ drawNoise(graphics);
+ drawCode(graphics, code);
+ } finally {
+ graphics.dispose();
+ }
+
+ try (ByteArrayOutputStream output = new ByteArrayOutputStream()) {
+ ImageIO.write(image, "png", output);
+ return "data:image/png;base64," + Base64.getEncoder().encodeToString(output.toByteArray());
+ }
+ }
+
+ private void drawNoise(Graphics2D graphics) {
+ for (int i = 0; i < 7; i++) {
+ graphics.setColor(randomColor(150, 210));
+ graphics.drawLine(
+ secureRandom.nextInt(IMAGE_WIDTH),
+ secureRandom.nextInt(IMAGE_HEIGHT),
+ secureRandom.nextInt(IMAGE_WIDTH),
+ secureRandom.nextInt(IMAGE_HEIGHT)
+ );
+ }
+ for (int i = 0; i < 45; i++) {
+ graphics.setColor(randomColor(120, 220));
+ graphics.fillOval(secureRandom.nextInt(IMAGE_WIDTH), secureRandom.nextInt(IMAGE_HEIGHT), 2, 2);
+ }
+ }
+
+ private void drawCode(Graphics2D graphics, String code) {
+ graphics.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 27));
+ for (int i = 0; i < code.length(); i++) {
+ Graphics2D characterGraphics = (Graphics2D) graphics.create();
+ try {
+ characterGraphics.setColor(randomColor(25, 115));
+ double angle = (secureRandom.nextDouble() - 0.5D) * 0.45D;
+ int x = 12 + i * 26;
+ int y = 31 + secureRandom.nextInt(6) - 3;
+ characterGraphics.setTransform(AffineTransform.getRotateInstance(angle, x + 9, y - 10));
+ characterGraphics.drawString(String.valueOf(code.charAt(i)), x, y);
+ } finally {
+ characterGraphics.dispose();
+ }
+ }
+ }
+
+ private Color randomColor(int min, int max) {
+ int bound = max - min + 1;
+ return new Color(
+ min + secureRandom.nextInt(bound),
+ min + secureRandom.nextInt(bound),
+ min + secureRandom.nextInt(bound)
+ );
+ }
+
+ private String captchaValue(String phone, Integer type, String code) {
+ return phone + ":" + type + ":" + code;
+ }
+}
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
index 31be31a..7b14561 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java
@@ -44,10 +44,11 @@
*
* @param type
* @param phone
+ * @param clientIp 客户端IP
* @return
* @throws Exception
*/
- ResultUtil getSMSCode(Integer type, String phone) throws Exception;
+ ResultUtil getSMSCode(Integer type, String phone, String clientIp) throws Exception;
/**
diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
index cb56b2d..70f6226 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java
@@ -54,6 +54,7 @@
import com.dsh.account.vo.entity.YearData;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
@@ -84,6 +85,10 @@
@Service
public class TAppUserServiceImpl extends ServiceImpl<TAppUserMapper, TAppUser> implements TAppUserService {
+ private static final String SMS_COOLDOWN_KEY_PREFIX = "security:sms:cooldown:";
+ private static final String SMS_PHONE_QUOTA_KEY_PREFIX = "security:sms:phone-quota:";
+ private static final String SMS_IP_QUOTA_KEY_PREFIX = "security:sms:ip-quota:";
+
@Resource
private TStudentMapper tsmapper;
@@ -96,6 +101,15 @@
@Autowired
private RedisUtil redisUtil;
+
+ @Value("${security.sms.cooldown-seconds:60}")
+ private int smsCooldownSeconds;
+
+ @Value("${security.sms.phone-max-per-day:5}")
+ private int smsPhoneMaxPerDay;
+
+ @Value("${security.sms.ip-max-per-day:10}")
+ private int smsIpMaxPerDay;
@Autowired
private GDMapGeocodingUtil gdMapGeocodingUtil;
@@ -415,13 +429,31 @@
* @throws Exception
*/
@Override
- public ResultUtil getSMSCode(Integer type, String phone) throws Exception {
+ public ResultUtil getSMSCode(Integer type, String phone, String clientIp) throws Exception {
if (type == 2) {
TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", phone).ne("state", 3));
if (null != tAppUser) {
return ResultUtil.error("账号已存在");
}
}
+ String cooldownKey = SMS_COOLDOWN_KEY_PREFIX + phone;
+ if (!redisUtil.setIfAbsent(cooldownKey, "1", smsCooldownSeconds)) {
+ return ResultUtil.error("短信发送过于频繁,请稍后重试");
+ }
+
+ String phoneQuotaKey = SMS_PHONE_QUOTA_KEY_PREFIX + phone;
+ if (!redisUtil.tryAcquireFixedWindow(phoneQuotaKey, smsPhoneMaxPerDay, 24 * 60 * 60)) {
+ redisUtil.remove(cooldownKey);
+ return ResultUtil.error("该手机号24小时内短信发送次数已达上限");
+ }
+
+ String ipQuotaKey = SMS_IP_QUOTA_KEY_PREFIX + clientIp;
+ if (!redisUtil.tryAcquireFixedWindow(ipQuotaKey, smsIpMaxPerDay, 24 * 60 * 60)) {
+ redisUtil.remove(cooldownKey);
+ redisUtil.releaseFixedWindow(phoneQuotaKey);
+ return ResultUtil.error("当前网络24小时内短信发送次数已达上限");
+ }
+
String numberRandom = UUIDUtil.getNumberRandom(6);
String templateCode = "";
if (type == 1 || type == 2) {
@@ -430,9 +462,29 @@
if (type == 3 || type == 4) {
templateCode = "SMS_160960014";
}
- aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + numberRandom + "\"}");
- redisUtil.setStrValue(phone, numberRandom, 300);
- return ResultUtil.success();
+ boolean providerAccepted = false;
+ try {
+ String sendResult = aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + numberRandom + "\"}");
+ com.alibaba.fastjson.JSONObject response = com.alibaba.fastjson.JSONObject.parseObject(sendResult);
+ if (response == null || !"OK".equalsIgnoreCase(response.getString("Code"))) {
+ releaseSmsLimit(cooldownKey, phoneQuotaKey, ipQuotaKey);
+ return ResultUtil.error("短信发送失败,请稍后重试");
+ }
+ providerAccepted = true;
+ redisUtil.setStrValue(phone, numberRandom, 300);
+ return ResultUtil.success();
+ } catch (Exception e) {
+ if (!providerAccepted) {
+ releaseSmsLimit(cooldownKey, phoneQuotaKey, ipQuotaKey);
+ }
+ throw e;
+ }
+ }
+
+ private void releaseSmsLimit(String cooldownKey, String phoneQuotaKey, String ipQuotaKey) {
+ redisUtil.remove(cooldownKey);
+ redisUtil.releaseFixedWindow(phoneQuotaKey);
+ redisUtil.releaseFixedWindow(ipQuotaKey);
}
/**
diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/ALiSendSms.java b/cloud-server-account/src/main/java/com/dsh/account/util/ALiSendSms.java
index 89e2815..35baaf4 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/util/ALiSendSms.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/util/ALiSendSms.java
@@ -21,8 +21,8 @@
// 设置鉴权参数,初始化客户端
private DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",// 地域ID
- "LTAI5tGC4cJ1rRrQsZAW2i5Z",// 您的AccessKey ID
- "AwpaQbKMVYNES0SxlYYxOhU1KibCQb");// 您的AccessKey Secret
+ "LTAI5t6DcRqSSztaJKbeZRi1",// 您的AccessKey ID
+ "EP0MgGhujBiplj6QYP7FJAb5AjIjaj");// 您的AccessKey Secret
private IAcsClient client = new DefaultAcsClient(profile);
private static void log_print(String functionName, Object result) {
diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java
index 237830c..93a8948 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/util/OssUploadUtil.java
@@ -12,8 +12,8 @@
public class OssUploadUtil {
//OSS图片访问域名
public static String oss_domain = "https://newok.oss-cn-shenzhen.aliyuncs.com/";
- public static String accessKeyId = "LTAI4G9Zez9H4B36vakPXGy4";
- public static String accessKeySecret = "BOVPUeZndKVbrPOq6Ef5j6oiydB3XZ";
+ public static String accessKeyId = "LTAI5t6DcRqSSztaJKbeZRi1";
+ public static String accessKeySecret = "EP0MgGhujBiplj6QYP7FJAb5AjIjaj";
public static String bucketName = "newok";
public static String endpoint = "oss-cn-shenzhen.aliyuncs.com";
diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
index 684d3dc..3c9e782 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/util/PayMoneyUtil.java
@@ -97,6 +97,7 @@
private String callbackPath = "https://online.daowepark.com:443/account";//支付回调网关地址/
// private String callbackPath = "http://221.182.45.100:1234/account";//支付回调网关地址
// private String callbackPath = "http://8.137.14.183:56666/course";//支付回调网关地址
+// private String callbackPath = "http://47.108.147.192:56666/course";//支付回调网关地址
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java
index 8fc0825..afe45ca 100644
--- a/cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java
+++ b/cloud-server-account/src/main/java/com/dsh/account/util/RedisUtil.java
@@ -9,6 +9,8 @@
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
@@ -73,6 +75,84 @@
/**
+ * 仅当key不存在时写入,并设置过期时间。
+ *
+ * @param key key
+ * @param value value
+ * @param time 过期时间,单位:秒
+ * @return 是否写入成功
+ */
+ public boolean setIfAbsent(String key, String value, int time) {
+ if (StringUtil.isEmpty(key)) {
+ return false;
+ }
+ try (Jedis resource = jedisPool.getResource()) {
+ return "OK".equals(resource.set(key, value, "NX", "EX", time));
+ }
+ }
+
+
+ /**
+ * 原子比较并删除。key存在时无论是否匹配都会被删除,避免验证码被暴力枚举。
+ */
+ public boolean consumeIfEquals(String key, String expectedValue) {
+ if (StringUtil.isEmpty(key) || expectedValue == null) {
+ return false;
+ }
+ String script = "local value = redis.call('get', KEYS[1]); "
+ + "if not value then return 0 end; "
+ + "redis.call('del', KEYS[1]); "
+ + "if value == ARGV[1] then return 1 else return 0 end";
+ try (Jedis resource = jedisPool.getResource()) {
+ Object result = resource.eval(
+ script,
+ Collections.singletonList(key),
+ Collections.singletonList(expectedValue)
+ );
+ return Long.valueOf(1L).equals(result);
+ }
+ }
+
+
+ /**
+ * 获取固定时间窗口内的一个名额。
+ */
+ public boolean tryAcquireFixedWindow(String key, int maxCount, int windowSeconds) {
+ if (StringUtil.isEmpty(key) || maxCount <= 0 || windowSeconds <= 0) {
+ return false;
+ }
+ String script = "local current = tonumber(redis.call('get', KEYS[1]) or '0'); "
+ + "if current >= tonumber(ARGV[2]) then return 0 end; "
+ + "current = redis.call('incr', KEYS[1]); "
+ + "if current == 1 then redis.call('expire', KEYS[1], ARGV[1]) end; return 1";
+ try (Jedis resource = jedisPool.getResource()) {
+ Object result = resource.eval(
+ script,
+ Collections.singletonList(key),
+ Arrays.asList(String.valueOf(windowSeconds), String.valueOf(maxCount))
+ );
+ return Long.valueOf(1L).equals(result);
+ }
+ }
+
+
+ /**
+ * 释放固定时间窗口内已获取的名额,用于下游调用失败后的补偿。
+ */
+ public void releaseFixedWindow(String key) {
+ if (StringUtil.isEmpty(key)) {
+ return;
+ }
+ String script = "local current = tonumber(redis.call('get', KEYS[1]) or '0'); "
+ + "if current <= 1 then redis.call('del', KEYS[1]); "
+ + "else redis.call('decr', KEYS[1]); end; return 1";
+ try (Jedis resource = jedisPool.getResource()) {
+ resource.eval(script, Collections.singletonList(key), Collections.<String>emptyList());
+ }
+ }
+
+
+ /**
* 批量获取
*
* @param kes
diff --git a/cloud-server-account/src/main/resources/sharding-jdbc.properties b/cloud-server-account/src/main/resources/sharding-jdbc.properties
index f36446d..c5bc0f0 100644
--- a/cloud-server-account/src/main/resources/sharding-jdbc.properties
+++ b/cloud-server-account/src/main/resources/sharding-jdbc.properties
@@ -14,7 +14,7 @@
#datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
#datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_account?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
#datasource.master0.username=root
-#datasource.master0.password=root
+#datasource.master0.password=123456
#datasource.master0.maxActive=20
#datasource.master0.maxWait=60000
#datasource.master0.minIdle=5
diff --git a/cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java b/cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java
index b9fc0b3..21fd3ff 100644
--- a/cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java
+++ b/cloud-server-activity/src/main/java/com/dsh/activity/util/PayMoneyUtil.java
@@ -65,6 +65,7 @@
private String callbackPath = "https://online.daowepark.com:443/activity";//支付回调网关地址
// private String callbackPath = "http://vbef9arg13uu.guyubao.com/activity";//支付回调网关地址
+// private String callbackPath = "http://47.108.147.192:56666/activity";//支付回调网关地址
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
diff --git a/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml b/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
index 6e93a78..4b38443 100644
--- a/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
+++ b/cloud-server-activity/src/main/resources/mapper/UserPointsMerchandiseMapper.xml
@@ -21,6 +21,12 @@
select t1.insertTime,t2.cash from t_user_points_merchandise t1
left join t_points_merchandise t2 on t1.pointsMerchandiseId = t2.id
where t1.payStatus =2
+ <if test="storeIds.size()>0">
+ and t1.storeId IN
+ <foreach collection="storeIds" separator="," item="storeId" open="(" close=")">
+ #{storeId}
+ </foreach>
+ </if>
</select>
<select id="getConsumeDetails" resultType="com.dsh.activity.entity.ConsumeDetail">
diff --git a/cloud-server-activity/src/main/resources/sharding-jdbc.properties b/cloud-server-activity/src/main/resources/sharding-jdbc.properties
index e53faf1..332616f 100644
--- a/cloud-server-activity/src/main/resources/sharding-jdbc.properties
+++ b/cloud-server-activity/src/main/resources/sharding-jdbc.properties
@@ -14,12 +14,12 @@
#datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
#datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
#datasource.master0.username=root
-#datasource.master0.password=root
+#datasource.master0.password=123456
#datasource.master0.maxActive=20
#datasource.master0.maxWait=60000
#datasource.master0.minIdle=5
#datasource.master0.initialSize=2
-
+#
datasource.names=master0
datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
diff --git a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
index 5efc135..e429c24 100644
--- a/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
+++ b/cloud-server-communityWorldCup/src/main/java/com/dsh/communityWorldCup/util/PayMoneyUtil.java
@@ -57,6 +57,7 @@
private String callbackPath = "https://online.daowepark.com:443/communityWorldCup";//支付回调网关地址
// private String callbackPath = "http://221.182.45.100:1234/communityWorldCup";//支付回调网关地址
+// private String callbackPath = "http://47.108.147.192:56666/communityWorldCup";//支付回调网关地址
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
diff --git a/cloud-server-communityWorldCup/target/classes/bootstrap.properties b/cloud-server-communityWorldCup/target/classes/bootstrap.properties
index 76c0143..308145c 100644
--- a/cloud-server-communityWorldCup/target/classes/bootstrap.properties
+++ b/cloud-server-communityWorldCup/target/classes/bootstrap.properties
@@ -1,4 +1,4 @@
-spring.profiles.active=fat
+spring.profiles.active=prod
spring.application.name=mb-cloud-communityWorldCup
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=playPai2026#@!
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/controller/WorldCupController.class b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/controller/WorldCupController.class
index 9b6ece2..2e43993 100644
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/controller/WorldCupController.class
+++ b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/controller/WorldCupController.class
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$1.class b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$1.class
index 6defcc0..d661819 100644
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$1.class
+++ b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$1.class
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$2.class b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$2.class
index 7b4c75e..3adf918 100644
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$2.class
+++ b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil$2.class
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil.class b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil.class
index c551d16..ea04f50 100644
--- a/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil.class
+++ b/cloud-server-communityWorldCup/target/classes/com/dsh/communityWorldCup/util/PayMoneyUtil.class
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/maven-archiver/pom.properties b/cloud-server-communityWorldCup/target/maven-archiver/pom.properties
index d9aad12..f0db390 100644
--- a/cloud-server-communityWorldCup/target/maven-archiver/pom.properties
+++ b/cloud-server-communityWorldCup/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Sun Jun 07 14:49:58 CST 2026
+#Sat Aug 15 11:48:18 CST 2026
version=1.1.3
groupId=cn.mb.cloud
artifactId=mb-cloud-communityWorldCup
diff --git a/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar b/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar
index 5bd0944..6cf445f 100644
--- a/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar
+++ b/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar
Binary files differ
diff --git a/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar.original b/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar.original
index b60f1a5..5644cba 100644
--- a/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar.original
+++ b/cloud-server-communityWorldCup/target/mb-cloud-communityWorldCup.jar.original
Binary files differ
diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java b/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
index fa7103f..5987806 100644
--- a/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
+++ b/cloud-server-competition/src/main/java/com/dsh/competition/util/PayMoneyUtil.java
@@ -57,6 +57,7 @@
private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号
private String callbackPath = "https://online.daowepark.com:443/competition";//支付回调网关地址
+// private String callbackPath = "http://47.108.147.192:56666/competition";//支付回调网关地址
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
diff --git a/cloud-server-competition/src/main/java/com/dsh/config/RedisConfig.java b/cloud-server-competition/src/main/java/com/dsh/config/RedisConfig.java
index ec52584..e96f282 100644
--- a/cloud-server-competition/src/main/java/com/dsh/config/RedisConfig.java
+++ b/cloud-server-competition/src/main/java/com/dsh/config/RedisConfig.java
@@ -50,7 +50,7 @@
// 是否启用pool的jmx管理功能, 默认true
//Enable JMX management for pool, default is set to true.
jedisPoolConfig.setJmxEnabled(true);
- JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, "123456");
+ JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, "playPai2026test");
return jedisPool;
}
}
diff --git a/cloud-server-competition/src/main/resources/sharding-jdbc.properties b/cloud-server-competition/src/main/resources/sharding-jdbc.properties
index d8b11f3..add4b3b 100644
--- a/cloud-server-competition/src/main/resources/sharding-jdbc.properties
+++ b/cloud-server-competition/src/main/resources/sharding-jdbc.properties
@@ -14,7 +14,7 @@
#datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
#datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
#datasource.master0.username=root
-#datasource.master0.password=root
+#datasource.master0.password=123456
#datasource.master0.maxActive=20
#datasource.master0.maxWait=60000
#datasource.master0.minIdle=5
diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java b/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java
index 384854a..68fe00f 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/util/ALiSendSms.java
@@ -21,8 +21,8 @@
// 设置鉴权参数,初始化客户端
private DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",// 地域ID
- "LTAI5tGC4cJ1rRrQsZAW2i5Z",// 您的AccessKey ID
- "AwpaQbKMVYNES0SxlYYxOhU1KibCQb");// 您的AccessKey Secret
+ "LTAI5t6DcRqSSztaJKbeZRi1",// 您的AccessKey ID
+ "EP0MgGhujBiplj6QYP7FJAb5AjIjaj");// 您的AccessKey Secret
private IAcsClient client = new DefaultAcsClient(profile);
private static void log_print(String functionName, Object result) {
diff --git a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
index eb673b9..2b2ce1b 100644
--- a/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
+++ b/cloud-server-course/src/main/java/com/dsh/course/util/PayMoneyUtil.java
@@ -65,6 +65,7 @@
private String callbackPath = "https://online.daowepark.com:443/course";//支付回调网关地址
//private String callbackPath = "http://8.137.14.183:56666/course";//支付回调网关地址
+//private String callbackPath = "http://47.108.147.192:56666/course";//支付回调网关地址
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
diff --git a/cloud-server-course/src/main/resources/sharding-jdbc.properties b/cloud-server-course/src/main/resources/sharding-jdbc.properties
index 6d8a3b3..9d571db 100644
--- a/cloud-server-course/src/main/resources/sharding-jdbc.properties
+++ b/cloud-server-course/src/main/resources/sharding-jdbc.properties
@@ -14,12 +14,12 @@
#datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
#datasource.master0.url=jdbc:mysql://127.0.0.1:3306/playpai_course?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
#datasource.master0.username=root
-#datasource.master0.password=root
+#datasource.master0.password=123456
#datasource.master0.maxActive=20
#datasource.master0.maxWait=60000
#datasource.master0.minIdle=5
#datasource.master0.initialSize=2
-
+#
datasource.names=master0
datasource.master0.type=com.alibaba.druid.pool.DruidDataSource
datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver
diff --git a/cloud-server-management/src/main/java/com/dsh/config/RedisConfig.java b/cloud-server-management/src/main/java/com/dsh/config/RedisConfig.java
index 8e577e6..71f0b4a 100644
--- a/cloud-server-management/src/main/java/com/dsh/config/RedisConfig.java
+++ b/cloud-server-management/src/main/java/com/dsh/config/RedisConfig.java
@@ -51,7 +51,7 @@
//Enable JMX management for pool, default is set to true.
jedisPoolConfig.setJmxEnabled(true);
// JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, "playPai2026test");
- JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, "123456");
+ JedisPool jedisPool = new JedisPool(jedisPoolConfig, host, port, timeout, "playPai2026test");
return jedisPool;
}
}
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/ALiSendSms.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/ALiSendSms.java
index 4b44d87..66605ab 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/ALiSendSms.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/util/ALiSendSms.java
@@ -21,8 +21,8 @@
// 设置鉴权参数,初始化客户端
private DefaultProfile profile = DefaultProfile.getProfile(
"cn-hangzhou",// 地域ID
- "LTAI5tGC4cJ1rRrQsZAW2i5Z",// 您的AccessKey ID
- "AwpaQbKMVYNES0SxlYYxOhU1KibCQb");// 您的AccessKey Secret
+ "LTAI5t6DcRqSSztaJKbeZRi1",// 您的AccessKey ID
+ "EP0MgGhujBiplj6QYP7FJAb5AjIjaj");// 您的AccessKey Secret
private IAcsClient client = new DefaultAcsClient(profile);
private static void log_print(String functionName, Object result) {
diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/OssUploadUtil.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/OssUploadUtil.java
index f2a1186..6ba36da 100644
--- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/OssUploadUtil.java
+++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/util/OssUploadUtil.java
@@ -17,8 +17,8 @@
public static String oss_domain = "https://we-park-life.oss-cn-beijing.aliyuncs.com/";
// public static String accessKeyId = "LTAI5tKLeAE1B5n2mvTZ5yy6";
// public static String accessKeySecret = "zradDLTBGdzq26tYz9RUCUh0sPmfhh";
- public static String accessKeyId = "LTAI5tGC4cJ1rRrQsZAW2i5Z";
- public static String accessKeySecret = "AwpaQbKMVYNES0SxlYYxOhU1KibCQb";
+ public static String accessKeyId = "LTAI5t6DcRqSSztaJKbeZRi1";
+ public static String accessKeySecret = "EP0MgGhujBiplj6QYP7FJAb5AjIjaj";
public static String bucketName="we-park-life";
public static String endpoint = "oss-cn-beijing.aliyuncs.com";
diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/login.html b/cloud-server-management/src/main/webapp/WEB-INF/view/login.html
index 2846a61..3abc413 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/login.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/login.html
@@ -55,7 +55,7 @@
<div style="display: flex;align-items: center;justify-content: center;height: 100%">
- <h1 style="color: white">玩湃生活管理后台</h1>
+ <h1 style="color: white">玩湃生活后台管理系统V1.0</h1>
<div style="position: relative;margin-left:200px;left: -20px; max-width: 300px;min-height: 300px;background: white;border-radius: 8px;box-sizing: border-box;padding: 0 30px 0 50px;display: flex;align-items: center;justify-content: center;">
<div style="max-height: 100%" >
<img style="margin-left: 44px" src="${ctxPath}/img/logo.png" width="100px" height="120px"/>
diff --git a/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java b/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
index bcfac58..c37b1b3 100644
--- a/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
+++ b/cloud-server-other/src/main/java/com/dsh/other/util/PayMoneyUtil.java
@@ -54,8 +54,9 @@
private String key = "6f5e0c2dcabfa9c27b5da5836a362fef";//微信商户号
- private String callbackPath = "https://online.daowepark.com:443/other";//支付回调网关地址
+ private String callbackPath = "https://online.daowepark.com:443/other";//支付回调网关地址/
// private String callbackPath = "http://8.137.14.183:56666/other";//支付回调网关地址
+// private String callbackPath = "http://47.108.147.192:56666/other";//支付回调网关地址
private String app_cert_path = "C:/cert/alipay/user/app_cert_path.crt";//应用公钥证书路径
--
Gitblit v1.7.1