93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
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
|
||
}
|
||
}
|