f
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"qnc-server/common/reviewphone"
|
||||
"qnc-server/common/xerr"
|
||||
"qnc-server/pkg/captcha"
|
||||
"qnc-server/pkg/lzkit/crypto"
|
||||
@@ -38,22 +39,36 @@ func NewSendSmsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SendSmsLo
|
||||
func (l *SendSmsLogic) SendSms(req *types.SendSmsReq, clientIP string, userAgent string) error {
|
||||
secretKey := l.svcCtx.Config.Encrypt.SecretKey
|
||||
encryptedMobile, err := crypto.EncryptMobile(req.Mobile, secretKey)
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "短信发送, 加密手机号失败: %v", err)
|
||||
}
|
||||
if err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "短信发送, 加密手机号失败: %v", err)
|
||||
}
|
||||
|
||||
// 1. 滑块验证码校验(可选,支持微信环境跳过验证)
|
||||
cfg := l.svcCtx.Config.Captcha
|
||||
captchaResult := captcha.VerifyOptionalWithUserAgent(captcha.Config{
|
||||
AccessKeyID: cfg.AccessKeyID,
|
||||
AccessKeySecret: cfg.AccessKeySecret,
|
||||
EndpointURL: cfg.EndpointURL,
|
||||
SceneID: cfg.SceneID,
|
||||
}, req.CaptchaVerifyParam, userAgent)
|
||||
// 审核体验:预留号段申请代理时不发短信、不校验滑块,仅写入与注册校验一致的固定验证码
|
||||
if req.ActionType == "agentApply" && reviewphone.IsAppReviewDemoMobile(req.Mobile) {
|
||||
codeKey := fmt.Sprintf("%s:%s", req.ActionType, encryptedMobile)
|
||||
limitCodeKey := fmt.Sprintf("limit:%s:%s", req.ActionType, encryptedMobile)
|
||||
if err := l.svcCtx.Redis.Setex(codeKey, reviewphone.DemoVerifyCode, l.svcCtx.Config.VerifyCode.ValidTime); err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "短信发送, 审核号写入验证码失败: %v", err)
|
||||
}
|
||||
if err := l.svcCtx.Redis.Setex(limitCodeKey, "1", 60); err != nil {
|
||||
return errors.Wrapf(xerr.NewErrCode(xerr.SERVER_COMMON_ERROR), "短信发送, 审核号限流标记失败: %v", err)
|
||||
}
|
||||
l.Infof("短信发送, 审核体验号段跳过真实短信, mobile=%s", req.Mobile)
|
||||
return nil
|
||||
}
|
||||
|
||||
if captchaResult.VerifyErr != nil {
|
||||
return captchaResult.VerifyErr
|
||||
}
|
||||
// 1. 滑块验证码校验(可选,支持微信环境跳过验证)
|
||||
cfg := l.svcCtx.Config.Captcha
|
||||
captchaResult := captcha.VerifyOptionalWithUserAgent(captcha.Config{
|
||||
AccessKeyID: cfg.AccessKeyID,
|
||||
AccessKeySecret: cfg.AccessKeySecret,
|
||||
EndpointURL: cfg.EndpointURL,
|
||||
SceneID: cfg.SceneID,
|
||||
}, req.CaptchaVerifyParam, userAgent)
|
||||
|
||||
if captchaResult.VerifyErr != nil {
|
||||
return captchaResult.VerifyErr
|
||||
}
|
||||
|
||||
// 2. 防刷策略
|
||||
if captchaResult.Skipped {
|
||||
|
||||
Reference in New Issue
Block a user