86 lines
2.1 KiB
Go
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
|
|
}
|