Browse Source

国联融资余额充值接口增加幕等校验

liyuan 4 months ago
parent
commit
87534d9a8c

+ 6 - 1
blade-common/src/main/java/org/springblade/common/enums/NumberEnum.java

@@ -64,7 +64,12 @@ public enum NumberEnum {
 	/**
 	 * 15
 	 */
-	FIFTEEN(15),;
+	FIFTEEN(15),
+
+	/**
+	 * 60,000
+	 */
+	SIXTY_THOUSAND(60000);
 
 	public final Integer number;
 

+ 13 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/controller/DuoDuoOpenApiController.java

@@ -3,6 +3,8 @@ package org.springblade.salesPart.duoduo.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springblade.common.enums.NumberEnum;
+import org.springblade.common.utils.RedisUtils;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -35,7 +37,7 @@ public class DuoDuoOpenApiController {
 
 	 private final IAppTenantService appTenantService;
 
-
+	private final RedisUtils redisUtils;
 
 
 	@PostMapping("customerRechargeMsg")
@@ -43,6 +45,15 @@ public class DuoDuoOpenApiController {
 										  @RequestHeader("timestamp") Long timestamp,
 										  @RequestHeader("appid") String appId,
 										  @RequestBody @Valid CnAutoMall cnAutoMallVo) {
+		long currentTime = System.currentTimeMillis();
+		if (Math.abs(currentTime - timestamp) > NumberEnum.SIXTY_THOUSAND.number) {
+			return R.fail("请求已过期");
+		}
+		// 时间戳防重校验
+		String timestampKey = "idempotent:timestamp:" + appId + ":" + timestamp;
+		if (redisUtils.hasKey(timestampKey)) {
+			return R.fail("请求重复,请勿重复提交");
+		}
 		boolean verify = MallSignUtil.verify(sign, timestamp, appId);
 		if (!verify) {
 			return R.fail("签名验证失败");
@@ -50,7 +61,7 @@ public class DuoDuoOpenApiController {
 		if (!Objects.equals(cnAutoMallVo.getAppId(), appId)) {
 			return R.fail("签名appId与参数appId不一致");
 		}
-		return appTenantService.customerRechargeMsg(cnAutoMallVo);
+		return appTenantService.customerRechargeMsg(cnAutoMallVo, timestampKey);
 	}
 
 

+ 6 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/impl/AppTenantServiceImpl.java

@@ -1,8 +1,10 @@
 package org.springblade.salesPart.duoduo.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.AllArgsConstructor;
+import org.springblade.common.utils.RedisUtils;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.core.tool.api.R;
@@ -46,12 +48,14 @@ public class AppTenantServiceImpl extends ServiceImpl<AppTenantMapper, AppTenant
 
 	private final PjpfFundingItemMapper pjpfFundingItemMapper;
 
+	private final RedisUtils redisUtils;
+
 
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@TenantIgnore
-	public R<String> customerRechargeMsg(CnAutoMall cnAutoMallVo) {
+	public R<String> customerRechargeMsg(CnAutoMall cnAutoMallVo, String timestampKey) {
 		AppTenant appTenant = appTenantMapper.selectOne(new LambdaQueryWrapper<AppTenant>()
 			.eq(AppTenant::getAppId, cnAutoMallVo.getAppId()).eq(AppTenant::getIsDelete, 0)
 			.orderByDesc(AppTenant::getCreateDate).last(" limit 1"));
@@ -65,6 +69,7 @@ public class AppTenantServiceImpl extends ServiceImpl<AppTenantMapper, AppTenant
 		if (BigDecimal.ZERO.compareTo(cnAutoMallVo.getAmount()) >= 0) {
 			return R.fail("充值金额不能小于等于0");
 		}
+		redisUtils.set(timestampKey, JSONObject.toJSONString(cnAutoMallVo), 300);
 		Date nowDate = DateUtil.now();
 		PjpfBalanceReset pjpfBalanceReset = new PjpfBalanceReset();
 		pjpfBalanceReset.setDate(nowDate);

+ 2 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/duoduo/service/IAppTenantService.java

@@ -15,7 +15,8 @@ public interface IAppTenantService extends IService<AppTenant> {
 	 * 充值消息
 	 *
 	 * @param cnAutoMallVo 参数
+	 * @param timestampKey 参数
 	 * @return 结果
 	 */
-	R<String> customerRechargeMsg(CnAutoMall cnAutoMallVo);
+	R<String> customerRechargeMsg(CnAutoMall cnAutoMallVo, String timestampKey);
 }