Compare commits

...

7 Commits
v1.11.0 ... v1

12 changed files with 4654 additions and 68 deletions

View File

@ -52,6 +52,7 @@ type (
TaxAmount string `json:"taxAmount"` //税率 TaxAmount string `json:"taxAmount"` //税率
CallbackUrl string `json:"callbackUrl"` //回调地址 CallbackUrl string `json:"callbackUrl"` //回调地址
Remark string `json:"remark"` Remark string `json:"remark"`
Purpose string `json:"purpose"`
SystemName string `json:"systemName"` //业务系统名称 SystemName string `json:"systemName"` //业务系统名称
SubjectName string `json:"subjectName"` //户名 SubjectName string `json:"subjectName"` //户名
BankInfo BankInfo `json:"bankInfo"` BankInfo BankInfo `json:"bankInfo"`
@ -140,4 +141,39 @@ type (
FileName string `json:"fileName,optional"` //文件名称。 FileName string `json:"fileName,optional"` //文件名称。
FileType string `json:"fileType,optional"` //文件类型。 FileType string `json:"fileType,optional"` //文件类型。
} }
FinanceBank struct {
Keyword string `json:"keyword"`
BankName string `json:"bankName"` // 模糊查询 bankNamebranchName, branchCode, code
Province string `json:"province"`
City string `json:"city"`
Code string `json:"code"`
IsDesc bool `json:"isDesc"` // 是否倒序查询id
}
financeBankRequest struct {
Keyword string `json:"keyword"`
BankName string `json:"bankName"` // 模糊查询 bankNamebranchName, branchCode, code
Province string `json:"province"`
City string `json:"city"`
Code string `json:"code"`
Page uint32 `json:"page"`
PageSize uint32 `json:"pageSize"`
IsDesc bool `json:"isDesc"` // 是否倒序查询id
}
FinanceBankResp struct {
Banks []BankItem `json:"banks"`
Total uint32 `json:"total"` // 模糊查询 bankNamebranchName, branchCode, code
}
BankItem struct {
BranchCode string `json:"branchCode"`
Province string `json:"province"`
City string `json:"city"`
BranchName string `json:"branchName"`
Code string `json:"code"`
BankName string `json:"bankName"`
}
) )

View File

