diff --git a/miniprogram/subscribe/subscribe.go b/miniprogram/subscribe/subscribe.go index c260fca..dad44b8 100644 --- a/miniprogram/subscribe/subscribe.go +++ b/miniprogram/subscribe/subscribe.go @@ -16,6 +16,14 @@ const ( // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getTemplateList.html getTemplateURL = "https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate" + // 添加订阅模板 + // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.addTemplate.html + addTemplateURL = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate" + + // 删除私有模板 + // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.deleteTemplate.html + delTemplateURL = "https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate" + // 统一服务消息 // https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html uniformMessageSend = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send" @@ -133,3 +141,55 @@ func (s *Subscribe) UniformSend(msg *UniformMessage) (err error) { } return util.DecodeWithCommonError(response, "UniformSend") } + +type resSubscribeAdd struct { + util.CommonError + + TemplateID string `json:"priTmplId"` +} + +// Add 添加订阅消息模板 +func (s *Subscribe) Add(ShortID string, kidList []int, sceneDesc string) (templateID string, err error) { + var accessToken string + accessToken, err = s.GetAccessToken() + if err != nil { + return + } + var msg = struct { + TemplateIDShort string `json:"tid"` + SceneDesc string `json:"sceneDesc"` + KidList []int `json:"kidList"` + }{TemplateIDShort: ShortID, SceneDesc: sceneDesc, KidList: kidList} + uri := fmt.Sprintf("%s?access_token=%s", addTemplateURL, accessToken) + var response []byte + response, err = util.PostJSON(uri, msg) + if err != nil { + return + } + var result resSubscribeAdd + err = util.DecodeWithError(response, &result, "AddSubscribe") + if err != nil { + return + } + templateID = result.TemplateID + return +} + +// Delete 删除私有模板 +func (s *Subscribe) Delete(templateID string) (err error) { + var accessToken string + accessToken, err = s.GetAccessToken() + if err != nil { + return + } + var msg = struct { + TemplateID string `json:"priTmplId"` + }{TemplateID: templateID} + uri := fmt.Sprintf("%s?access_token=%s", delTemplateURL, accessToken) + var response []byte + response, err = util.PostJSON(uri, msg) + if err != nil { + return + } + return util.DecodeWithCommonError(response, "DeleteSubscribe") +} diff --git a/officialaccount/message/subscribe.go b/officialaccount/message/subscribe.go index 8598d21..3f9a42e 100644 --- a/officialaccount/message/subscribe.go +++ b/officialaccount/message/subscribe.go @@ -10,6 +10,8 @@ import ( const ( subscribeSendURL = "https://api.weixin.qq.com/cgi-bin/message/subscribe/bizsend" subscribeTemplateListURL = "https://api.weixin.qq.com/wxaapi/newtmpl/gettemplate" + subscribeTemplateAddURL = "https://api.weixin.qq.com/wxaapi/newtmpl/addtemplate" + subscribeTemplateDelURL = "https://api.weixin.qq.com/wxaapi/newtmpl/deltemplate" ) //Subscribe 订阅消息 @@ -84,10 +86,62 @@ func (tpl *Subscribe) List() (templateList []*PrivateSubscribeItem, err error) { return } var res resPrivateSubscribeList - err = util.DecodeWithError(response, &res, "ListSubscription") + err = util.DecodeWithError(response, &res, "ListSubscribe") if err != nil { return } templateList = res.SubscriptionList return } + +type resSubscribeAdd struct { + util.CommonError + + TemplateID string `json:"priTmplId"` +} + +// Add 添加订阅消息模板 +func (tpl *Subscribe) Add(ShortID string, kidList []int, sceneDesc string) (templateID string, err error) { + var accessToken string + accessToken, err = tpl.GetAccessToken() + if err != nil { + return + } + var msg = struct { + TemplateIDShort string `json:"tid"` + SceneDesc string `json:"sceneDesc"` + KidList []int `json:"kidList"` + }{TemplateIDShort: ShortID, SceneDesc: sceneDesc, KidList: kidList} + uri := fmt.Sprintf("%s?access_token=%s", subscribeTemplateAddURL, accessToken) + var response []byte + response, err = util.PostJSON(uri, msg) + if err != nil { + return + } + var result resSubscribeAdd + err = util.DecodeWithError(response, &result, "AddSubscribe") + if err != nil { + return + } + templateID = result.TemplateID + return +} + +// Delete 删除私有模板 +func (tpl *Subscribe) Delete(templateID string) (err error) { + var accessToken string + accessToken, err = tpl.GetAccessToken() + if err != nil { + return + } + var msg = struct { + TemplateID string `json:"priTmplId"` + }{TemplateID: templateID} + uri := fmt.Sprintf("%s?access_token=%s", subscribeTemplateDelURL, accessToken) + var response []byte + response, err = util.PostJSON(uri, msg) + if err != nil { + return + } + return util.DecodeWithCommonError(response, "DeleteSubscribe") +} diff --git a/work/kf/error.go b/work/kf/error.go index 6281459..5c0c1c3 100644 --- a/work/kf/error.go +++ b/work/kf/error.go @@ -33,10 +33,14 @@ const ( SDKApiFreqOutOfLimit Error = "接口请求次数超频" // SDKApiForbidden 错误码:48002 SDKApiForbidden Error = "API 禁止调用" + // SDKInvalidOpenKFID 错误码:95000 + SDKInvalidOpenKFID Error = "无效的 open_kfid" // SDKOpenKFIDNotExist 错误码:95004 SDKOpenKFIDNotExist Error = "open_kfid 不存在" // SDKWeWorkAlready 错误码:95011 SDKWeWorkAlready Error = "已在企业微信使用微信客服" + // SDKApiNotOpen 错误码:95017 + SDKApiNotOpen Error = "API 功能没有被开启" ) //Error 输出错误信息 @@ -69,10 +73,14 @@ func NewSDKErr(code int64, msgList ...string) Error { return SDKApiFreqOutOfLimit case 48002: return SDKApiForbidden + case 95000: + return SDKInvalidOpenKFID case 95004: return SDKOpenKFIDNotExist case 95011: return SDKWeWorkAlready + case 95017: + return SDKApiNotOpen default: //返回未知的自定义错误 if len(msgList) > 0 {