package aliyun import ( "context" "encoding/json" "fmt" "strings" "github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi" "git.5iot.com/iotlcm-public/iotlcm-sms/internal/sms" ) type Provider struct{} func New() *Provider { return &Provider{} } func (p *Provider) Send(_ context.Context, config sms.Config, message sms.Message) (sms.Result, error) { regionID := config.RegionID if regionID == "" { regionID = "cn-hangzhou" } client, err := dysmsapi.NewClientWithAccessKey(regionID, config.AccessKeyID, config.AccessKeySecret) if err != nil { return failed(err) } request := dysmsapi.CreateSendSmsRequest() request.Scheme = "https" request.PhoneNumbers = strings.Join(sms.SplitAndTrim(message.PhoneNumber, ","), ",") request.SignName = config.SignName request.TemplateCode = config.TemplateID request.TemplateParam = message.MsgContent response, err := client.SendSms(request) if err != nil { return failed(err) } data := map[string]any{ "provider": "aliyun", "requestId": response.RequestId, "bizId": response.BizId, "providerCode": response.Code, } if response.Code != "OK" { err = fmt.Errorf("阿里云短信发送失败: %s", response.Message) return sms.Result{Code: 502, Message: err.Error(), Data: data}, err } return sms.Result{Code: 0, Message: "发送成功", Data: data}, nil } func failed(err error) (sms.Result, error) { var sdkDetail map[string]any _ = json.Unmarshal([]byte(err.Error()), &sdkDetail) return sms.Result{Code: 502, Message: err.Error(), Data: sdkDetail}, err }