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  }