优化
This commit is contained in:
parent
af397d25c8
commit
21e571e237
|
|
@ -53,8 +53,6 @@ public class SMSBLL : ChouBoxCodeBase
|
||||||
var dailyCountKey = $"VerificationCodeDailyCount:{phone}:{DateTime.Now:yyyyMMdd}";
|
var dailyCountKey = $"VerificationCodeDailyCount:{phone}:{DateTime.Now:yyyyMMdd}";
|
||||||
var dailyCount = RedisCache.StringGet<int?>(dailyCountKey) ?? 0;
|
var dailyCount = RedisCache.StringGet<int?>(dailyCountKey) ?? 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 获取重试次数
|
// 获取重试次数
|
||||||
var retryCountKey = $"VerificationCode:{phone}{RETRY_COUNT_SUFFIX}";
|
var retryCountKey = $"VerificationCode:{phone}{RETRY_COUNT_SUFFIX}";
|
||||||
var retryCount = RedisCache.StringGet<int?>(retryCountKey) ?? 0;
|
var retryCount = RedisCache.StringGet<int?>(retryCountKey) ?? 0;
|
||||||
|
|
@ -103,18 +101,26 @@ public class SMSBLL : ChouBoxCodeBase
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
TencentSMSSendVerificationCode tencentSMSSendVerificationCode = new TencentSMSSendVerificationCode(smsConfig, phone);
|
TencentSMSSendVerificationCode tencentSMSSendVerificationCode = new TencentSMSSendVerificationCode(smsConfig, phone);
|
||||||
var result = await tencentSMSSendVerificationCode.SendVerificationCode(verificationCode.ToString(), 5);
|
bool smsSucceeded = true;
|
||||||
if (!result)
|
string errorMessage = "验证码发送失败";
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
|
var result = await tencentSMSSendVerificationCode.SendVerificationCode(verificationCode.ToString(), 5);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
smsSucceeded = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception smsEx)
|
||||||
|
{
|
||||||
|
smsSucceeded = false;
|
||||||
|
errorMessage = smsEx.Message;
|
||||||
// 记录发送失败日志
|
// 记录发送失败日志
|
||||||
Logger.LogError($"验证码发送失败,手机号:{phone},IP:{ipAddress}");
|
Logger.LogError($"验证码发送异常,手机号:{phone},IP:{ipAddress},错误:{smsEx.Message}");
|
||||||
throw new CustomException("验证码发送失败");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 发送成功,存入Redis,5分钟有效期
|
// 无论成功失败都更新重试次数和锁定时间
|
||||||
await RedisCache.StringSetAsync(redisKey, verificationCode.ToString(), TimeSpan.FromMinutes(5));
|
|
||||||
|
|
||||||
// 更新重试次数和锁定时间
|
|
||||||
retryCount++;
|
retryCount++;
|
||||||
var nextWaitSeconds = GetWaitSeconds(retryCount);
|
var nextWaitSeconds = GetWaitSeconds(retryCount);
|
||||||
|
|
||||||
|
|
@ -130,6 +136,15 @@ public class SMSBLL : ChouBoxCodeBase
|
||||||
var expireTime = endOfDay - DateTime.Now;
|
var expireTime = endOfDay - DateTime.Now;
|
||||||
await RedisCache.StringSetAsync(dailyCountKey, dailyCount.ToString(), expireTime);
|
await RedisCache.StringSetAsync(dailyCountKey, dailyCount.ToString(), expireTime);
|
||||||
|
|
||||||
|
// 如果短信发送失败,抛出异常
|
||||||
|
if (!smsSucceeded)
|
||||||
|
{
|
||||||
|
throw new CustomException(errorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 发送成功,存入Redis,5分钟有效期
|
||||||
|
await RedisCache.StringSetAsync(redisKey, verificationCode.ToString(), TimeSpan.FromMinutes(5));
|
||||||
|
|
||||||
// 保存到数据库
|
// 保存到数据库
|
||||||
var verificationRecord = new UserVerificationCodes
|
var verificationRecord = new UserVerificationCodes
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -124,12 +124,39 @@ public class TencentSMSSendVerificationCode(TencentSMSConfig tencentSMSConfig, s
|
||||||
|
|
||||||
Console.WriteLine(AbstractModel.ToJsonString(resp));
|
Console.WriteLine(AbstractModel.ToJsonString(resp));
|
||||||
|
|
||||||
|
// 检查短信发送状态
|
||||||
|
if (resp.SendStatusSet != null && resp.SendStatusSet.Length > 0)
|
||||||
|
{
|
||||||
|
foreach (var status in resp.SendStatusSet)
|
||||||
|
{
|
||||||
|
if (status.Code != "Ok")
|
||||||
|
{
|
||||||
|
// 检查特定错误码并提供更友好的错误信息
|
||||||
|
if (status.Code == "LimitExceeded.PhoneNumberSameContentDailyLimit" || status.Code == "LimitExceeded.PhoneNumberDailyLimit")
|
||||||
|
{
|
||||||
|
throw new Exception($"您的手机号今日接收该内容的短信次数已达上限,请明天再试");
|
||||||
|
}
|
||||||
|
else if (status.Code == "LimitExceeded.PhoneNumberThirtySecondLimit")
|
||||||
|
{
|
||||||
|
throw new Exception($"您的手机号短信请求过于频繁,请30秒后再试");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception($"短信发送失败:手机号 {status.PhoneNumber},错误代码 {status.Code},错误信息 {status.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception("短信发送失败:未收到发送状态");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
||||||
Console.WriteLine(e.ToString());
|
Console.WriteLine(e.ToString());
|
||||||
return false;
|
throw; // 重新抛出异常,而不是返回false
|
||||||
}
|
}
|
||||||
//Console.Read();
|
//Console.Read();
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -137,4 +164,3 @@ public class TencentSMSSendVerificationCode(TencentSMSConfig tencentSMSConfig, s
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user