7
0

新增sms相关接口

This commit is contained in:
许 洋 2025-05-06 18:09:59 +08:00
parent 78d60083f7
commit ce30ff4ef9
5 changed files with 365 additions and 0 deletions

110
services/sms/client.go Normal file
View File

@ -0,0 +1,110 @@
package sms
import (
"crypto/md5"
"encoding/hex"
"errors"
"fmt"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"time"
)
const (
VERSION = "2024-05-30"
)
var HOST = requests.Host{
Default: "sms.gaore.com:8804",
}
type Client struct {
sdk.Client
}
func NewClient() (client *Client, err error) {
client = new(Client)
err = client.Init()
return
}
func (c *Client) SendEmail(req *SendEmailRequest) (resp *SendEmailResponse, err error) {
if len(req.Addresses) == 0 {
return nil, errors.New("addresses is empty")
}
if req.FromName == "" {
return nil, errors.New("from is empty")
}
if req.Subject == "" {
return nil, errors.New("subject is empty")
}
if req.Body == "" {
return nil, errors.New("content is empty")
}
ts, token := getToken("04573fc4c8e01999a0909ab9c00bca5a")
req.JsonParams["sign"] = token
req.JsonParams["time"] = ts
resp = CreateSendEmailResponse()
err = c.DoAction(req, resp)
return
}
func (c *Client) SendFeiShuWebHook(req *SendFeiShuWebHookRequest) (resp *SendFeiShuWebHookResponse, err error) {
if req.Content == "" {
err = errors.New("content is empty")
return
}
if req.Do == "" {
err = errors.New("webhook is empty")
return
}
if req.Token == "" {
err = errors.New("token is empty")
return
}
resp = CreateSendFeiShuWebHookResponse()
err = c.DoAction(req, resp)
return
}
func (c *Client) SendSms(req *SendSmsRequest) (resp *SendSmsResponse, err error) {
if req.Mobile == "" {
err = errors.New("mobile is empty")
return
}
if req.Type == "" {
err = errors.New("type is empty")
return
}
if req.Expired == 0 {
err = errors.New("expired is empty")
return
}
if req.Code == 0 {
err = errors.New("code is empty")
return
}
resp = CreateSendSmsResponse()
err = c.DoAction(req, resp)
return
}
func getToken(key string) (ts int64, token string) {
ts = time.Now().Unix()
hash := md5.New()
hash.Write([]byte(fmt.Sprintf("%v%v", ts, key)))
hashBytes := hash.Sum(nil)
token = hex.EncodeToString(hashBytes)
return
}

110
services/sms/client_test.go Normal file
View File

@ -0,0 +1,110 @@
package sms
import (
"fmt"
"testing"
)
var (
client *Client
)
func TestMain(t *testing.M) {
var err error
client, err = NewClient()
if err != nil {
panic(err)
}
t.Run()
}
func TestClient_SendEmail(t *testing.T) {
req := CreateSendEmailRequest(SendEmailParam{
Addresses: []string{"xuyang@89you.com"},
Subject: "测试邮件",
Body: "xxx已修改密码新密码是xxx",
FromName: "高热监控",
})
email, err := client.SendEmail(req)
if err != nil {
panic(err)
}
fmt.Println(email)
}
func TestClient_SendFeiShuWebHook(t *testing.T) {
//req := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
// Do: "sendCardText",
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
// Content: "[{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"请完成以下任务:\"}},{\"tag\":\"action\",\"actions\":[{\"tag\":\"button\",\"text\":{\"tag\":\"plain_text\",\"content\":\"查看详情\"},\"type\":\"primary\",\"url\":\"https:\\\\\\\\/\\\\\\\\/example.com\\\\\\\\/task\"}]}]",
// Title: "卡片主标题",
// TitleColor: "purple",
//})
//
//resp, err := client.SendFeiShuWebHook(req)
//if err != nil {
// panic(err)
//}
//fmt.Println(resp)
//
//req2 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
// Do: "sendSimpleText",
// Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
// Content: " - 苹果IDXXXX\n - 游戏IDXXXX\n - bundleIDXXXX\n - 应用名XXX\n - 下架时间2025-04-18 123652\n - IPXX城市A省份、XX城市B省份说明XX为具体的IP括号内为IP对应的城市",
//})
//
//resp2, err := client.SendFeiShuWebHook(req2)
//if err != nil {
// panic(err)
//}
//fmt.Println(resp2)
//[
// [
// {
// "tag": "text",
// "text": "苹果IDXXXX"
// }
// ],
// [
// {
// "tag": "text",
// "text": "游戏IDXXXX"
// }
// ]
//]
req3 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
TitleColor: "purple",
Title: "监控报警",
Do: "sendCardText",
Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
Content: "[{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"苹果IDXXXX\"}},{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"游戏IDXXXX\"}}]",
})
resp3, err := client.SendFeiShuWebHook(req3)
if err != nil {
panic(err)
}
fmt.Println(resp3.Msg)
fmt.Println(resp3)
}
func TestClient_SendSms(t *testing.T) {
req := CreateSendSmsRequest(SendSmsParam{
Mobile: "18320021439",
Type: SmsTypeRegister,
Code: 123456,
Expired: 5,
})
sms, err := client.SendSms(req)
if err != nil {
panic(err)
}
fmt.Println(sms)
}

