github.com/infraboard/keyauth@v0.8.1/apps/system/notify/sms/tencent.go (about) 1 package sms 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/infraboard/mcube/logger" 8 "github.com/infraboard/mcube/logger/zap" 9 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" 10 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" 11 sms "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms/v20190711" 12 13 "github.com/infraboard/keyauth/apps/system/notify" 14 ) 15 16 // newTenCentSMSSender todo 17 func newTenCentSMSSender(conf *TenCentConfig) (notify.SMSSender, error) { 18 if err := conf.Validate(); err != nil { 19 return nil, fmt.Errorf("validate tencent sms config error, %s", err) 20 } 21 22 s := &tencent{ 23 TenCentConfig: conf, 24 log: zap.L().Named("TenCent SMS"), 25 } 26 if err := s.init(); err != nil { 27 return nil, err 28 } 29 return s, nil 30 } 31 32 type tencent struct { 33 *TenCentConfig 34 35 sms *sms.Client 36 log logger.Logger 37 } 38 39 func (s *tencent) init() error { 40 credential := common.NewCredential( 41 s.SecretID, 42 s.SecretKey, 43 ) 44 cpf := profile.NewClientProfile() 45 cpf.HttpProfile.Endpoint = s.GetEndpoint() 46 client, err := sms.NewClient(credential, "", cpf) 47 if err != nil { 48 return err 49 } 50 s.sms = client 51 return nil 52 } 53 54 // Send todo 55 func (s *tencent) Send(req *notify.SendSMSRequest) error { 56 // 补充默认模板ID 57 if req.TemplateID == "" { 58 req.TemplateID = s.TemplateID 59 } 60 61 // 补充默认+86 62 req.InjectDefaultIsoCode() 63 64 if err := req.Validate(); err != nil { 65 return fmt.Errorf("validate send sms request error, %s", err) 66 } 67 68 request := sms.NewSendSmsRequest() 69 70 request.PhoneNumberSet = common.StringPtrs(req.PhoneNumberSet) 71 request.TemplateParamSet = common.StringPtrs(req.ParamSet) 72 request.TemplateID = common.StringPtr(req.TemplateID) 73 request.SmsSdkAppid = common.StringPtr(s.AppID) 74 request.Sign = common.StringPtr(s.Sign) 75 76 response, err := s.sms.SendSms(request) 77 if err != nil { 78 return err 79 } 80 81 for i := range response.Response.SendStatusSet { 82 if strings.ToUpper(*(response.Response.SendStatusSet[i].Code)) != "OK" { 83 return fmt.Errorf("send sms error, response is %s", response.ToJsonString()) 84 } 85 } 86 87 s.log.Debugf("send sms response success: %s", response.ToJsonString()) 88 return nil 89 }