Explorar o código

bugfix:验证码校验

lyx hai 1 mes
pai
achega
e625fc0b7a

+ 23 - 7
alien-store/src/main/java/shop/alien/store/controller/AliController.java

@@ -1,17 +1,13 @@
 package shop.alien.store.controller;
 package shop.alien.store.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import io.swagger.annotations.*;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 import shop.alien.entity.result.R;
 import shop.alien.entity.result.R;
-import shop.alien.entity.store.LifeUser;
 import shop.alien.entity.store.StoreAliPayLog;
 import shop.alien.entity.store.StoreAliPayLog;
-import shop.alien.entity.store.StoreInfo;
-import shop.alien.entity.store.StoreUser;
 import shop.alien.store.service.AliService;
 import shop.alien.store.service.AliService;
 import shop.alien.store.service.LifeUserService;
 import shop.alien.store.service.LifeUserService;
 import shop.alien.store.service.StoreInfoService;
 import shop.alien.store.service.StoreInfoService;
@@ -26,9 +22,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
 
 
 /**
 /**
  * @author ssk
  * @author ssk
@@ -156,6 +149,29 @@ public class AliController {
         return R.fail("短信发送失败");
         return R.fail("短信发送失败");
     }
     }
 
 
+    @ApiOperation("校验短信验证码")
+    @ApiOperationSupport(order = 4)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "appType", value = "端区分(0:用户, 1:商家)", dataType = "Integer", paramType = "query", required = true, defaultValue = "0"),
+            @ApiImplicitParam(name = "businessType", value = "业务类型 (0:登录, 1:修改密码, 2:注册, 3:修改手机号, 4:注销店铺, 5:注销账号, 6:忘记密码)", dataType = "Integer", paramType = "query", required = true, defaultValue = "0"),
+            @ApiImplicitParam(name = "code", value = "验证码", dataType = "Integer", paramType = "query", required = true)
+    })
+    @GetMapping("/checkSmsCode")
+    public R checkSmsCode(
+            @RequestParam("phone") String phone,
+            @RequestParam("appType") Integer appType,
+            @RequestParam("businessType") Integer businessType,
+            @RequestParam("code") Integer code
+    ) {
+        log.info("AliController.checkSmsCode?phone={}&appType={}&businessType={}&code={}", phone, appType, businessType, code);
+        if (aliSmsConfig.checkSmsCode(phone, appType, businessType, code)) {
+            return R.success("验证码校验成功");
+        }
+        return R.fail("验证码校验失败");
+    }
+
+
     @ApiOperation("银行卡核验")
     @ApiOperation("银行卡核验")
     @ApiOperationSupport(order = 5)
     @ApiOperationSupport(order = 5)
     @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "姓名", dataType = "String", paramType = "query", required = true),
     @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "姓名", dataType = "String", paramType = "query", required = true),

+ 78 - 3
alien-store/src/main/java/shop/alien/store/util/ali/AliSms.java

@@ -13,9 +13,6 @@ import shop.alien.store.config.BaseRedisService;
 import shop.alien.store.config.NacosConfig;
 import shop.alien.store.config.NacosConfig;
 import shop.alien.util.common.RandomCreateUtil;
 import shop.alien.util.common.RandomCreateUtil;
 
 
-import java.util.Arrays;
-import java.util.List;
-
 /**
 /**
  * 阿里云验证码配置
  * 阿里云验证码配置
  *
  *
@@ -91,6 +88,10 @@ public class AliSms {
                     //忘记密码
                     //忘记密码
                     businessTypeStr = "forget_password";
                     businessTypeStr = "forget_password";
                     break;
                     break;
+                case 7:
+                    //忘记支付密码
+                    businessTypeStr = "forget_pay_password";
+                    break;
                 default:
                 default:
                     businessTypeStr = "login";
                     businessTypeStr = "login";
             }
             }
@@ -135,4 +136,78 @@ public class AliSms {
         }
         }
     }
     }
 
 
+    /**
+     * 校验短信验证码
+     *
+     * @param phone        手机号
+     * @param appType      端区分(0:用户, 1:商家)
+     * @param businessType 业务类型 (0:登录, 1:修改密码, 2:注册, 3:修改手机号, 4:注销店铺, 5:注销账号, 6:忘记密码)
+     * @param code         用户输入的验证码
+     * @return 校验结果 true-校验成功 false-校验失败
+     */
+    public boolean checkSmsCode(String phone, Integer appType, Integer businessType, Integer code) {
+        log.info("AliSms.checkSmsCode?phone={}&appType={}&businessType={}&code={}", phone, appType, businessType, code);
+        try {
+            // 构建Redis key,与sendSms方法中的key格式保持一致
+            String appTypeStr = appType == 0 ? "user" : "store";
+            String businessTypeStr;
+            switch (businessType) {
+                case 0:
+                    businessTypeStr = "login";
+                    break;
+                case 1:
+                    businessTypeStr = "modify_password";
+                    break;
+                case 2:
+                    businessTypeStr = "register";
+                    break;
+                case 3:
+                    businessTypeStr = "modify_phone";
+                    break;
+                case 4:
+                    businessTypeStr = "cancel_store";
+                    break;
+                case 5:
+                    businessTypeStr = "cancel_account";
+                    break;
+                case 6:
+                    businessTypeStr = "forget_password";
+                    break;
+                case 7:
+                    businessTypeStr = "forget_pay_password";
+                    break;
+                default:
+                    businessTypeStr = "login";
+            }
+            
+            String verifyKey = "verification_" + appTypeStr + "_" + businessTypeStr + "_" + phone;
+            
+            // 从Redis中获取验证码
+            String cacheCode = baseRedisService.getString(verifyKey);
+            
+            // 验证码不存在或已过期
+            if (cacheCode == null || cacheCode.trim().isEmpty()) {
+                log.warn("验证码不存在或已过期,phone={}, appType={}, businessType={}", phone, appType, businessType);
+                return false;
+            }
+            
+            // 比较验证码(去除空格)
+            boolean isValid = cacheCode.trim().equals(String.valueOf(code).trim());
+            
+            if (isValid) {
+                // 验证成功,删除验证码(防止重复使用)
+                baseRedisService.delete(verifyKey);
+                log.info("验证码校验成功,phone={}, appType={}, businessType={}", phone, appType, businessType);
+            } else {
+                log.warn("验证码校验失败,phone={}, appType={}, businessType={}, 期望值={}, 实际值={}", 
+                        phone, appType, businessType, cacheCode, code);
+            }
+            
+            return isValid;
+        } catch (Exception e) {
+            log.error("AliSms.checkSmsCode ERROR Msg={}", e.getMessage(), e);
+            return false;
+        }
+    }
+
 }
 }