diff --git a/business/enterprise/enterprise.go b/business/enterprise/enterprise.go new file mode 100644 index 000000000..af4599f2b --- /dev/null +++ b/business/enterprise/enterprise.go @@ -0,0 +1,45 @@ +package enterprise + +import ( + "git.rosy.net.cn/baseapi/platformapi/enterprise_wechat" + "git.rosy.net.cn/jx-callback/business/model" + "git.rosy.net.cn/jx-callback/business/model/dao" + "git.rosy.net.cn/jx-callback/business/model/legacymodel" + "git.rosy.net.cn/jx-callback/globals" + "strconv" +) + +var EnterpriseSuite *enterprise_wechat.SuiteTicketInfo + +// 初始化加载全局变量 +func init() { + config := make([]*legacymodel.Config, 0) + sql := `SELECT * FROM config WHERE thirdparty = ? ` + if err := dao.GetRows(dao.GetDB(), config, sql, []interface{}{"enterprise"}); err != nil { + globals.SugarLogger.Debugf("enterprice config err = ", err) + } + if len(config) >= model.YES { + EnterpriseSuite.SuiteId = config[0].RefreshToken + EnterpriseSuite.SuiteTicket = config[0].Token + EnterpriseSuite.InfoType = "" + time, _ := strconv.ParseInt(config[0].Date, 10, 64) + EnterpriseSuite.TimeStamp = time + } +} + +func UpdateEnterpriseSuite(data *enterprise_wechat.SuiteTicketInfo) error { + if data.SuiteTicket != "" && data.TimeStamp > 0 { + EnterpriseSuite = data + } + + // 修改数据库 + db := dao.GetDB() + config := &legacymodel.Config{ + Thirdparty: "enterprise", + Token: data.SuiteTicket, + Date: string(data.TimeStamp), + LastOperator: model.AdminName, + RefreshToken: data.SuiteId, + } + return dao.CreateOrUpdate(db, config) +} diff --git a/controllers/enterprise_callback.go b/controllers/enterprise_callback.go new file mode 100644 index 000000000..635871317 --- /dev/null +++ b/controllers/enterprise_callback.go @@ -0,0 +1,31 @@ +package controllers + +import ( + "git.rosy.net.cn/jx-callback/business/enterprise" + "git.rosy.net.cn/jx-callback/globals" + "git.rosy.net.cn/jx-callback/globals/api" + "github.com/astaxie/beego/server/web" +) + +type EnterpriseController struct { + web.Controller +} + +// EnterpriseCallback 在发生授权、通讯录变更、ticket变化等事件时,企业微信服务器会向应用的“指令回调URL”推送相应的事件消息。 +// 消息结构体将使用创建应用时的EncodingAESKey进行加密(特别注意, 在第三方回调事件中使用加解密算法,receiveid的内容为suiteid) +// ,请参考接收消息解析数据包。 +func (e *EnterpriseController) EnterpriseCallback() { + globals.SugarLogger.Debug("======================") + enterpriseData, err := api.EnterpriseChatHeadApi.GetEnterpriseMsg(e.Ctx.Request) + if err != nil { + globals.SugarLogger.Debug("======================err1", err) + e.Abort("404") + } + + if err := enterprise.UpdateEnterpriseSuite(enterpriseData); err != nil { + globals.SugarLogger.Debug("======================err2", err) + e.Abort("404") + } + e.Data["xml"] = "success" + e.ServeXML() +} diff --git a/main.go b/main.go index cd13fbe63..089f7e9ed 100644 --- a/main.go +++ b/main.go @@ -40,6 +40,7 @@ import ( _ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/alipay" _ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/dingding" _ "git.rosy.net.cn/jx-callback/business/auth2/authprovider/douyin" + _ "git.rosy.net.cn/jx-callback/business/enterprise" _ "git.rosy.net.cn/jx-callback/business/model/dao" _ "git.rosy.net.cn/jx-callback/business/partner/purchase/ebai" _ "git.rosy.net.cn/jx-callback/business/partner/purchase/jd" diff --git a/routers/router.go b/routers/router.go index ab20e1dc7..319e175bc 100644 --- a/routers/router.go +++ b/routers/router.go @@ -182,6 +182,7 @@ func init() { web.AutoRouter(&controllers.KnowUploadController{}) web.AutoRouter(&controllers.AliApiController{}) web.AutoRouter(&controllers.TicTocController{}) + web.AutoRouter(&controllers.EnterpriseController{}) // 如下都是用于检测存活的空接口 web.Any("/", func(ctx *beecontext.Context) {