Compare commits

..

8 Commits
v1.2.0 ... v1

6 changed files with 100 additions and 39 deletions

View File

@ -44,17 +44,18 @@ type (
} }
Finance struct { Finance struct {
CheckUserId string `json:"checkUserId"` //审核人 CheckUserId string `json:"checkUserId"` //审核人
Sync int64 `json:"sync"` //是否是异步,如果为异步,付款申请和业务申请是同时进行 Sync int64 `json:"sync"` //是否是异步,如果为异步,付款申请和业务申请是同时进行
Amount string `json:"amount"` //金额 Amount string `json:"amount"` //金额
GoodsInfo string `json:"goodsInfo"` //商品信息 GoodsInfo string `json:"goodsInfo"` //商品信息
PaymentAccount string `json:"payment_account"` //付款方账户 PaymentAccount string `json:"paymentAccount"` //付款方账户
TaxAmount string `json:"tax_amount"` //税率 TaxAmount string `json:"taxAmount"` //税率
CallbackUrl string `json:"callback_url"` //回调地址 CallbackUrl string `json:"callbackUrl"` //回调地址
Remark string `json:"remark"` //备注 Remark string `json:"remark"`
SystemName string `json:"systemName"` //业务系统名称
SubjectName string `json:"subjectName"` //户名
BankInfo BankInfo `json:"bankInfo"` BankInfo BankInfo `json:"bankInfo"`
} }
BankInfo struct { BankInfo struct {
ResellerName string `json:"resellerName"` //供应商名称 ResellerName string `json:"resellerName"` //供应商名称
BankName string `json:"bankName"` //银行名称 BankName string `json:"bankName"` //银行名称

View File

@ -1,8 +1,8 @@
package l_msg_api package l_msg_api
const ( const (
ServerHost = "http://127.0.0.1:8001" serverHost = "http://127.0.0.1:8001"
TimeOut = 80000000 timeOut = 60
) )
const ( const (
@ -13,10 +13,39 @@ const (
DDDateField = "DDDateField" DDDateField = "DDDateField"
) )
type RequestPath string
const ( const (
AccessToken = "/oauth/v1/accesstoken" accessToken RequestPath = "/oauth/v1/accesstoken"
OaCreat = "/msg/v1/dingtalk/oa/create" oaCreat RequestPath = "/msg/v1/dingtalk/oa/create"
OaGet = "/msg/v1/dingtalk/oa/get" oaGet RequestPath = "/msg/v1/dingtalk/oa/get"
OaComment = "/msg/v1/dingtalk/oa/comment" oaComment RequestPath = "/msg/v1/dingtalk/oa/comment"
SendSms = "/msg/v1/sms/send" sendSms RequestPath = "/msg/v1/sms/send"
sendSmsHs RequestPath = "/msg/v1/sms/send/hs"
) )
type SmsBusiness string
const (
SmsBusinessHs SmsBusiness = "hs"
SmsBusinessDefault SmsBusiness = "aliyun"
)
var smsBusinessWithRequestPath = map[SmsBusiness]RequestPath{
SmsBusinessHs: sendSmsHs,
SmsBusinessDefault: sendSms,
}
type (
SmsOption func(*SmsOptionData)
SmsOptionData struct {
Business SmsBusiness
}
)
func WithBusiness(business SmsBusiness) SmsOption {
return func(OptionData *SmsOptionData) {
OptionData.Business = business
}
}

2
go.mod
View File

@ -1,6 +1,6 @@
module gitea.cdlsxd.cn/self-tools/l_msg_api module gitea.cdlsxd.cn/self-tools/l_msg_api
go 1.23.6 go 1.22.2
require github.com/valyala/fasthttp v1.59.0 require github.com/valyala/fasthttp v1.59.0

47
msg.go
View File

@ -2,6 +2,7 @@ package l_msg_api
import ( import (
"encoding/json" "encoding/json"
"errors"
) )
type MessageCenter struct { type MessageCenter struct {
@ -23,17 +24,19 @@ func NewMessageCenter(host, clientKey, clientSecret, serverIndex, tempIndex stri
}, },
} }
msg.header = map[string]string{"content-type": "application/json; charset=utf-8"} msg.header = map[string]string{"content-type": "application/json; charset=utf-8"}
accessToken, err := msg.getAccessToken() token, err := msg.getAccessToken()
msg.header = map[string]string{"Authorization": accessToken, "content-type": "application/json; charset=utf-8"} msg.header = map[string]string{"Authorization": token, "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(dTalkUserId, treadNo string, formModel *FormsData) (data OAResponse, err error) {
formModel.formBase.OutTradeNo = treadNo formModel.formBase = formBase{
formModel.formBase.OriginatorUserId = dTalkUserId OutTradeNo: treadNo,
err = m.post(OaCreat, m.parseOACreateParam(formModel), &data) OriginatorUserId: dTalkUserId,
}
err = m.post(oaCreat, m.parseOACreateParam(formModel), &data)
if err != nil { if err != nil {
return return
} }
@ -46,7 +49,7 @@ func (m *MessageCenter) OAGetDetail(outTradeNo string) (data OAGetDetailData, er
Base: m.base, Base: m.base,
OutTradeNo: outTradeNo, OutTradeNo: outTradeNo,
}) })
err = m.post(OaGet, param, &data) err = m.post(oaGet, param, &data)
if err != nil { if err != nil {
return return
} }
@ -54,18 +57,36 @@ func (m *MessageCenter) OAGetDetail(outTradeNo string) (data OAGetDetailData, er
} }
// SendSms 短信 // SendSms 短信
func (m *MessageCenter) SendSms(tels []string, jsonParam string) (data SmsSend, err error) { // business SmsBusiness
func (m *MessageCenter) SendSms(tels []string, jsonParam string, args ...SmsOption) (data SmsSend, err error) {
var (
e = new(SmsOptionData)
)
if len(tels) == 0 {
err = errors.New("手机号不能为空")
return
}
for _, arg := range args {
arg(e)
}
if e.Business != "" {
if _, ex := smsBusinessWithRequestPath[e.Business]; !ex {
err = errors.New("business参数错误")
return
}
} else {
e.Business = SmsBusinessDefault
}
path := smsBusinessWithRequestPath[e.Business]
param := m.parseSmsSendParam(tels, jsonParam) param := m.parseSmsSendParam(tels, jsonParam)
err = m.post(SendSms, param, &data) err = m.post(path, param, &data)
if err != nil { if err != nil {
return return
} }
return return
} }
// BlackboardReceiverView struct {
// }
// SendBlackBoard 钉钉公告 // SendBlackBoard 钉钉公告
// deptidList //接收部门ID列表最大的列表长度为20。 // deptidList //接收部门ID列表最大的列表长度为20。
// UseridList //接收部用户ID列表最大的列表长度为20。 // UseridList //接收部用户ID列表最大的列表长度为20。
@ -73,7 +94,7 @@ func (m *MessageCenter) SendBlackBoard(title, content string, deptidList []int,
receiver := blackboardReceiverView{ receiver := blackboardReceiverView{
deptidList, useridList, deptidList, useridList,
} }
err = m.post(SendSms, m.parseSendBlackBoardParam(title, content, receiver), &data) err = m.post(sendSms, m.parseSendBlackBoardParam(title, content, receiver), &data)
if err != nil { if err != nil {
return return
} }
@ -93,7 +114,7 @@ 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.post(oaComment, param, &data)
if err != nil { if err != nil {
return return
} }

View File

@ -45,7 +45,7 @@ func (m *MessageCenter) getAccessToken() (string, error) {
var data accessTokenResponse var data accessTokenResponse
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
} }
@ -53,9 +53,9 @@ func (m *MessageCenter) getAccessToken() (string, error) {
return data.AccessToken, err return data.AccessToken, err
} }
func (m *MessageCenter) post(path string, data []byte, resReflect interface{}) (err error) { func (m *MessageCenter) post(path RequestPath, 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 {
return return
} }
@ -77,9 +77,9 @@ func (m *MessageCenter) post(path string, data []byte, resReflect interface{}) (
return return
} }
func (m *MessageCenter) accessPost(path string, data []byte, resReflect interface{}) (err error) { func (m *MessageCenter) accessPost(path RequestPath, 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 {
return return
} }

View File

@ -1,6 +1,7 @@
package test package test
import ( import (
"context"
"fmt" "fmt"
"gitea.cdlsxd.cn/self-tools/l_msg_api" "gitea.cdlsxd.cn/self-tools/l_msg_api"
"testing" "testing"
@ -9,10 +10,12 @@ import (
const ( const (
ClientKey = "ymt" ClientKey = "ymt"
ClientSecret = "ymt" ClientSecret = "ymt"
serverHost = "http://120.55.12.245:8200"
local = "http://127.0.0.1:8001"
) )
func TestSms(t *testing.T) { func TestSms(t *testing.T) {
msg, err := l_msg_api.NewMessageCenter(ClientKey, ClientSecret, "smssass", "sasssms") msg, err := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "smssass", "sasssms")
if err != nil { if err != nil {
panic(err) panic(err)
} }
@ -23,7 +26,7 @@ func TestSms(t *testing.T) {
} }
func TestOaCreate(t *testing.T) { func TestOaCreate(t *testing.T) {
msg, err := l_msg_api.NewMessageCenter(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 {
panic(err) panic(err)
} }
@ -35,7 +38,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", "123456789123bgff", &l_msg_api.FormsData{ res, err := msg.OACreate("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",
@ -46,6 +49,8 @@ func TestOaCreate(t *testing.T) {
CallbackUrl: "www.baidu.com", CallbackUrl: "www.baidu.com",
Remark: "测试备注", Remark: "测试备注",
Sync: 1, Sync: 1,
SystemName: "货易通",
SubjectName: "成都蓝色兄弟网络科技有限公司(0802)",
BankInfo: l_msg_api.BankInfo{ BankInfo: l_msg_api.BankInfo{
BankName: "中国银行", BankName: "中国银行",
BankAccount: "43243243434", BankAccount: "43243243434",
@ -59,10 +64,15 @@ func TestOaCreate(t *testing.T) {
} }
func TestOaComment(t *testing.T) { func TestOaComment(t *testing.T) {
msg, err := l_msg_api.NewMessageCenter(ClientKey, ClientSecret, "sw_oa", "sw_oa_purchase") msg, err := l_msg_api.NewMessageCenter(serverHost, ClientKey, ClientSecret, "sw_oa", "sw_oa_purchase")
if err != nil { if err != nil {
panic(err) panic(err)
} }
res, err := msg.OAComment("P24110515152043136-20250318181554", "sdk测试", "", nil) res, err := msg.OAComment("P24110515152043136-20250318181554", "sdk测试", "", nil)
fmt.Println(res, err) fmt.Println(res, err)
} }
func TestContext(*testing.T) {
c := context.Background()
c.Done()
}