smsUtil.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package utils
  2. import (
  3. "fmt"
  4. openapi "github.com/alibabacloud-go/darabonba-openapi/client"
  5. dysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v2/client"
  6. console "github.com/alibabacloud-go/tea-console/client"
  7. util "github.com/alibabacloud-go/tea-utils/service"
  8. "github.com/alibabacloud-go/tea/tea"
  9. "github.com/gin-gonic/gin"
  10. "github.com/goccy/go-json"
  11. "math/rand"
  12. "time"
  13. "ulink-admin/config"
  14. "ulink-admin/frame"
  15. )
  16. func SendSms(phone, signName, templateCode string, templateParam gin.H) {
  17. cfg := config.GetSmsCfg()
  18. client, _err := CreateClient(&cfg.AccessKeyID, &cfg.AccessKeySecret)
  19. if _err != nil {
  20. frame.Throw(frame.BUSINESS_CODE, _err.Error())
  21. }
  22. dataType, _ := json.Marshal(templateParam)
  23. dataString := string(dataType)
  24. sendReq := &dysmsapi.SendSmsRequest{
  25. PhoneNumbers: &phone,
  26. SignName: &signName,
  27. TemplateCode: &templateCode,
  28. TemplateParam: &dataString,
  29. }
  30. sendResp, _err := client.SendSms(sendReq)
  31. if _err != nil {
  32. frame.Throw(frame.BUSINESS_CODE, _err.Error())
  33. }
  34. code := sendResp.Body.Code
  35. if !tea.BoolValue(util.EqualString(code, tea.String("OK"))) {
  36. console.Log(tea.String("错误信息: " + tea.StringValue(sendResp.Body.Message)))
  37. frame.Throw(frame.BUSINESS_CODE, tea.StringValue(sendResp.Body.Message))
  38. }
  39. }
  40. // 使用AK&SK初始化账号Client
  41. func CreateClient(accessKeyId *string, accessKeySecret *string) (_result *dysmsapi.Client, _err error) {
  42. config := &openapi.Config{}
  43. config.AccessKeyId = accessKeyId
  44. config.AccessKeySecret = accessKeySecret
  45. _result = &dysmsapi.Client{}
  46. _result, _err = dysmsapi.NewClient(config)
  47. return _result, _err
  48. }
  49. func CreateCode() string {
  50. return fmt.Sprintf("%04v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000)) //这里面前面的04v是和后面的1000相对应的
  51. }