qnc-server-old/service/verifyCode.go
2024-09-14 10:48:09 +08:00

86 lines
2.1 KiB
Go

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
}