Compare commits
7 Commits
Author | SHA1 | Date |
---|---|---|
|
9bd21cf288 | |
|
761b8371d8 | |
|
f0afe45aad | |
|
877a9e10d3 | |
|
84ae733098 | |
|
cc5b1464a4 | |
|
5c982fb266 |
19
config.go
19
config.go
|
@ -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"` //银行名称
|
||||||
|
|
43
const.go
43
const.go
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
47
msg.go
47
msg.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
10
paramset.go
10
paramset.go
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue