本文主要是介绍golang调用阿里云发短信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前用golang封装的一个发送阿里云短信的工具包,代码如下
client.go
package smsimport ("context""github.com/go-playground/validator/v10""github.com/pkg/errors"
)type Client interface {// Send 发送短信Send(ctx context.Context, opt *SendOpt) error
}type SendOpt struct {// 必填:待发送手机号// 批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式PhoneNumbers []string `validate:"required,max=1000"`SignName string// 必填:短信模板-可在短信控制台中找到TemplateCode string `validate:"required"`// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,// 否则会导致JSON在服务端解析失败TemplateParam string `validate:"required"`// 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)SmsUpExtendCode string// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者OutId string
}func (p *SendOpt) Valid() error {if err := validator.New().Struct(p); err != nil {return errors.WithStack(err)}return nil
}
impl.go
package smsimport ("context""strings""time""github.com/denverdino/aliyungo/sms""github.com/pkg/errors"
)const (defaultSignName = ""
)var (ErrBusinessLimitControl = errors.New("BUSINESS_LIMIT_CONTROL")
)type ClientImpl struct {aliyunSms *sms.DYSmsClient
}type CodeStore interface {Save(ctx context.Context, key, smsCode string, expire time.Duration) errorGet(ctx context.Context, key string) (string, error)
}type ClientOpt struct {Key stringSecret string
}func NewClient(opt *ClientOpt) Client {return &ClientImpl{aliyunSms: sms.NewDYSmsClient(opt.Key, opt.Secret),}
}func (p *ClientImpl) Send(_ context.Context, opt *SendOpt) error {if err := opt.Valid(); err != nil {return err}s := defaultSignNameif opt.SignName != "" {s = opt.SignName}res, err := p.aliyunSms.SendSms(&sms.SendSmsArgs{PhoneNumbers: strings.Join(opt.PhoneNumbers, ","),SignName: s,TemplateCode: opt.TemplateCode,TemplateParam: opt.TemplateParam,SmsUpExtendCode: opt.SmsUpExtendCode,OutId: opt.OutId,})if err != nil {return errors.WithStack(err)}switch res.Code {case "OK":return nilcase "isv.BUSINESS_LIMIT_CONTROL":return ErrBusinessLimitControldefault:return errors.Errorf("send sms fail: %s, RequestId<%s>, Code<%s>, BizId<%s>",res.Message, res.RequestId, res.Code, res.BizId)}
}
这篇关于golang调用阿里云发短信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!