f
This commit is contained in:
38
internal/infrastructure/external/sms/sender.go
vendored
Normal file
38
internal/infrastructure/external/sms/sender.go
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
package sms
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
"hyapi-server/internal/config"
|
||||
)
|
||||
|
||||
// SMSSender 短信发送抽象(验证码 + 余额预警),支持阿里云与腾讯云等实现。
|
||||
type SMSSender interface {
|
||||
SendVerificationCode(ctx context.Context, phone, code string) error
|
||||
SendBalanceAlert(ctx context.Context, phone string, balance, threshold float64, alertType string, enterpriseName ...string) error
|
||||
GenerateCode(length int) string
|
||||
}
|
||||
|
||||
// NewSMSSender 根据 sms.provider 创建实现;mock_enabled 时返回模拟发送器。
|
||||
// provider 为空时默认 tencent。
|
||||
func NewSMSSender(cfg config.SMSConfig, logger *zap.Logger) (SMSSender, error) {
|
||||
if cfg.MockEnabled {
|
||||
return NewMockSMSService(logger), nil
|
||||
}
|
||||
p := strings.ToLower(strings.TrimSpace(cfg.Provider))
|
||||
if p == "" {
|
||||
p = "tencent"
|
||||
}
|
||||
switch p {
|
||||
case "tencent":
|
||||
return NewTencentSMSService(cfg, logger)
|
||||
case "aliyun", "alicloud", "ali":
|
||||
return NewAliSMSService(cfg, logger)
|
||||
default:
|
||||
return nil, fmt.Errorf("不支持的短信服务商: %s(支持 aliyun、tencent)", cfg.Provider)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user