新增sms相关接口
This commit is contained in:
parent
78d60083f7
commit
ce30ff4ef9
110
services/sms/client.go
Normal file
110
services/sms/client.go
Normal 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
110
services/sms/client_test.go
Normal 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: " - 苹果ID:XXXX\n - 游戏ID:XXXX\n - bundleID:XXXX\n - 应用名:XXX\n - 下架时间:2025-04-18 12:36:52\n - IP:XX(城市A省份)、XX(城市B省份);说明:XX为具体的IP,括号内为IP对应的城市;",
|
||||||
|
//})
|
||||||
|
//
|
||||||
|
//resp2, err := client.SendFeiShuWebHook(req2)
|
||||||
|
//if err != nil {
|
||||||
|
// panic(err)
|
||||||
|
//}
|
||||||
|
//fmt.Println(resp2)
|
||||||
|
|
||||||
|
//[
|
||||||
|
// [
|
||||||
|
// {
|
||||||
|
// "tag": "text",
|
||||||
|
// "text": "苹果ID:XXXX"
|
||||||
|
// }
|
||||||
|
// ],
|
||||||
|
// [
|
||||||
|
// {
|
||||||
|
// "tag": "text",
|
||||||
|
// "text": "游戏ID:XXXX"
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
//]
|
||||||
|
|
||||||
|
req3 := CreateSendFeiShuWebHookRequest(SendFeiShuWebHookParam{
|
||||||
|
TitleColor: "purple",
|
||||||
|
Title: "监控报警",
|
||||||
|
Do: "sendCardText",
|
||||||
|
Token: "b762f80c-fe4f-4182-b48e-5c78041592bc",
|
||||||
|
Content: "[{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"苹果ID:XXXX\"}},{\"tag\":\"div\",\"text\":{\"tag\":\"plain_text\",\"content\":\"游戏ID:XXXX\"}}]",
|
||||||
|
})
|
||||||
|
|
||||||
|
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
45
services/sms/email.go
Normal 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
49
services/sms/feishu.go
Normal 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
51
services/sms/sms.go
Normal 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
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user