package service import ( "encoding/json" "errors" "fmt" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" dysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v3/client" util "github.com/alibabacloud-go/tea-utils/v2/service" "github.com/alibabacloud-go/tea/tea" config "qnc-server/config" "strings" ) type VerifyCode struct { } func (v *VerifyCode) CreateClient() (result *dysmsapi.Client, err error) { clientConfig := &openapi.Config{ AccessKeyId: &config.ConfigData.VerifyCode.AccessKeyID, AccessKeySecret: &config.ConfigData.VerifyCode.AccessKeySecret, } clientConfig.Endpoint = tea.String(config.ConfigData.VerifyCode.EndpointURL) result, err = dysmsapi.NewClient(clientConfig) return } func (v *VerifyCode) Send(code string, phoneNumber string, templateCode string) (err error) { client, err := v.CreateClient() if err != nil { return err } sendSmsRequest := &dysmsapi.SendSmsRequest{ SignName: tea.String(config.ConfigData.VerifyCode.SignName), TemplateCode: tea.String(templateCode), PhoneNumbers: tea.String(phoneNumber), TemplateParam: tea.String(fmt.Sprintf("{code:\"%s\"}", code)), } runtime := &util.RuntimeOptions{} err = func() (_e error) { defer func() { if r := tea.Recover(recover()); r != nil { _e = r } }() resp, err := client.SendSmsWithOptions(sendSmsRequest, runtime) if err != nil { var error = &tea.SDKError{} if _t, ok := err.(*tea.SDKError); ok { error = _t } else { error.Message = tea.String(err.Error()) } fmt.Println(tea.StringValue(error.Message)) // 诊断地址 var data interface{} d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data))) err := d.Decode(&data) if err != nil { return err } if m, ok := data.(map[string]interface{}); ok { recommend, _ := m["Recommend"] fmt.Println(recommend) } _, err = util.AssertAsString(error.Message) if err != nil { return err } } if *resp.Body.Code != "OK" { return errors.New(*resp.Body.Message) } return nil }() if err != nil { return err } return nil }