77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package alibabacloud
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/perfect-panel/server/pkg/logger"
|
|
|
|
openapi "github.com/alibabacloud-go/darabonba-openapi/client"
|
|
dysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v2/client"
|
|
"github.com/alibabacloud-go/tea/tea"
|
|
)
|
|
|
|
type Config struct {
|
|
Access string `json:"access"`
|
|
Secret string `json:"secret"`
|
|
SignName string `json:"sign_name"`
|
|
Endpoint string `json:"endpoint"`
|
|
TemplateCode string `json:"template_code"`
|
|
}
|
|
|
|
type Client struct {
|
|
config *Config
|
|
client *dysmsapi.Client
|
|
}
|
|
|
|
func NewClient(config Config) *Client {
|
|
client, err := initApiClient(config)
|
|
if err != nil {
|
|
logger.Error("NewClient: init Alibaba Cloud Api Client failed", logger.Field("error", err.Error()))
|
|
}
|
|
return &Client{
|
|
config: &config,
|
|
client: client,
|
|
}
|
|
}
|
|
|
|
func (c *Client) SendCode(area, mobile, code string) error {
|
|
if c.client == nil {
|
|
return fmt.Errorf("alibaba cloud api client is nil")
|
|
}
|
|
jsonCode, _ := json.Marshal(map[string]interface{}{
|
|
"code": code,
|
|
})
|
|
sendSmsRequest := &dysmsapi.SendSmsRequest{
|
|
PhoneNumbers: tea.String(fmt.Sprintf("%s%s", area, mobile)),
|
|
TemplateCode: tea.String(c.config.TemplateCode),
|
|
SignName: tea.String(c.config.SignName),
|
|
TemplateParam: tea.String(string(jsonCode)),
|
|
}
|
|
sendSmsResponse, err := c.client.SendSms(sendSmsRequest)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if *sendSmsResponse.Body.Code != "OK" {
|
|
return fmt.Errorf("alibaba cloud send sms failed, code: %s, message: %s", *sendSmsResponse.Body.Code, *sendSmsResponse.Body.Message)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func initApiClient(config Config) (*dysmsapi.Client, error) {
|
|
cfg := &openapi.Config{
|
|
AccessKeyId: tea.String(config.Access),
|
|
AccessKeySecret: tea.String(config.Secret),
|
|
Endpoint: tea.String(config.Endpoint),
|
|
}
|
|
if config.Endpoint == "" {
|
|
cfg.Endpoint = tea.String("dysmsapi.ap-southeast-1.aliyuncs.com")
|
|
}
|
|
result, err := dysmsapi.NewClient(cfg)
|
|
return result, err
|
|
}
|
|
|
|
func (c *Client) GetSendCodeContent(code string) string {
|
|
return fmt.Sprintf("TemplateId: %s, SignName:%s, Code: %s", c.config.TemplateCode, c.config.SignName, code)
|
|
}
|