@ -1,5 +1,7 @@
package l_msg_api package l_msg_api
import "gitea.cdlsxd.cn/self-tools/l_msg_api/protoc/msg"
const ( const (
serverHost = "http://127.0.0.1:8001" serverHost = "http://127.0.0.1:8001"
timeOut = 60 timeOut = 60
@ -13,17 +15,26 @@ const (
DDDateField = "DDDateField" DDDateField = "DDDateField"
) )
type RequestPath string type requestPathIndex int32
const ( const (
accessToken RequestPath = "/oauth/v1/accesstoken" accessToken requestPathIndex = iota + 1
oaCreat RequestPath = "/msg/v1/dingtalk/oa/create" oaCreat
oaGet RequestPath = "/msg/v1/dingtalk/oa/get" oaGet
oaComment RequestPath = "/msg/v1/dingtalk/oa/comment" oaComment
sendSms RequestPath = "/msg/v1/sms/send" sendSms
sendSmsHs RequestPath = "/msg/v1/sms/send/hs" sendSmsHs
) )
var requestPath = map[requestPathIndex]map[RequestWay]string{
accessToken: {Http: "/oauth/v1/accesstoken", Rpc: msg.Msg_Oauth_FullMethodName},
oaCreat: {Http: "/msg/v1/dingtalk/oa/create", Rpc: msg.Msg_DingOACreate_FullMethodName},
oaGet: {Http: "/msg/v1/dingtalk/oa/get", Rpc: msg.Msg_DingOAGet_FullMethodName},
oaComment: {Http: "/msg/v1/dingtalk/oa/comment", Rpc: msg.Msg_DingOAComment_FullMethodName},
sendSms: {Http: "/msg/v1/sms/send", Rpc: msg.Msg_SmsSend_FullMethodName},
sendSmsHs: {Http: "/msg/v1/sms/send/hs", Rpc: msg.Msg_HsSmsSend_FullMethodName},
}
type SmsBusiness string type SmsBusiness string
const ( const (
@ -31,21 +42,20 @@ const (
SmsBusinessDefault SmsBusiness = "aliyun" SmsBusinessDefault SmsBusiness = "aliyun"
) )
var smsBusinessWithRequestPath = map[SmsBusiness]RequestPath{ var smsBusinessWithRequestPath = map[SmsBusiness]requestPathIndex{
SmsBusinessHs: sendSmsHs, SmsBusinessHs: sendSms,
SmsBusinessDefault: sendSms, SmsBusinessDefault: sendSmsHs,
} }
type ( type RequestWay int8
SmsOption func(*SmsOptionData)
SmsOptionData struct { const (
Business SmsBusiness Http RequestWay = iota + 1
} Rpc
) )
func WithBusiness(business SmsBusiness) SmsOption { const financeUrl = "https://financeouter.22233.cn"
return func(OptionData *SmsOptionData) { const (
OptionData.Business = business financeBanks = "/outer/v1/dingtalk/payment/banks"
} )
}

18
go.mod
View File

@ -1,8 +1,22 @@
module gitea.cdlsxd.cn/self-tools/l_msg_api module gitea.cdlsxd.cn/self-tools/l_msg_api
go 1.22.2 go 1.22.10
require github.com/valyala/fasthttp v1.59.0 toolchain go1.23.6
require (
gitea.cdlsxd.cn/rzy_tools/request v1.0.0
github.com/valyala/fasthttp v1.59.0
google.golang.org/grpc v1.71.1
google.golang.org/protobuf v1.36.4
)
require (
golang.org/x/net v0.35.0 // indirect
golang.org/x/sys v0.30.0 // indirect
golang.org/x/text v0.22.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect
)
require ( require (
github.com/andybalholm/brotli v1.1.1 // indirect github.com/andybalholm/brotli v1.1.1 // indirect

View File

@ -7,6 +7,7 @@ import (
) )
func FastHttpPost(url string, header map[string]string, body []byte, timeout int) ([]byte, error) { func FastHttpPost(url string, header map[string]string, body []byte, timeout int) ([]byte, error) {
req := fasthttp.AcquireRequest() req := fasthttp.AcquireRequest()
defer fasthttp.ReleaseRequest(req) // 用完需要释放资源 defer fasthttp.ReleaseRequest(req) // 用完需要释放资源

64
msg.go
View File

@ -1,8 +1,11 @@
package l_msg_api package l_msg_api
import ( import (
"context"
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"gitea.cdlsxd.cn/rzy_tools/request"
) )
type MessageCenter struct { type MessageCenter struct {
@ -10,10 +13,11 @@ type MessageCenter struct {
ClientKey string // 客户端id,获取授权token需要 ClientKey string // 客户端id,获取授权token需要
ClientSecret string ClientSecret string
header map[string]string header map[string]string
option *mesOptionData
base base
} }
func NewMessageCenter(host, clientKey, clientSecret, serverIndex, tempIndex string) (*MessageCenter, error) { func NewMessageCenter(host, clientKey, clientSecret, serverIndex, tempIndex string, args ...MesOption) (*MessageCenter, error) {
msg := &MessageCenter{ msg := &MessageCenter{
Host: host, Host: host,
ClientKey: clientKey, ClientKey: clientKey,
@ -22,21 +26,25 @@ func NewMessageCenter(host, clientKey, clientSecret, serverIndex, tempIndex stri
ServerIndex: serverIndex, ServerIndex: serverIndex,
TempIndex: tempIndex, TempIndex: tempIndex,
}, },
option: new(mesOptionData),
}
err := msg.setHeader()
if err != nil {
return nil, err
}
for _, arg := range args {
arg(msg.option)
} }
msg.header = map[string]string{"content-type": "application/json; charset=utf-8"}
accessToken, err := msg.getAccessToken()
msg.header = map[string]string{"Authorization": accessToken, "content-type": "application/json; charset=utf-8"}
return msg, err return msg, err
} }
// OACreate 发起OA审批 // OACreate 发起OA审批
func (m *MessageCenter) OACreate(dTalkUserId, treadNo string, formModel *FormsData) (data OAResponse, err error) { func (m *MessageCenter) OACreate(ctx context.Context, dTalkUserId, treadNo string, formModel *FormsData) (data OAResponse, err error) {
formModel.formBase = formBase{ formModel.formBase = formBase{
OutTradeNo: treadNo, OutTradeNo: treadNo,
OriginatorUserId: dTalkUserId, OriginatorUserId: dTalkUserId,
} }
err = m.post(oaCreat, m.parseOACreateParam(formModel), &data) err = m.send(ctx, oaCreat, m.parseOACreateParam(formModel), &data)
if err != nil { if err != nil {
return return
} }
@ -44,12 +52,12 @@ func (m *MessageCenter) OACreate(dTalkUserId, treadNo string, formModel *FormsDa
} }
// OAGetDetail OA详情 // OAGetDetail OA详情
func (m *MessageCenter) OAGetDetail(outTradeNo string) (data OAGetDetailData, err error) { func (m *MessageCenter) OAGetDetail(ctx context.Context, outTradeNo string) (data OAGetDetailData, err error) {
param, _ := json.Marshal(oAGetDetailRequest{ param, _ := json.Marshal(oAGetDetailRequest{
Base: m.base, Base: m.base,
OutTradeNo: outTradeNo, OutTradeNo: outTradeNo,
}) })
err = m.post(oaGet, param, &data) err = m.send(ctx, oaGet, param, &data)
if err != nil { if err != nil {
return return
} }
@ -58,9 +66,9 @@ func (m *MessageCenter) OAGetDetail(outTradeNo string) (data OAGetDetailData, er
// SendSms 短信 // SendSms 短信
// business SmsBusiness // business SmsBusiness
func (m *MessageCenter) SendSms(tels []string, jsonParam string, args ...SmsOption) (data SmsSend, err error) { func (m *MessageCenter) SendSms(ctx context.Context, tels []string, jsonParam string, args ...SmsOption) (data SmsSend, err error) {
var ( var (
e = new(SmsOptionData) e = new(smsOptionData)
) )
if len(tels) == 0 { if len(tels) == 0 {
err = errors.New("手机号不能为空") err = errors.New("手机号不能为空")
@ -80,7 +88,7 @@ func (m *MessageCenter) SendSms(tels []string, jsonParam string, args ...SmsOpti
path := smsBusinessWithRequestPath[e.Business] path := smsBusinessWithRequestPath[e.Business]
param := m.parseSmsSendParam(tels, jsonParam) param := m.parseSmsSendParam(tels, jsonParam)
err = m.post(path, param, &data) err = m.send(ctx, path, param, &data)
if err != nil { if err != nil {
return return
} }
@ -90,11 +98,11 @@ func (m *MessageCenter) SendSms(tels []string, jsonParam string, args ...SmsOpti
// SendBlackBoard 钉钉公告 // SendBlackBoard 钉钉公告
// deptidList //接收部门ID列表最大的列表长度为20。 // deptidList //接收部门ID列表最大的列表长度为20。
// UseridList //接收部用户ID列表最大的列表长度为20。 // UseridList //接收部用户ID列表最大的列表长度为20。
func (m *MessageCenter) SendBlackBoard(title, content string, deptidList []int, useridList []string) (data Default, err error) { func (m *MessageCenter) SendBlackBoard(ctx context.Context, title, content string, deptidList []int, useridList []string) (data Default, err error) {
receiver := blackboardReceiverView{ receiver := blackboardReceiverView{
deptidList, useridList, deptidList, useridList,
} }
err = m.post(sendSms, m.parseSendBlackBoardParam(title, content, receiver), &data) err = m.send(ctx, sendSms, m.parseSendBlackBoardParam(title, content, receiver), &data)
if err != nil { if err != nil {
return return
} }
@ -102,7 +110,7 @@ func (m *MessageCenter) SendBlackBoard(title, content string, deptidList []int,
} }
// OAComment OA评论,CommentUserId为空则默认审核发起人评论 // OAComment OA评论,CommentUserId为空则默认审核发起人评论
func (m *MessageCenter) OAComment(outTradeNo, text, commentUserId string, file *DingOACommentReqFile) (data OAResponse, err error) { func (m *MessageCenter) OAComment(ctx context.Context, outTradeNo, text, commentUserId string, file *DingOACommentReqFile) (data OAResponse, err error) {
req := &oACommentRequest{ req := &oACommentRequest{
Base: m.base, Base: m.base,
OutTradeNo: outTradeNo, OutTradeNo: outTradeNo,
@ -114,9 +122,33 @@ func (m *MessageCenter) OAComment(outTradeNo, text, commentUserId string, file *
} }
param, _ := json.Marshal(req) param, _ := json.Marshal(req)
err = m.post(oaComment, param, &data) err = m.send(ctx, oaComment, param, &data)
if err != nil { if err != nil {
return return
} }
return return
} }
// OAComment OA评论,CommentUserId为空则默认审核发起人评论
func (m *MessageCenter) FinanceBankList(ctx context.Context, financeBank *FinanceBank, page uint32, pageSize uint32) (data FinanceBankResp, err error) {
res, err := m.OtherSend(ctx, &request.Request{
Method: "GET",
Url: fmt.Sprintf("%s%s", financeUrl, financeBanks),
Params: mapInterfaceToMapString(structToMap(financeBankRequest{
Keyword: financeBank.Keyword,
BankName: financeBank.BankName,
Province: financeBank.Province,
City: financeBank.City,
Code: financeBank.Code,
Page: page,
PageSize: pageSize,
IsDesc: financeBank.IsDesc,
})),
})
if err != nil {
return
}
err = json.Unmarshal(res.Content, &data)
return
}

28
option.go Normal file
View File

@ -0,0 +1,28 @@
package l_msg_api
type (
SmsOption func(*smsOptionData)
smsOptionData struct {
Business SmsBusiness
}
)
func WithBusiness(business SmsBusiness) SmsOption {
return func(OptionData *smsOptionData) {
OptionData.Business = business
}
}
type (
MesOption func(*mesOptionData)
mesOptionData struct {
RequestWay RequestWay
}
)
func WithRequestWay(RequestWay RequestWay) MesOption {
return func(OptionData *mesOptionData) {
OptionData.RequestWay = RequestWay
}
}

View File

@ -1,11 +1,15 @@
package l_msg_api package l_msg_api
import ( import (
"context"
"encoding/json" "encoding/json"
"fmt" "fmt"
"gitea.cdlsxd.cn/rzy_tools/request"
"gitea.cdlsxd.cn/self-tools/l_msg_api/cache" "gitea.cdlsxd.cn/self-tools/l_msg_api/cache"
"gitea.cdlsxd.cn/self-tools/l_msg_api/httpclient" "gitea.cdlsxd.cn/self-tools/l_msg_api/httpclient"
"reflect"
"strings" "strings"
"time"
) )
func (m *MessageCenter) parseOACreateParam(formModel *FormsData) (out []byte) { func (m *MessageCenter) parseOACreateParam(formModel *FormsData) (out []byte) {
@ -38,22 +42,41 @@ func (m *MessageCenter) parseSendBlackBoardParam(title, content string, receiver
} }
func (m *MessageCenter) getAccessToken() (string, error) { func (m *MessageCenter) getAccessToken() (string, error) {
if tokenInterface, exist := cache.InstanceCacheMap().Get(m.ClientKey); exist {
return tokenInterface.(string), nil
}
var data accessTokenResponse var data accessTokenResponse
if tokenInstance, exist := cache.InstanceCacheMap().Get(m.ClientKey); exist {
data = tokenInstance.(accessTokenResponse)
if int64(data.AccessExpire) >= time.Now().Unix() {
return data.AccessToken, nil
}
}
var authParam, _ = json.Marshal(map[string]string{"client_key": m.ClientKey, "client_secret": m.ClientSecret}) var authParam, _ = json.Marshal(map[string]string{"client_key": m.ClientKey, "client_secret": m.ClientSecret})
err := m.accessPost(accessToken, authParam, &data) err := m.accessPost(accessToken, authParam, &data)
if err != nil { if err != nil {
return "", err return "", err
} }
cache.InstanceCacheMap().Put(m.ClientKey, data.AccessToken) cache.InstanceCacheMap().Put(m.ClientKey, data)
return data.AccessToken, err return data.AccessToken, err
} }
func (m *MessageCenter) post(path RequestPath, data []byte, resReflect interface{}) (err error) { func (m *MessageCenter) send(ctx context.Context, path requestPathIndex, data []byte, resReflect interface{}) (err error) {
switch m.option.RequestWay {
case Rpc:
//return m.rpc(ctx, requestAddr, data, resReflect)
default:
requestAddr := requestPath[path][Http]
return m.post(ctx, requestAddr, data, resReflect)
}
return
}
//func (m *MessageCenter) rpc(ctx context.Context, path string, data []byte, resReflect interface{}) (err error) {
//
// client := protoc.InstanceMsgClient(m.Host)
// client.FinanceNotify(ctx, a)
// return
//}
func (m *MessageCenter) post(ctx context.Context, path string, data []byte, resReflect interface{}) (err error) {
var body responseBody var body responseBody
res, err := httpclient.FastHttpPost(fmt.Sprintf("%s%s", m.Host, path), m.header, data, timeOut) res, err := httpclient.FastHttpPost(fmt.Sprintf("%s%s", m.Host, path), m.header, data, timeOut)
if err != nil { if err != nil {
@ -66,6 +89,36 @@ func (m *MessageCenter) post(path RequestPath, data []byte, resReflect interface
return fmt.Errorf("请求失败:%s", body.Msg) return fmt.Errorf("请求失败:%s", body.Msg)
} }
dataByte, err := json.Marshal(body.Data)
if err != nil {
return fmt.Errorf("未知的返回格式:%s", string(dataByte))
}
if err = json.Unmarshal(dataByte, resReflect); err != nil {
return fmt.Errorf("未知的返回格式:%s", string(dataByte))
}
return
}
func (m *MessageCenter) OtherSend(ctx context.Context, request *request.Request) (res request.Response, err error) {
res, err = request.Send()
return
}
func (m *MessageCenter) accessPost(path requestPathIndex, data []byte, resReflect interface{}) (err error) {
pathStr := requestPath[path][Http]
var body responseBody
res, err := httpclient.FastHttpPost(fmt.Sprintf("%s%s", m.Host, pathStr), m.header, data, timeOut)
if err != nil {
return
}
if err = json.Unmarshal(res, &body); err != nil {
return fmt.Errorf("请求失败:%s", string(res))
}
if body.Code != 0 {
return fmt.Errorf("请求失败:%s", body.Msg)
}
dataByte, err := json.Marshal(body.Data) dataByte, err := json.Marshal(body.Data)
if err != nil { if err != nil {
return fmt.Errorf("未知的返回格式:%s", string(dataByte)) return fmt.Errorf("未知的返回格式:%s", string(dataByte))
@ -77,26 +130,75 @@ func (m *MessageCenter) post(path RequestPath, data []byte, resReflect interface
return return
} }
func (m *MessageCenter) accessPost(path RequestPath, data []byte, resReflect interface{}) (err error) { func (m *MessageCenter) setHeader() (err error) {
var body responseBody m.header = map[string]string{"content-type": "application/json; charset=utf-8"}
res, err := httpclient.FastHttpPost(fmt.Sprintf("%s%s", m.Host, path), m.header, data, timeOut) token, err := m.getAccessToken()
if err != nil { if err != nil {
return return
} }
if err = json.Unmarshal(res, &body); err != nil { m.header = map[string]string{"Authorization": token, "content-type": "application/json; charset=utf-8"}
return fmt.Errorf("请求失败:%s", string(res))
}
if body.Code != 0 {
return fmt.Errorf("请求失败:%s", body.Msg)
}
dataByte, err := json.Marshal(body.Data)
if err != nil {
return fmt.Errorf("未知的返回格式:%s", string(dataByte))
}
if err = json.Unmarshal(dataByte, &resReflect); err != nil {
return fmt.Errorf("未知的返回格式:%s", string(dataByte))
}
return return
} }
// StructToMap 将一个struct转换为map[string]interface{}
func structToMap(obj interface{}) map[string]interface{} {
// 获取obj的类型
val := reflect.ValueOf(obj)
if val.Kind() == reflect.Ptr {
val = val.Elem()
}
// 确保obj是一个struct
if val.Kind() != reflect.Struct {
return nil
}
// 创建一个map来保存结果
data := make(map[string]interface{})
// 遍历struct的字段
for i := 0; i < val.NumField(); i++ {
// 获取字段的类型和值
valueField := val.Field(i)
typeField := val.Type().Field(i)
jsonTag := typeField.Tag.Get("json")
if idx := strings.Index(jsonTag, ","); idx != -1 {
// 如果有逗号,则取逗号之前的部分
jsonTag = jsonTag[:idx]
}
// 忽略未导出的字段(字段名首字母小写)
if !typeField.IsExported() {
continue
}
// 将字段名和值添加到map中
data[jsonTag] = valueField.Interface()
}
return data
}
// MapInterfaceToMapString map[string]interface{} to map[string]string
func mapInterfaceToMapString(inputMap map[string]interface{}) map[string]string {
var mapString = make(map[string]string)
for key, value := range inputMap {
mapString[key] = fmt.Sprintf("%v", value)
}
return mapString
}
// ChunkSlice 将一个切片分割成多个子切片,每个子切片最多包含 maxSize 个元素
func ChunkSlice[T any](slice []T, maxSize int) [][]T {
var chunks [][]T
length := len(slice)
for i := 0; i < length; i += maxSize {
end := i + maxSize
if end > length {
end = length
}
chunks = append(chunks, slice[i:end])
}
return chunks
}

3473
protoc/msg/msg.pb.go Normal file

File diff suppressed because it is too large Load Diff

274
protoc/msg/msg.proto Normal file
View File

@ -0,0 +1,274 @@
syntax = "proto3";
package msg;
option go_package = "/msg;msg";
message Empty{}
message BaseRes{
bool isSuccess = 1;
string Msg = 2;
}
message MsgCenterResp{
oneof Resp{
SmsSendRes smsSendRes = 1;
HsSmsSendRes HsSmsSendRes = 2;
BaseRes baseRes = 3;
}
}
message OauthReq {
string clientKey = 1;
string clientSecret = 2;
}
message OauthResp {
string accessToken = 2;
int64 AccessExpire = 3;
}
message CenterSendReq{
string severType = 1;
string msgType = 2;
BaseReq base = 3;
string config = 4;
}
message BaseReq{
string serverIndex = 1;
string tempIndex = 2;
}
message SmsSendReq{
BaseReq base = 1;
string param = 2;
string tels = 3;
}
message SmsSendRes{
repeated SmsSendResItem sendList = 1;
message SmsSendResItem{
string tel = 1;
uint32 isSuccess = 2;
}
}
message DingdingOASendReq {
BaseReq base = 1;
string originatorUserId = 2; //userId
FormComponentValuesView formComponentValues = 3;
message FormComponentValuesView {
string id = 1;
string bizAlias = 2;
string name = 3;
string value = 4;
}
}
message DingTalkBlackBoardSendReq {
BaseReq base = 1;
BlackboardReceiverView blackboardReceiver = 3;
message BlackboardReceiverView {
repeated int32 deptidList = 1;
repeated string useridList = 2;
}
string title = 4;
string content = 5;
}
message wxBizSendReq {
BaseReq base = 1;
string page = 2;//
string touser = 3; //open_id
string data = 4; // { "key1": { "value": any }, "key2": { "value": any } }object
string miniprogram = 5; //{ "appid": ,"pagepath": { "value": any } }
}
message callInfoReq {
BaseReq base = 1;
string calledNumber = 3; //
int32 playTimes = 4; //1->3
int32 volume = 5; //1->100
int32 speed = 6; //,-500->500
string outId = 8; // ID ID
}
message callCaptchaReq {
BaseReq base = 1;
string calledNumber = 3; //
string ttsParam = 4; //{"AckNum":"123456"}
int32 playTimes = 5; //1->3
int32 volume = 6; //1->100
int32 speed = 7; //,-500->500
string outId = 8; // ID ID
}
// DingTalk OA
message DingOACreateReq {
BaseReq base = 1;
string outTradeNo = 2; //
string originatorUserId = 3; //userId
repeated FormComponentValuesView formComponentValues = 5; //
message FormComponentValuesView {
string name = 1; //
string value = 2; //
string ComponentType = 3; //
string extValue = 5; //
string Id = 4; //id
}
Finance finance = 6; //
message Finance {
string checkUserId = 1; //
int64 sync =2;//
string amount = 3; //
string systemName = 13; //
string goodsInfo = 4; //
string paymentAccount=5; //
string taxAmount=6 ;//
string callbackUrl=7; //
string orderNo=8; //
string remark=9; //
string purpose=12;//
string subjectName=11; //
BankInfo bankInfo=10;
message BankInfo {
string resellerName = 1; //
string bankName = 2; //
string accountBankName = 3; //
string subjectName = 4; //
string bankAccount = 5; //
}
}
}
message DingOACreateResp {
bool isSuccess = 1;
string Msg = 2;
string instanceId = 3; // id
}
// DingTalk OA
message DingOAUpdateReq {
BaseReq base = 1;
string outTradeNo = 2; //
repeated FormComponentValuesView formComponentValues = 5; //
message FormComponentValuesView {
string name = 1; //
string value = 2; //
string ComponentType = 3; //
string extValue = 5; //
string Id = 4; //id
}
}
message DingOAUpdateResp {
bool isSuccess = 1;
string Msg = 2;
string instanceId = 3; // id
}
// DingTalk OA
message DingOACommentReq {
BaseReq base = 1;
string outTradeNo = 2; //
string text = 3; //
string commentUserId = 4; //
File file = 5; //
message File{ //
repeated string photos = 1; //URL地址
repeated Attachments attachments = 2; //URL地址
message Attachments{ //
string spaceId =1; //ID
string fileSize =2; //
string fileId =3; //ID
string fileName =4; //
string fileType =5; //
}
}
}
message DingOACommentResp {
bool isSuccess = 1;
string Msg = 2;
string instanceId = 3; // id
}
message DingOAGetReq {
BaseReq base = 1;
string processInstanceId = 2; //id
string outTradeNo = 3; //
}
message DingOAGetResp {
string OutTradeNo = 1; //
string processInstanceId = 2; //id
string Title = 3; //
int64 Result = 4; // 0 1: 2:
string Type = 5; //
string Remarks = 6; //
string CreateTime = 7; //
string UpdateTime = 8; //
}
message PaymentCallbackData {
string sign=1;
string instanceId=2;
string corpId=3;
string failReason =4;
string paymentTime=5; //
string userId=6;
string paymentStatus=7;
}
message PaymentCallbackRes {
bool isSuccess=1;
}
message HsSmsSendReq{
BaseReq base = 1;
string param = 2;
string tels = 3;
}
message HsSmsSendRes{
repeated SmsSendResItem sendList = 1;
message SmsSendResItem{
string tel = 1;
uint32 isSuccess = 2;
}
}
service Msg {
rpc oauth(OauthReq) returns(OauthResp);
rpc centerSend(CenterSendReq) returns(MsgCenterResp);
rpc smsSend(SmsSendReq) returns(SmsSendRes);
rpc dingTalkBlackBoardSend(DingTalkBlackBoardSendReq) returns(BaseRes);
rpc wxBizSend(wxBizSendReq) returns(BaseRes);
rpc callInfo(callInfoReq) returns(BaseRes);
rpc callCaptcha(callCaptchaReq) returns(BaseRes);
rpc dingOACreate(DingOACreateReq) returns(DingOACreateResp);
rpc dingOAUpdate(DingOAUpdateReq) returns(DingOAUpdateResp);
rpc dingOAComment(DingOACommentReq) returns(DingOACommentResp);
rpc dingOAGet(DingOAGetReq) returns(DingOAGetResp);
rpc FinanceNotify(PaymentCallbackData) returns(PaymentCallbackRes);
rpc hsSmsSend(HsSmsSendReq) returns(HsSmsSendRes);
}

577
protoc/msg/msg_grpc.pb.go Normal file
View File

@ -0,0 +1,577 @@
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
// versions:
// - protoc-gen-go-grpc v1.5.1
// - protoc v3.6.1
// source: msg/msg.proto
package msg
import (
context "context"
grpc "google.golang.org/grpc"
codes "google.golang.org/grpc/codes"
status "google.golang.org/grpc/status"
)
// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
// Requires gRPC-Go v1.64.0 or later.
const _ = grpc.SupportPackageIsVersion9
const (
Msg_Oauth_FullMethodName = "/msg.Msg/oauth"
Msg_CenterSend_FullMethodName = "/msg.Msg/centerSend"
Msg_SmsSend_FullMethodName = "/msg.Msg/smsSend"
Msg_DingTalkBlackBoardSend_FullMethodName = "/msg.Msg/dingTalkBlackBoardSend"
Msg_WxBizSend_FullMethodName = "/msg.Msg/wxBizSend"
Msg_CallInfo_FullMethodName = "/msg.Msg/callInfo"
Msg_CallCaptcha_FullMethodName = "/msg.Msg/callCaptcha"
Msg_DingOACreate_FullMethodName = "/msg.Msg/dingOACreate"
Msg_DingOAUpdate_FullMethodName = "/msg.Msg/dingOAUpdate"
Msg_DingOAComment_FullMethodName = "/msg.Msg/dingOAComment"
Msg_DingOAGet_FullMethodName = "/msg.Msg/dingOAGet"
Msg_FinanceNotify_FullMethodName = "/msg.Msg/FinanceNotify"
Msg_HsSmsSend_FullMethodName = "/msg.Msg/hsSmsSend"
)
// MsgClient is the client API for Msg service.
//
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
type MsgClient interface {
Oauth(ctx context.Context, in *OauthReq, opts ...grpc.CallOption) (*OauthResp, error)
CenterSend(ctx context.Context, in *CenterSendReq, opts ...grpc.CallOption) (*MsgCenterResp, error)
SmsSend(ctx context.Context, in *SmsSendReq, opts ...grpc.CallOption) (*SmsSendRes, error)
DingTalkBlackBoardSend(ctx context.Context, in *DingTalkBlackBoardSendReq, opts ...grpc.CallOption) (*BaseRes, error)
WxBizSend(ctx context.Context, in *WxBizSendReq, opts ...grpc.CallOption) (*BaseRes, error)
CallInfo(ctx context.Context, in *CallInfoReq, opts ...grpc.CallOption) (*BaseRes, error)
CallCaptcha(ctx context.Context, in *CallCaptchaReq, opts ...grpc.CallOption) (*BaseRes, error)
DingOACreate(ctx context.Context, in *DingOACreateReq, opts ...grpc.CallOption) (*DingOACreateResp, error)
DingOAUpdate(ctx context.Context, in *DingOAUpdateReq, opts ...grpc.CallOption) (*DingOAUpdateResp, error)
DingOAComment(ctx context.Context, in *DingOACommentReq, opts ...grpc.CallOption) (*DingOACommentResp, error)
DingOAGet(ctx context.Context, in *DingOAGetReq, opts ...grpc.CallOption) (*DingOAGetResp, error)
FinanceNotify(ctx context.Context, in *PaymentCallbackData, opts ...grpc.CallOption) (*PaymentCallbackRes, error)
HsSmsSend(ctx context.Context, in *HsSmsSendReq, opts ...grpc.CallOption) (*HsSmsSendRes, error)
}
type msgClient struct {
cc grpc.ClientConnInterface
}
func NewMsgClient(cc grpc.ClientConnInterface) MsgClient {
return &msgClient{cc}
}
func (c *msgClient) Oauth(ctx context.Context, in *OauthReq, opts ...grpc.CallOption) (*OauthResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(OauthResp)
err := c.cc.Invoke(ctx, Msg_Oauth_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) CenterSend(ctx context.Context, in *CenterSendReq, opts ...grpc.CallOption) (*MsgCenterResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(MsgCenterResp)
err := c.cc.Invoke(ctx, Msg_CenterSend_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) SmsSend(ctx context.Context, in *SmsSendReq, opts ...grpc.CallOption) (*SmsSendRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(SmsSendRes)
err := c.cc.Invoke(ctx, Msg_SmsSend_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) DingTalkBlackBoardSend(ctx context.Context, in *DingTalkBlackBoardSendReq, opts ...grpc.CallOption) (*BaseRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(BaseRes)
err := c.cc.Invoke(ctx, Msg_DingTalkBlackBoardSend_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) WxBizSend(ctx context.Context, in *WxBizSendReq, opts ...grpc.CallOption) (*BaseRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(BaseRes)
err := c.cc.Invoke(ctx, Msg_WxBizSend_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) CallInfo(ctx context.Context, in *CallInfoReq, opts ...grpc.CallOption) (*BaseRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(BaseRes)
err := c.cc.Invoke(ctx, Msg_CallInfo_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) CallCaptcha(ctx context.Context, in *CallCaptchaReq, opts ...grpc.CallOption) (*BaseRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(BaseRes)
err := c.cc.Invoke(ctx, Msg_CallCaptcha_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) DingOACreate(ctx context.Context, in *DingOACreateReq, opts ...grpc.CallOption) (*DingOACreateResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DingOACreateResp)
err := c.cc.Invoke(ctx, Msg_DingOACreate_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) DingOAUpdate(ctx context.Context, in *DingOAUpdateReq, opts ...grpc.CallOption) (*DingOAUpdateResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DingOAUpdateResp)
err := c.cc.Invoke(ctx, Msg_DingOAUpdate_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) DingOAComment(ctx context.Context, in *DingOACommentReq, opts ...grpc.CallOption) (*DingOACommentResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DingOACommentResp)
err := c.cc.Invoke(ctx, Msg_DingOAComment_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) DingOAGet(ctx context.Context, in *DingOAGetReq, opts ...grpc.CallOption) (*DingOAGetResp, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(DingOAGetResp)
err := c.cc.Invoke(ctx, Msg_DingOAGet_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) FinanceNotify(ctx context.Context, in *PaymentCallbackData, opts ...grpc.CallOption) (*PaymentCallbackRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(PaymentCallbackRes)
err := c.cc.Invoke(ctx, Msg_FinanceNotify_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *msgClient) HsSmsSend(ctx context.Context, in *HsSmsSendReq, opts ...grpc.CallOption) (*HsSmsSendRes, error) {
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
out := new(HsSmsSendRes)
err := c.cc.Invoke(ctx, Msg_HsSmsSend_FullMethodName, in, out, cOpts...)
if err != nil {
return nil, err
}
return out, nil
}
// MsgServer is the server API for Msg service.
// All implementations must embed UnimplementedMsgServer
// for forward compatibility.
type MsgServer interface {
Oauth(context.Context, *OauthReq) (*OauthResp, error)
CenterSend(context.Context, *CenterSendReq) (*MsgCenterResp, error)
SmsSend(context.Context, *SmsSendReq) (*SmsSendRes, error)
DingTalkBlackBoardSend(context.Context, *DingTalkBlackBoardSendReq) (*BaseRes, error)
WxBizSend(context.Context, *WxBizSendReq) (*BaseRes, error)
CallInfo(context.Context, *CallInfoReq) (*BaseRes, error)
CallCaptcha(context.Context, *CallCaptchaReq) (*BaseRes, error)
DingOACreate(context.Context, *DingOACreateReq) (*DingOACreateResp, error)
DingOAUpdate(context.Context, *DingOAUpdateReq) (*DingOAUpdateResp, error)
DingOAComment(context.Context, *DingOACommentReq) (*DingOACommentResp, error)
DingOAGet(context.Context, *DingOAGetReq) (*DingOAGetResp, error)
FinanceNotify(context.Context, *PaymentCallbackData) (*PaymentCallbackRes, error)
HsSmsSend(context.Context, *HsSmsSendReq) (*HsSmsSendRes, error)
mustEmbedUnimplementedMsgServer()
}
// UnimplementedMsgServer must be embedded to have
// forward compatible implementations.
//
// NOTE: this should be embedded by value instead of pointer to avoid a nil
// pointer dereference when methods are called.
type UnimplementedMsgServer struct{}
func (UnimplementedMsgServer) Oauth(context.Context, *OauthReq) (*OauthResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method Oauth not implemented")
}
func (UnimplementedMsgServer) CenterSend(context.Context, *CenterSendReq) (*MsgCenterResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method CenterSend not implemented")
}
func (UnimplementedMsgServer) SmsSend(context.Context, *SmsSendReq) (*SmsSendRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method SmsSend not implemented")
}
func (UnimplementedMsgServer) DingTalkBlackBoardSend(context.Context, *DingTalkBlackBoardSendReq) (*BaseRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method DingTalkBlackBoardSend not implemented")
}
func (UnimplementedMsgServer) WxBizSend(context.Context, *WxBizSendReq) (*BaseRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method WxBizSend not implemented")
}
func (UnimplementedMsgServer) CallInfo(context.Context, *CallInfoReq) (*BaseRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method CallInfo not implemented")
}
func (UnimplementedMsgServer) CallCaptcha(context.Context, *CallCaptchaReq) (*BaseRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method CallCaptcha not implemented")
}
func (UnimplementedMsgServer) DingOACreate(context.Context, *DingOACreateReq) (*DingOACreateResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method DingOACreate not implemented")
}
func (UnimplementedMsgServer) DingOAUpdate(context.Context, *DingOAUpdateReq) (*DingOAUpdateResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method DingOAUpdate not implemented")
}
func (UnimplementedMsgServer) DingOAComment(context.Context, *DingOACommentReq) (*DingOACommentResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method DingOAComment not implemented")
}
func (UnimplementedMsgServer) DingOAGet(context.Context, *DingOAGetReq) (*DingOAGetResp, error) {
return nil, status.Errorf(codes.Unimplemented, "method DingOAGet not implemented")
}
func (UnimplementedMsgServer) FinanceNotify(context.Context, *PaymentCallbackData) (*PaymentCallbackRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method FinanceNotify not implemented")
}
func (UnimplementedMsgServer) HsSmsSend(context.Context, *HsSmsSendReq) (*HsSmsSendRes, error) {
return nil, status.Errorf(codes.Unimplemented, "method HsSmsSend not implemented")
}
func (UnimplementedMsgServer) mustEmbedUnimplementedMsgServer() {}
func (UnimplementedMsgServer) testEmbeddedByValue() {}
// UnsafeMsgServer may be embedded to opt out of forward compatibility for this service.
// Use of this interface is not recommended, as added methods to MsgServer will
// result in compilation errors.
type UnsafeMsgServer interface {
mustEmbedUnimplementedMsgServer()
}
func RegisterMsgServer(s grpc.ServiceRegistrar, srv MsgServer) {
// If the following call pancis, it indicates UnimplementedMsgServer was
// embedded by pointer and is nil. This will cause panics if an
// unimplemented method is ever invoked, so we test this at initialization
// time to prevent it from happening at runtime later due to I/O.
if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
t.testEmbeddedByValue()
}
s.RegisterService(&Msg_ServiceDesc, srv)
}
func _Msg_Oauth_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(OauthReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).Oauth(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_Oauth_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).Oauth(ctx, req.(*OauthReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_CenterSend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CenterSendReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).CenterSend(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_CenterSend_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).CenterSend(ctx, req.(*CenterSendReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_SmsSend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(SmsSendReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).SmsSend(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_SmsSend_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).SmsSend(ctx, req.(*SmsSendReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_DingTalkBlackBoardSend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DingTalkBlackBoardSendReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).DingTalkBlackBoardSend(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_DingTalkBlackBoardSend_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).DingTalkBlackBoardSend(ctx, req.(*DingTalkBlackBoardSendReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_WxBizSend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(WxBizSendReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).WxBizSend(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_WxBizSend_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).WxBizSend(ctx, req.(*WxBizSendReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_CallInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CallInfoReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).CallInfo(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_CallInfo_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).CallInfo(ctx, req.(*CallInfoReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_CallCaptcha_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(CallCaptchaReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).CallCaptcha(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_CallCaptcha_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).CallCaptcha(ctx, req.(*CallCaptchaReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_DingOACreate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DingOACreateReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).DingOACreate(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_DingOACreate_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).DingOACreate(ctx, req.(*DingOACreateReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_DingOAUpdate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DingOAUpdateReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).DingOAUpdate(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_DingOAUpdate_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).DingOAUpdate(ctx, req.(*DingOAUpdateReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_DingOAComment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DingOACommentReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).DingOAComment(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_DingOAComment_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).DingOAComment(ctx, req.(*DingOACommentReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_DingOAGet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(DingOAGetReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).DingOAGet(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_DingOAGet_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).DingOAGet(ctx, req.(*DingOAGetReq))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_FinanceNotify_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(PaymentCallbackData)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).FinanceNotify(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_FinanceNotify_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).FinanceNotify(ctx, req.(*PaymentCallbackData))
}
return interceptor(ctx, in, info, handler)
}
func _Msg_HsSmsSend_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(HsSmsSendReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(MsgServer).HsSmsSend(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: Msg_HsSmsSend_FullMethodName,
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(MsgServer).HsSmsSend(ctx, req.(*HsSmsSendReq))
}
return interceptor(ctx, in, info, handler)
}
// Msg_ServiceDesc is the grpc.ServiceDesc for Msg service.
// It's only intended for direct use with grpc.RegisterService,
// and not to be introspected or modified (even as a copy)
var Msg_ServiceDesc = grpc.ServiceDesc{
ServiceName: "msg.Msg",
HandlerType: (*MsgServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "oauth",
Handler: _Msg_Oauth_Handler,
},
{
MethodName: "centerSend",
Handler: _Msg_CenterSend_Handler,
},
{
MethodName: "smsSend",
Handler: _Msg_SmsSend_Handler,
},
{
MethodName: "dingTalkBlackBoardSend",
Handler: _Msg_DingTalkBlackBoardSend_Handler,
},
{
MethodName: "wxBizSend",
Handler: _Msg_WxBizSend_Handler,
},
{
MethodName: "callInfo",
Handler: _Msg_CallInfo_Handler,
},
{
MethodName: "callCaptcha",
Handler: _Msg_CallCaptcha_Handler,
},
{
MethodName: "dingOACreate",
Handler: _Msg_DingOACreate_Handler,
},
{
MethodName: "dingOAUpdate",
Handler: _Msg_DingOAUpdate_Handler,
},
{
MethodName: "dingOAComment",
Handler: _Msg_DingOAComment_Handler,
},
{
MethodName: "dingOAGet",
Handler: _Msg_DingOAGet_Handler,
},
{
MethodName: "FinanceNotify",
Handler: _Msg_FinanceNotify_Handler,
},
{
MethodName: "hsSmsSend",
Handler: _Msg_HsSmsSend_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "msg/msg.proto",
}

21
protoc/rpc.go Normal file
View File

@ -0,0 +1,21 @@
package protoc
import (
"gitea.cdlsxd.cn/self-tools/l_msg_api/protoc/msg"
"google.golang.org/grpc"
"log"
)
var rpcMsgClient msg.MsgClient
func InstanceMsgClient(host string) msg.MsgClient {
if rpcMsgClient != nil {
return rpcMsgClient
}
conn, err := grpc.NewClient(host)
if err != nil {
log.Fatalf("did not connect: %v", err)
}
rpcMsgClient = msg.NewMsgClient(conn)
return rpcMsgClient
}

View File

@ -10,21 +10,27 @@ import (
const ( const (
ClientKey = "ymt" ClientKey = "ymt"
ClientSecret = "ymt" ClientSecret = "ymt"
serverHost = "http://120.55.12.245:8200" serverHost = "http://121.199.38.107:8000"
local = "http://127.0.0.1:8001" local = "http://127.0.0.1:8001"
) )
func TestSms(t *testing.T) { func TestSms(t *testing.T) {
msg, err := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "smssass", "sasssms") msg, err := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "sms", "sms")
if err != nil { if err != nil {
panic(err) panic(err)
} }
res, err := msg.SendSms([]string{"15082245107"}, `{"content": "测试"}`) res, err := msg.SendSms(context.TODO(), []string{"15082245107"}, `{"content": "测试"}`)
fmt.Println(res, err) fmt.Println(res, err)
} }
func TestAccess(t *testing.T) {
msg, _ := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "sms", "sms")
msg2, _ := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "sms", "sms")
fmt.Println(msg, msg2)
}
func TestOaCreate(t *testing.T) { func TestOaCreate(t *testing.T) {
msg, err := l_msg_api.NewMessageCenter(local, ClientKey, ClientSecret, "sw_oa", "sw_oa_purchase") msg, err := l_msg_api.NewMessageCenter(local, ClientKey, ClientSecret, "sw_oa", "sw_oa_purchase")
if err != nil { if err != nil {
@ -38,7 +44,7 @@ func TestOaCreate(t *testing.T) {
{Name: "采购总金额", Value: "11.22"}, {Name: "采购总金额", Value: "11.22"},
{Name: "预计到货时间", Value: "2025-03-21"}, {Name: "预计到货时间", Value: "2025-03-21"},
} }
res, err := msg.OACreate("17101201090101570", "cxvxvxcgfgfvxvxv", &l_msg_api.FormsData{ res, err := msg.OACreate(context.TODO(), "17101201090101570", "cxvxvxcgfgfvxvxv", &l_msg_api.FormsData{
FormComponentValues: form, FormComponentValues: form,
Finance: &l_msg_api.Finance{ Finance: &l_msg_api.Finance{
Amount: "11.22", Amount: "11.22",
@ -68,7 +74,7 @@ func TestOaComment(t *testing.T) {
if err != nil { if err != nil {
panic(err) panic(err)
} }
res, err := msg.OAComment("P24110515152043136-20250318181554", "sdk测试", "", nil) res, err := msg.OAComment(context.TODO(), "P24110515152043136-20250318181554", "sdk测试", "", nil)
fmt.Println(res, err) fmt.Println(res, err)
} }
@ -76,3 +82,15 @@ func TestContext(*testing.T) {
c := context.Background() c := context.Background()
c.Done() c.Done()
} }
func TestFinanceBankList(t *testing.T) {
c := context.Background()
msg, err := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "sw_oa", "sw_oa_purchase")
if err != nil {
panic(err)
}
res, err := msg.FinanceBankList(c, &l_msg_api.FinanceBank{
Keyword: "招商",
}, 1, 50)
t.Log(res, err)
}