Files
hyapi-server/internal/infrastructure/external/sms/sender.go

39 lines
1.1 KiB
Go
Raw Normal View History

2026-04-21 22:36:48 +08:00
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)
}
}