aliyun.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package sms
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  6. dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v5/client"
  7. util "github.com/alibabacloud-go/tea-utils/v2/service"
  8. "github.com/alibabacloud-go/tea/tea"
  9. credential "github.com/aliyun/credentials-go/credentials"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/os/glog"
  12. "strings"
  13. "yx-dataset-server/app/errors"
  14. )
  15. type ALiYunSendSmsArgs struct {
  16. TemplateCode string `json:"template_code"`
  17. PhoneNumbers string `json:"phone_numbers"`
  18. TemplateParam string `json:"template_param"`
  19. }
  20. type ALiYunSendBatchSmsArgs struct {
  21. TemplateCode string `json:"template_code"`
  22. PhoneNumbers string `json:"phone_numbers"`
  23. TemplateParam string `json:"template_param"`
  24. }
  25. // Description:
  26. //
  27. // 使用凭据初始化账号Client
  28. //
  29. // @return Client
  30. //
  31. // @throws Exception
  32. func CreateClient() (result *dysmsapi20170525.Client, err error) {
  33. // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378661.html。
  34. //credential, err := credential.NewCredential(nil)
  35. //if err != nil {
  36. // return result, err
  37. //}
  38. //
  39. //config := &openapi.Config{
  40. // Credential: credential,
  41. // AccessKeyId: tea.String(g.Cfg().GetString("aliyun_sms.accessKeyId")),
  42. // AccessKeySecret: tea.String(g.Cfg().GetString("aliyun_sms.accessKeySecret")),
  43. //}
  44. //// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
  45. //config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  46. //result = &dysmsapi20170525.Client{}
  47. //result, err = dysmsapi20170525.NewClient(config)
  48. //return result, err
  49. credentialsConfig := new(credential.Config).
  50. // 凭证类型。
  51. SetType("access_key").
  52. // 设置为AccessKey ID值。
  53. SetAccessKeyId(g.Cfg().GetString("aliyun_sms.accessKeyId")).
  54. // 设置为AccessKey Secret值。
  55. SetAccessKeySecret(g.Cfg().GetString("aliyun_sms.accessKeySecret"))
  56. credentialClient, _err := credential.NewCredential(credentialsConfig)
  57. if _err != nil {
  58. panic(_err)
  59. }
  60. ecsConfig := &openapi.Config{}
  61. ecsConfig.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  62. ecsConfig.Credential = credentialClient
  63. result, err = dysmsapi20170525.NewClient(ecsConfig)
  64. return result, err
  65. }
  66. func SendSms(args ALiYunSendSmsArgs) error {
  67. client, err := CreateClient()
  68. if err != nil {
  69. return err
  70. }
  71. sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
  72. SignName: tea.String(g.Cfg().GetString("aliyun_sms.signName")),
  73. TemplateCode: tea.String(args.TemplateCode),
  74. PhoneNumbers: tea.String(args.PhoneNumbers),
  75. TemplateParam: tea.String(args.TemplateParam),
  76. }
  77. // 复制代码运行请自行打印 API 的返回值
  78. d, err := client.SendSmsWithOptions(sendSmsRequest, &util.RuntimeOptions{})
  79. if err != nil {
  80. return err
  81. }
  82. if d != nil && *d.Body.Message != "OK" {
  83. glog.Infof("短信发送失败:%s", *d.Body.Message)
  84. return errors.New400Response(fmt.Sprintf("发送失败:%s,请稍后重试", *d.Body.Message))
  85. }
  86. return nil
  87. //if tryErr != nil {
  88. // var error = &tea.SDKError{}
  89. // if _t, ok := tryErr.(*tea.SDKError); ok {
  90. // error = _t
  91. // } else {
  92. // error.Message = tea.String(tryErr.Error())
  93. // }
  94. // // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  95. // // 错误 message
  96. // fmt.Println(tea.StringValue(error.Message))
  97. // // 诊断地址
  98. // var data interface{}
  99. // d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
  100. // d.Decode(&data)
  101. // if m, ok := data.(map[string]interface{}); ok {
  102. // recommend, _ := m["Recommend"]
  103. // fmt.Println(recommend)
  104. // }
  105. // _, err = util.AssertAsString(error.Message)
  106. // if err != nil {
  107. // return err
  108. // }
  109. //}
  110. //return err
  111. }
  112. func SendBatchSms(args ALiYunSendBatchSmsArgs) error {
  113. client, err := CreateClient()
  114. if err != nil {
  115. return err
  116. }
  117. sendBatchSmsRequest := &dysmsapi20170525.SendBatchSmsRequest{
  118. SignNameJson: tea.String(g.Cfg().GetString("aliyun_sms.signName")),
  119. TemplateCode: tea.String(args.TemplateCode),
  120. PhoneNumberJson: tea.String(args.PhoneNumbers),
  121. TemplateParamJson: tea.String(args.TemplateParam),
  122. }
  123. tryErr := func() (e error) {
  124. defer func() {
  125. if r := tea.Recover(recover()); r != nil {
  126. e = r
  127. }
  128. }()
  129. // 复制代码运行请自行打印 API 的返回值
  130. _, err = client.SendBatchSmsWithOptions(sendBatchSmsRequest, &util.RuntimeOptions{})
  131. if err != nil {
  132. return err
  133. }
  134. return nil
  135. }()
  136. if tryErr != nil {
  137. var error = &tea.SDKError{}
  138. if _t, ok := tryErr.(*tea.SDKError); ok {
  139. error = _t
  140. } else {
  141. error.Message = tea.String(tryErr.Error())
  142. }
  143. // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  144. // 错误 message
  145. fmt.Println(tea.StringValue(error.Message))
  146. // 诊断地址
  147. var data interface{}
  148. d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
  149. d.Decode(&data)
  150. if m, ok := data.(map[string]interface{}); ok {
  151. recommend, _ := m["Recommend"]
  152. fmt.Println(recommend)
  153. }
  154. _, err = util.AssertAsString(error.Message)
  155. if err != nil {
  156. return err
  157. }
  158. }
  159. return err
  160. }