mh_goadmin_server/app/admin/models/greentown_sms.go

230 lines
5.5 KiB
Go
Raw Permalink Normal View History

2023-09-16 02:56:39 +00:00
package models
import (
"bytes"
"crypto/md5"
"encoding/hex"
"encoding/json"
"errors"
2023-09-16 02:56:39 +00:00
"fmt"
"go-admin/logger"
"io"
"io/ioutil"
"net/http"
"net/url"
"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"`
}
2023-10-08 07:05:33 +00:00
func GtSendMessage(phoneList []string, content string) error {
if len(phoneList) > GetSmsNumberRemaining() { // 待发送短信超出剩余可用数量
return errors.New("短信剩余数量不足")
}
2023-09-16 02:56:39 +00:00
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 {
2023-10-14 08:19:04 +00:00
logger.Error("townClient post err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
fmt.Println("resp:", resp)
// 更新已使用的短信数量
err = UpdateSmsUsedCount(len(phoneList))
if err != nil {
logger.Error("UpdateSmsUsedCount err", logger.Field("sms count", len(phoneList)), logger.Field("err", err))
return err
}
2023-09-16 02:56:39 +00:00
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 {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
req, err := http.NewRequest("POST", amApi, bytes.NewReader(data))
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("NewRequest err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
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 {
2023-10-14 08:19:04 +00:00
logger.Error("DefaultClient err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
readAll, err := io.ReadAll(res.Body)
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("ReadAll err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
if err = json.Unmarshal(readAll, resp); err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
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))
}
//账号diwei
//密码deovo123
//func ExchangeLatestUSD() (float64, error) {
// //params := &url.Values{}
// //latestUSDResp := &LatestUSDResp{}
// //err := exchangeClient.get("/latest/USD", params, latestUSDResp)
// //if err != nil {
2023-10-14 08:19:04 +00:00
// // log.Error().Msgf("err:%#v",logger.Field("err",err))
2023-09-16 02:56:39 +00:00
// // return 0, err
// //}
// //return latestUSDResp.ConversionRates.CNY, nil
//}
//&mobile=15015001500 &msg=【绿城信息】您
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 {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
return nil
}
////https://v6.exchangerate-api.com/v6/a9208b64e4f178642020790f/latest/USD
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 {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
req.Header.Set("Content-Type", "application/json")
res, err := (&http.Client{}).Do(req)
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
defer res.Body.Close()
data, err := ioutil.ReadAll(res.Body)
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
//fmt.Println("返回数据data:")
fmt.Println("Body:", string(data))
//if err = json.Unmarshal(data, &resp); err != nil {
2023-10-14 08:19:04 +00:00
// logger.Error("err:",logger.Field("err",err))
2023-09-16 02:56:39 +00:00
// 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 {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
req, err := http.NewRequest("POST", uri, bytes.NewReader(data))
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
req.Header.Set("Content-Type", "application/json")
res, err := (&http.Client{}).Do(req)
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
defer res.Body.Close()
//fmt.Println("返回数据data:")
//fmt.Println("Body:", string(data))
data, err = ioutil.ReadAll(res.Body)
if err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
if err = json.Unmarshal(data, resp); err != nil {
2023-10-14 08:19:04 +00:00
logger.Error("err:", logger.Field("err", err))
2023-09-16 02:56:39 +00:00
return err
}
return nil
}