Files
waf-platform/EdgeAPI/internal/senders/smssenders/sender_aliyun_sms.go
2026-02-04 20:27:13 +08:00

87 lines
2.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//go:build plus
package smssenders
import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/iwind/TeaGo/maps"
)
// AliyunSMSSender 阿里云短信
type AliyunSMSSender struct {
params *userconfigs.SMSSenderAliyunSMSParams
}
// NewAliyunSMSSender 获取新对象
func NewAliyunSMSSender() *AliyunSMSSender {
return &AliyunSMSSender{}
}
// Init 初始化
func (this *AliyunSMSSender) Init(params any) error {
if params == nil {
return errors.New("'params' should not be nil")
}
var ok bool
this.params, ok = params.(*userconfigs.SMSSenderAliyunSMSParams)
if !ok {
return errors.New("invalid params type")
}
return nil
}
// Send 发送短信
func (this *AliyunSMSSender) Send(mobile string, body string, code string) (resp string, isOk bool, err error) {
// {"Message":"OK","RequestId":"xxxx","BizId":"xxxx","Code":"OK"}
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", this.params.AccessKeyId, this.params.AccessKeySecret)
if err != nil {
panic(err)
}
var request = requests.NewCommonRequest()
request.Method = "POST"
request.Scheme = "https" // https | http
request.Domain = "dysmsapi.aliyuncs.com"
request.Version = "2017-05-25"
request.ApiName = "SendSms"
request.QueryParams["RegionId"] = "cn-hangzhou"
request.QueryParams["PhoneNumbers"] = mobile // TODO 支持海外手机号?
request.QueryParams["SignName"] = this.params.Sign
request.QueryParams["TemplateCode"] = this.params.TemplateCode
var codeVarName = this.params.CodeVarName
if len(codeVarName) == 0 {
codeVarName = "code"
}
templateParamJSON, err := json.Marshal(map[string]string{
codeVarName: code,
})
if err != nil {
return "", false, err
}
request.QueryParams["TemplateParam"] = string(templateParamJSON)
response, err := client.ProcessCommonRequest(request)
if err != nil {
return "", false, err
}
var data = response.GetHttpContentBytes()
m := maps.Map{}
err = json.Unmarshal(data, &m)
if err != nil {
return string(data), false, err
}
if m.GetString("Code") == "OK" {
return "", true, nil
}
return string(data), false, errors.New("fail to send sms" + string(data))
}