mirror of
https://github.com/yangjian102621/geekai.git
synced 2025-09-18 17:26:38 +08:00
87 lines
2.1 KiB
Go
87 lines
2.1 KiB
Go
package sms
|
||
|
||
import (
|
||
"chatplus/core/types"
|
||
logger2 "chatplus/logger"
|
||
"fmt"
|
||
"io/ioutil"
|
||
"net/http"
|
||
"net/url"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
var logger = logger2.GetLogger()
|
||
|
||
type SmsBaoSmsService struct {
|
||
config *types.SmsBaoSmsConfig
|
||
}
|
||
|
||
func NewSmsBaoSmsService(appConfig *types.AppConfig) *SmsBaoSmsService {
|
||
return &SmsBaoSmsService{
|
||
config: &appConfig.SMS.SMSBAO,
|
||
}
|
||
}
|
||
|
||
var statusStr = map[string]string{
|
||
"0": "短信发送成功",
|
||
"-1": "参数不全",
|
||
"-2": "服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间",
|
||
"30": "密码错误",
|
||
"40": "账号不存在",
|
||
"41": "余额不足",
|
||
"42": "账户已过期",
|
||
"43": "IP地址限制",
|
||
"50": "内容含有敏感词",
|
||
}
|
||
|
||
func (s *SmsBaoSmsService) SendVerifyCode(mobile string, code int) error {
|
||
|
||
content := fmt.Sprintf("%s%s", s.config.Sign, s.config.CodeTemplate)
|
||
template := replaceTemplate(content, s.config.Num, code)
|
||
|
||
md5Hash := s.config.ApiKey
|
||
params := url.Values{}
|
||
params.Set("u", s.config.Account)
|
||
params.Set("p", md5Hash)
|
||
params.Set("m", mobile)
|
||
params.Set("c", template)
|
||
|
||
// 判断 s.config.Domain 是否为空
|
||
if s.config.Domain == "" {
|
||
// 设置默认值
|
||
s.config.Domain = "api.smsbao.com"
|
||
// 记录日志,提醒用户默认值被使用
|
||
logger.Infof("SmsBao.config.Domain is empty. Using default value: %s", s.config.Domain)
|
||
}
|
||
real_url := fmt.Sprintf("https://%s/sms?", s.config.Domain)
|
||
sendURL := real_url + params.Encode()
|
||
logger.Infof("send SmsBao content: %v", template)
|
||
|
||
response, err := http.Get(sendURL)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
defer response.Body.Close()
|
||
|
||
body, err := ioutil.ReadAll(response.Body)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
result := string(body)
|
||
logger.Infof("send SmsBao result: %v", statusStr[result])
|
||
|
||
if result != "0" {
|
||
return fmt.Errorf("failed to send SMS:%v", statusStr[result])
|
||
}
|
||
return nil
|
||
}
|
||
|
||
func replaceTemplate(template, num string, code int) string {
|
||
result := strings.ReplaceAll(template, "{code}", strconv.Itoa(code))
|
||
result = strings.ReplaceAll(result, "{num}", num)
|
||
return result
|
||
}
|
||
|
||
var _ SmsService = &SmsBaoSmsService{}
|