217 lines
4.8 KiB
Go
217 lines
4.8 KiB
Go
package models
|
||
|
||
import (
|
||
"bytes"
|
||
"crypto/md5"
|
||
"encoding/hex"
|
||
"encoding/json"
|
||
"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"`
|
||
}
|
||
|
||
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))
|
||
}
|
||
|
||
//账号:diwei
|
||
//密码:deovo123
|
||
//func ExchangeLatestUSD() (float64, error) {
|
||
// //params := &url.Values{}
|
||
// //latestUSDResp := &LatestUSDResp{}
|
||
// //err := exchangeClient.get("/latest/USD", params, latestUSDResp)
|
||
// //if err != nil {
|
||
// // log.Error().Msgf("err:%#v", err)
|
||
// // 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 {
|
||
logger.Error("err:", err)
|
||
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 {
|
||
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:", 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
|
||
}
|