3 Star 5 Fork 3

三三物联网/ssiot-core

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
sms.go 3.96 KB
一键复制 编辑 原始数据 按行查看 历史
三三物联网 提交于 2023-04-03 00:22 . 重构
package sms
import (
"encoding/json"
"errors"
"gitee.com/sansaniot/ssiot-core/msg/msgtype"
"strings"
time "github.com/alibabacloud-go/darabonba-time/client"
dysmsapi "github.com/alibabacloud-go/dysmsapi-20170525/v2/client"
console "github.com/alibabacloud-go/tea-console/client"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
)
//阿里云短信服务参数
type SMSConfig struct {
AccessKeyId string
AccessKeySecret string
SignName string
//TemplateCode string
}
var smsConfig *SMSConfig
//SMSCustParam 自定义短信参数
type SMSCustParam struct {
Phone []string `common:"手机号"`
Param map[string]string `common:"短信参数(占位符的key与value)"`
Code string `common:"短信模板Code"`
}
func SendSMSByData(smsData SMSCustParam) (err error) {
if len(smsData.Phone) == 0 {
return errors.New("手机号不能为空")
}
data, _ := json.Marshal(smsData.Param)
templateParam := string(data)
phone := strings.Join(smsData.Phone, ",")
return _send(phone, smsData.Code, templateParam)
}
// SendSMS
//SMSParam 内置模板
type SMSParam struct {
Phone string `common:"手机号"`
Data string `common:"短信参数(占位符的内容)"`
}
/*
短信发送示例:
sms.SendSMS(sms.SMSParam{
Phone: "15527557427",
Code: "8888",
})
*/
func SendSMS(smsData SMSParam, msgCode string) (err error) {
mstType := msgtype.GetMessage(msgCode)
param := make(map[string]string)
if msgCode == msgtype.RegCode.MsgCode {
param["captcha"] = smsData.Data
} else if msgCode == msgtype.ApproveOk.MsgCode {
param["userName"] = smsData.Data
} else if msgCode == msgtype.ApproveReject.MsgCode {
if len(smsData.Data) == 0 {
smsData.Data = "400-00-64288"
}
param["phone"] = smsData.Data
}
data, _ := json.Marshal(param)
templateParam := string(data)
return _send(smsData.Phone, mstType.TemplateCode, templateParam)
}
func _send(phone string, code string, data string) error {
client, err := initClient()
if err != nil {
return err
}
sendReq := &dysmsapi.SendSmsRequest{
PhoneNumbers: &phone,
SignName: &smsConfig.SignName,
TemplateCode: &code,
TemplateParam: &data,
}
// 1.发送短信
sendResp, err := client.SendSms(sendReq)
if err != nil {
return err
}
// 2. 请求响应
resCode := sendResp.Body.Code
if !tea.BoolValue(util.EqualString(resCode, tea.String("OK"))) {
console.Warning(tea.String("错误信息: " + tea.StringValue(sendResp.Body.Message)))
return errors.New("短信发送失败,请联系管理员。" + *sendResp.Body.Message)
}
return nil
}
// GetSendStatus 查询短信发送结果
// @phone 手机号码
// @sendResp 发送短信响应
func GetSendStatus(phone string, sendResp *dysmsapi.SendSmsResponse) error {
client, err := initClient()
if err != nil {
return err
}
// 3. 查询结果(等待 10 秒后查询结果)
bizId := sendResp.Body.BizId
// 4. 查询结果
phoneNums := strings.Split(phone, ",")
for _, phoneNum := range phoneNums {
queryReq := &dysmsapi.QuerySendDetailsRequest{
PhoneNumber: util.AssertAsString(phoneNum),
BizId: bizId,
SendDate: time.Format(tea.String("yyyyMMdd")),
PageSize: tea.Int64(10),
CurrentPage: tea.Int64(1),
}
queryResp, _err := client.QuerySendDetails(queryReq)
if _err != nil {
return _err
}
dtos := queryResp.Body.SmsSendDetailDTOs.SmsSendDetailDTO
// 打印结果
for _, dto := range dtos {
if tea.BoolValue(util.EqualString(tea.String(tea.ToString(tea.Int64Value(dto.SendStatus))), tea.String("3"))) {
console.Log(tea.String(tea.StringValue(dto.PhoneNum) + " 发送成功,接收时间: " + tea.StringValue(dto.ReceiveDate)))
} else if tea.BoolValue(util.EqualString(tea.String(tea.ToString(tea.Int64Value(dto.SendStatus))), tea.String("2"))) {
console.Log(tea.String(tea.StringValue(dto.PhoneNum) + " 发送失败"))
} else {
console.Log(tea.String(tea.StringValue(dto.PhoneNum) + " 正在发送中..."))
}
}
}
return err
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/sansaniot/ssiot-core.git
git@gitee.com:sansaniot/ssiot-core.git
sansaniot
ssiot-core
ssiot-core
v1.6.7

搜索帮助