// Package aliyun 短信 package aliyun import ( "encoding/json" "errors" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" dysmsapi20170525 "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" "vote-admin-api/config" ) func createClient() (_result *dysmsapi20170525.Client, _err error) { accessKeyId := config.C.Dysms.DysmsAccessKey accessKeySecret := config.C.Dysms.DysmsAccessSecret openapiConfig := &openapi.Config{ // 必填,您的 AccessKey ID AccessKeyId: &accessKeyId, // 必填,您的 AccessKey Secret AccessKeySecret: &accessKeySecret, } // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi openapiConfig.Endpoint = tea.String("dysmsapi.aliyuncs.com") _result = &dysmsapi20170525.Client{} _result, _err = dysmsapi20170525.NewClient(openapiConfig) return _result, _err } // SendSms 发送短信 func SendSms(phoneNumber, templateCode, sceneDesc string, templateParam map[string]interface{}) error { client, err := createClient() if err != nil { return err } params, err := json.Marshal(templateParam) if err != nil { return err } sendSmsRequest := &dysmsapi20170525.SendSmsRequest{ PhoneNumbers: tea.String(phoneNumber), SignName: tea.String("肝胆相照"), TemplateCode: tea.String(templateCode), TemplateParam: tea.String(string(params)), } tryErr := func() (e error) { defer func() { if r := tea.Recover(recover()); r != nil { e = r } }() // 初始化运行时配置。 runtime := &util.RuntimeOptions{} // 读取超时 runtime.SetReadTimeout(10000) // 连接超时 runtime.SetConnectTimeout(5000) // 复制代码运行请自行打印 API 的返回值 response, err := client.SendSms(sendSmsRequest) if err != nil { return err } if response.Body == nil { return errors.New("短信发送失败") } if response.Body.Code != nil && *response.Body.Code != "OK" { if response.Body.Message != nil { return errors.New(*response.Body.Message) } } // 检测唯一值返回 if response.Body.RequestId == nil { if response.Body.Message != nil { return errors.New(*response.Body.Message) } } return nil }() if tryErr != nil { var sdkError = &tea.SDKError{} if t, ok := tryErr.(*tea.SDKError); ok { sdkError = t } else { sdkError.Message = tea.String(tryErr.Error()) } // 如有需要,请打印 error _, err = util.AssertAsString(sdkError.Message) if err != nil { return err } } return err }