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 { logger.Info("短信服务使用 Mock 模式,已跳过云厂商发送") return NewMockSMSService(logger), nil } p := strings.ToLower(strings.TrimSpace(cfg.Provider)) if p == "" { p = "tencent" } logger.Info("初始化短信服务商", zap.String("provider", p)) 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) } }