pkg/sms 提供短信服务商抽象、验证码生成与校验能力,并内置阿里云、腾讯云提供者。
SMSProvider。Engine 集成。type SMSConfig
Provider:aliyun / tencentAccessKey / SecretKeySignNameRegionAppID:腾讯云必填type SMSProvider interface
Send(mobile, templateID string, params map[string]string) errorRegisterProvider(name, factory)InitDefaultProvider(cfg)DefaultProvider()GetConfig()SendSMS(mobile, templateID, params):直接发送短信SendCode(mobile, opts...):生成验证码,可选自动短信发送VerifyCode(mobile, code):校验后即删除,一次性使用IsLocked(mobile):检查手机号是否被锁定Unlock(mobile):手动解锁GetFailures(mobile):获取失败次数GetCode(mobile):测试辅助DeleteCode(mobile):删除验证码WithCodeLengthWithCodeExpiryWithCodeTypeWithTemplateIDWithTemplateParamsWithMaxFailuresWithLockDurationProvider:服务商名称,必填AccessKey / SecretKey:服务商凭证,必填SignName:短信签名,必填Region:区域,可按服务商配置cn-hangzhouTemplateCode 与 JSON TemplateParamhttps://dysmsapi.aliyuncs.com/AppID 必填ap-guangzhousms.tencentcloudapi.com+86 国际号码走 sms.intl.tencentcloudapi.com6numeric5m515mimport (
"github.com/darkit/gin/pkg/sms"
_ "github.com/darkit/gin/pkg/sms/providers"
)
cfg := sms.SMSConfig{
Provider: "aliyun",
AccessKey: "ak",
SecretKey: "sk",
SignName: "Demo",
Region: "cn-hangzhou",
}
if err := sms.InitDefaultProvider(cfg); err != nil {
panic(err)
}
err := sms.SendSMS("13800138000", "SMS_123456", map[string]string{
"name": "Alice",
})
code, err := sms.SendCode(
"13800138000",
sms.WithTemplateID("SMS_LOGIN_CODE"),
sms.WithTemplateParams(map[string]string{"product": "Demo"}),
sms.WithCodeLength(6),
sms.WithCodeExpiry(5*time.Minute),
)
_ = code
_ = err
ok := sms.VerifyCode("13800138000", "123456")
if !ok && sms.IsLocked("13800138000") {
_ = sms.Unlock("13800138000")
}
gin.WithSMS(cfg):初始化 Engine 时保存配置,并调用 sms.InitDefaultProvider。_ "github.com/darkit/gin/pkg/sms/providers"e := gin.New(
gin.WithSMS(sms.SMSConfig{
Provider: "tencent",
AccessKey: "ak",
SecretKey: "sk",
SignName: "Demo",
AppID: "1400000000",
}),
)
VerifyCode 成功后会立即删除验证码。