45
services/sms/email.go Normal file
View File

@ -0,0 +1,45 @@
package sms
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
type SendEmailRequest struct {
*requests.JsonRequest
Addresses []string `position:"Json" field:"addresses"`
Subject string `position:"Json" field:"subject"`
Body string `position:"Json" field:"body"`
FromName string `position:"Json" field:"from_name"`
}
type SendEmailResponse struct {
*responses.BaseResponse
}
type SendEmailParam struct {
Addresses []string
Subject string
Body string
FromName string
}
func CreateSendEmailRequest(param SendEmailParam) (req *SendEmailRequest) {
req = &SendEmailRequest{
JsonRequest: &requests.JsonRequest{},
Addresses: param.Addresses,
Subject: param.Subject,
Body: param.Body,
FromName: param.FromName,
}
req.InitWithApiInfo(HOST, VERSION, "/email/send")
req.Method = requests.POST
return
}
func CreateSendEmailResponse() (resp *SendEmailResponse) {
resp = &SendEmailResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}

49
services/sms/feishu.go Normal file
View File

@ -0,0 +1,49 @@
package sms
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
type SendFeiShuWebHookRequest struct {
*requests.JsonRequest
Do string `position:"Json" field:"do"`
Token string `position:"Json" field:"token"`
Content string `position:"Json" field:"content"`
Title string `position:"Json" field:"title"`
TitleColor string `position:"Json" field:"title_color"`
}
type SendFeiShuWebHookResponse struct {
*responses.BaseResponse
FeishuData string `json:"feishu_data"`
}
type SendFeiShuWebHookParam struct {
Do string
Token string
Content string
Title string
TitleColor string
}
func CreateSendFeiShuWebHookRequest(param SendFeiShuWebHookParam) (req *SendFeiShuWebHookRequest) {
req = &SendFeiShuWebHookRequest{
JsonRequest: &requests.JsonRequest{},
Do: param.Do,
Token: param.Token,
Content: param.Content,
Title: param.Title,
TitleColor: param.TitleColor,
}
req.InitWithApiInfo(HOST, VERSION, "/feishu/webhook_send")
req.Method = requests.POST
return
}
func CreateSendFeiShuWebHookResponse() (resp *SendFeiShuWebHookResponse) {
resp = &SendFeiShuWebHookResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}

51
services/sms/sms.go Normal file
View File

@ -0,0 +1,51 @@
package sms
import (
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
"golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
)
type SendSmsRequest struct {
*requests.JsonRequest
Mobile string `position:"Json" field:"mobile"`
Type string `position:"Json" field:"type"`
Expired int64 `position:"Json" field:"expired"`
Code int64 `position:"Json" field:"code"`
}
type SendSmsResponse struct {
*responses.BaseResponse
}
type SmsType = string
const (
SmsTypeRegister SmsType = "reg" // 注册
)
type SendSmsParam struct {
Mobile string // 手机号
Type SmsType // 验证码类型
Expired int64 // 过期时间,秒数
Code int64 // 验证码
}
func CreateSendSmsRequest(param SendSmsParam) (req *SendSmsRequest) {
req = &SendSmsRequest{
JsonRequest: &requests.JsonRequest{},
Mobile: param.Mobile,
Type: param.Type,
Expired: param.Expired,
Code: param.Code,
}
req.InitWithApiInfo(HOST, VERSION, "/sms/agg/send")
req.Method = requests.POST
return
}
func CreateSendSmsResponse() (resp *SendSmsResponse) {
resp = &SendSmsResponse{
BaseResponse: &responses.BaseResponse{},
}
return
}