12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- package sms
- import (
- "bytes"
- "eta/eta_mini_ht_api/common/component/config"
- "eta/eta_mini_ht_api/common/component/database"
- "eta/eta_mini_ht_api/common/component/database/dialector"
- logger "eta/eta_mini_ht_api/common/component/log"
- "eta/eta_mini_ht_api/common/exception"
- "eta/eta_mini_ht_api/common/utils/sms"
- stringUtils "eta/eta_mini_ht_api/common/utils/string"
- emasSmsService "eta/eta_mini_ht_api/domian/sms"
- "gorm.io/gorm"
- "os"
- "text/template"
- )
- const (
- emasDriver = "mysql"
- )
- type EMASSmsSender struct {
- Url string
- Template string
- TemplateGenerator *template.Template
- SmsExpireMinute int
- }
- func initDBClient(url string) *gorm.DB {
- open, err := gorm.Open(dialector.GetGormDial(emasDriver).GetDial(url), &gorm.Config{})
- if err != nil {
- logger.Error("初始化亿美短信数据库失败:%v", err)
- os.Exit(0)
- }
- logger.Info("初始化亿美短信数据库成功")
- return open
- }
- func (emas *EMASSmsSender) InitSender(config *config.SMSConfig) {
- emas.Template = config.GetEMASTemplate()
- emas.Url = config.GetEMASUrl()
- emas.SmsExpireMinute = config.GetEMASExpireMinute()
- emas.TemplateGenerator = template.Must(template.New("smsTemplate").Parse(emas.Template))
- if stringUtils.IsEmptyOrNil(emas.Url) {
- panic("亿美短信平台初始化失败,数据库url不能为空")
- }
- database.Register(database.EMAS, initDBClient(emas.Url))
- }
- func (emas *EMASSmsSender) GetExpireMinute() int {
- return emas.SmsExpireMinute
- }
- type EMASResp struct {
- Reason string `json:"reason"`
- Result Result `json:"result"`
- ErrorCode int
- }
- type emasTemplate struct {
- ExpireMinute int
- Code string
- }
- func (emas *EMASSmsSender) SendSms(mobile string, code string, smId int) (result string, err error) {
- var content bytes.Buffer
- if err = emas.TemplateGenerator.Execute(&content, &emasTemplate{emas.SmsExpireMinute, code}); err != nil {
- // 处理错误,例如记录日志或返回错误给调用者
- logger.Warn("[短信发送]生成短信内容失败:%v", err)
- return SendFail, exception.New(exception.SendingSMSFailed)
- }
- msg := emasSmsService.Msg{SMId: smId, Mobile: mobile, Content: content.String()}
- err = emasSmsService.SendSms(msg)
- if err != nil {
- logger.Warn("[短信发送]发送短信失败:%v", err)
- return SendFail, exception.New(exception.SendingSMSFailed)
- }
- return SendSuccess, nil
- }
- func NewEMASClient() sms.SMSClient {
- return &EMASSmsSender{}
- }
- func init() {
- sms.Register(sms.Emas, NewEMASClient)
- }
|