93 lines
2.7 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.

package api
import (
"encoding/json"
"fmt"
"gitea.party/public-messag-service/common/params"
"gitea.party/public-messag-service/common/public"
"gitea.party/public-messag-service/internal/models/mysql"
"gitea.party/public-messag-service/router/web"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/services/dysmsapi"
"github.com/gin-gonic/gin"
"log"
"time"
)
func SmsXSend(c *gin.Context) {
result := web.NewResponse()
defer web.SendResponse(c, result)()
pm := params.SmsSend{}
err := c.ShouldBindJSON(&pm)
if err != nil {
result.SetErrCode(public.RespCodeErrorParam).AddError(err)
return
}
client, err := dysmsapi.NewClientWithAccessKey(pm.RegionId, pm.AccessKeyId, pm.AccessKeySecret)
if err != nil {
log.Fatalf("Failed to initialize client: %v", err)
}
// 创建请求
request := requests.NewCommonRequest()
request.Method = "POST"
request.Scheme = "https"
request.Domain = "dysmsapi.ap-southeast-1.aliyuncs.com" // 固定域名
request.Version = "2018-05-01" // API 版本
request.ApiName = "BatchSendMessageToGlobe" // 接口名称
// 设置请求参数
request.QueryParams["RegionId"] = "ap-southeast-1" // 国际短信固定参数
// 构造批量发送参数
type MessageParam struct {
To string `json:"to"`
From string `json:"from"`
Message string `json:"message"`
Type string `json:"type"`
}
// 定义多条短信参数
messages := make([]MessageParam, 0, len(pm.Phone))
messagesLogData := make([]map[string]interface{}, 0, len(pm.Phone))
for _, v := range pm.Phone {
var item = MessageParam{
To: v,
From: "Alicloud", // Sender ID视国家要求可能需注册
Message: pm.Content,
Type: "OTP", // 短信类型
}
messages = append(messages, item)
messagesLogData = append(messagesLogData, map[string]interface{}{
"msg_type": 1,
"to_phone_email": v,
"msg_content": pm.Content,
})
}
// 将消息参数转换为 JSON
messagesJSON, err := json.Marshal(messages)
if err != nil {
log.Fatalf("Failed to marshal messages: %v", err)
}
request.QueryParams["MessageParamList"] = string(messagesJSON)
// 发送请求
res, err := client.ProcessCommonRequest(request)
if err != nil {
log.Fatalf("Failed to send request: %v", err)
}
for _, v := range messagesLogData {
v["result_msg"], _ = json.Marshal(err)
v["created_at"] = time.Now().Unix()
}
var msgModel mysql.MessageSendLog
_, errMsg := msgModel.BatchCreate(messagesLogData)
if errMsg == nil && res.IsSuccess() {
result.SetData(res.GetHttpContentString())
return
} else {
result.SetErrMsg(public.RespCodeErrorUnknown, fmt.Sprintf("短信发送失败: %s", res.GetHttpContentString())).AddError(err)
return
}
}