telco_server/tools/sms/green_town.go
chenlin ef1a39a0a3 1、新增对外短信接口;
2、新增硕软相关接口;
2025-09-04 17:55:02 +08:00

209 lines
4.7 KiB
Go
Raw 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 sms
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"fmt"
"github.com/go-admin-team/go-admin-core/logger"
"io"
"io/ioutil"
"net/http"
"net/url"
"strconv"
"time"
)
var exchangeClient = ExchangeClient{
Name: "diwei",
Password: "deovo123",
BaseURL: "http://api.china95059.net:8080",
}
type ExchangeClient struct {
Name string
Password string
BaseURL string
}
type GreentownClient struct {
UserName string
Password string
BaseURL string
}
var townClient = GreentownClient{
UserName: "diwei",
Password: "vAoBFjuGCOEx",
BaseURL: "http://121.41.98.232:8001/sms",
}
const (
GtUrlRouteSendMessage = "/api/sendMessage"
)
type GtSendMessageResp struct {
Code int `json:"code"`
Message string `json:"message"`
MsgId int `json:"msgId"`
SmsCount int `json:"smsCount"`
}
func GtSendMessage(phoneList []string, content string) error {
params := make(map[string]interface{}, 0)
nowTime := time.Now()
fmt.Println("nowTime.UnixMicro", nowTime.UnixMilli())
params["timestamp"] = nowTime.UnixMilli()
params["phoneList"] = phoneList
params["content"] = content
params["sign"] = townClient.sign(content, nowTime)
resp := &GtSendMessageResp{}
err := townClient.post(townClient.BaseURL+GtUrlRouteSendMessage, params, resp)
if err != nil {
logger.Error("townClient post err:", err)
return err
}
fmt.Println("resp:", resp)
return nil
}
func (g *GreentownClient) post(amApi string, params map[string]interface{}, resp interface{}) error {
params["userName"] = g.UserName
data, err := json.Marshal(params)
if err != nil {
logger.Error("err:", err)
return err
}
req, err := http.NewRequest("POST", amApi, bytes.NewReader(data))
if err != nil {
logger.Error("NewRequest err:", err)
return err
}
req.Header.Set("Accept", "application/json")
req.Header.Set("Content-Type", "application/json;charset=utf-8")
res, err := http.DefaultClient.Do(req)
if err != nil {
logger.Error("DefaultClient err:", err)
return err
}
readAll, err := io.ReadAll(res.Body)
if err != nil {
logger.Error("ReadAll err:", err)
return err
}
if err = json.Unmarshal(readAll, resp); err != nil {
logger.Error("err:", err)
return err
}
fmt.Println("readAll:", string(readAll))
return nil
}
func (g *GreentownClient) sign(content string, now time.Time) string {
return MD5Encode32(g.UserName + content + fmt.Sprintf("%d", now.UnixMilli()) + MD5Encode32(g.Password))
}
func MD5Encode32(data string) string {
h := md5.New()
h.Write([]byte(data))
return hex.EncodeToString(h.Sum(nil))
}
func SmsSend(tel, content string) error {
params := &url.Values{}
params.Set("mobile", tel)
params.Set("msg", content)
//latestUSDResp := &LatestUSDResp{}
err := exchangeClient.get("/sms/send?", params, nil)
if err != nil {
logger.Error("err:", err)
return err
}
return nil
}
func (m *ExchangeClient) get(amApi string, params *url.Values, resp interface{}) error {
params.Set("name", m.Name)
params.Set("pswd", m.Password)
uri := m.BaseURL + amApi
fmt.Println("uri:", uri)
fmt.Println("uri:", uri+params.Encode())
req, err := http.NewRequest("GET", uri+params.Encode(), nil)
if err != nil {
logger.Error("err:", err)
return err
}
req.Header.Set("Content-Type", "application/json")
res, err := (&http.Client{}).Do(req)
if err != nil {
logger.Error("err:", err)
return err
}
defer res.Body.Close()
data, err := ioutil.ReadAll(res.Body)
if err != nil {
logger.Error("err:", err)
return err
}
//fmt.Println("返回数据data:")
fmt.Println("Body:", string(data))
//if err = json.Unmarshal(data, &resp); err != nil {
// logger.Error("err:",logger.Field("err",err))
// return err
//}
return nil
}
func (m *ExchangeClient) post(amApi string, params, resp interface{}) error {
uri := m.BaseURL + amApi
data, err := json.Marshal(params)
if err != nil {
logger.Error("err:", err)
return err
}
req, err := http.NewRequest("POST", uri, bytes.NewReader(data))
if err != nil {
logger.Error("err:", err)
return err
}
req.Header.Set("Content-Type", "application/json")
res, err := (&http.Client{}).Do(req)
if err != nil {
logger.Error("err:", err)
return err
}
defer res.Body.Close()
//fmt.Println("返回数据data:")
//fmt.Println("Body:", string(data))
data, err = ioutil.ReadAll(res.Body)
if err != nil {
logger.Error("err:", err)
return err
}
if err = json.Unmarshal(data, resp); err != nil {
logger.Error("err:", err)
return err
}
return nil
}
// GenerateSign 生成签名MD5(userName + content + phone + timestamp + MD5(password))
func GenerateSign(userName, passWord, content, phone string, timestamp int64) string {
md5Pwd := MD5Encode32(passWord)
raw := userName + content + phone + strconv.FormatInt(timestamp, 10) + md5Pwd
return MD5Encode32(raw)
}